Действия производились на Linux-хостах.
Есть исходная БД testdb, которую нужно клонировать на другой хост, но структура каталогов и имя БД остаются без изменения, т.е. тоже testdb.
export ORACLE_SID=testdb
sqlplus -S '/ as sysdba' << EOF shutdown immediate; EOF
rm -Rf ${ORACLE_BASE}/admin/${ORACLE_SID} rm -Rf ${ORACLE_BASE}/fast_recovery_area/${ORACLE_SID} rm -Rf ${ORACLE_BASE}/oradata/${ORACLE_SID} rm -Rf ${ORACLE_BASE}/diag/rdbms/${ORACLE_SID} find ${ORACLE_HOME}/dbs/ -type f -iname "*${ORACLE_SID}*" -print0 | xargs -0 rm -f
mkdir -p ${ORACLE_BASE}/admin/${ORACLE_SID}/adump mkdir -p ${ORACLE_BASE}/fast_recovery_area/${ORACLE_SID} mkdir -p ${ORACLE_BASE}/oradata/${ORACLE_SID} mkdir -p ${ORACLE_BASE}/diag/rdbms/${ORACLE_SID}
orapwd file=$ORACLE_HOME/dbs/orapw${ORACLE_SID} entries=10 password=<PASSWORD>
<PASSWORD> — выставляем таким же, как на исходой БД. Иначе RMAN не сможет подключится к новой БД на одном из шагов.
echo "db_name='${ORACLE_SID}'" > $ORACLE_HOME/dbs/init${ORACLE_SID}.ora
nomount
":sqlplus -S '/ as sysdba' << EOF startup nomount; EOF
$ORACLE_HOME/network/admin/tnsnames.ora
" соединение с новым хостом. Например, testdb_clone:TESTDB_CLONE = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = newhost.domain.com)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = testdb) ) )
rman target sys@testdb auxiliary sys@testdb_clone
Должны получить что-то типа этого:
Recovery Manager: Release 11.2.0.4.0 - Production on Fri Apr 5 09:38:09 2019 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. target database Password: connected to target database: TESTDB (DBID=63772897) auxiliary database Password: connected to auxiliary database: TESTDB (not mounted)
duplicate
":duplicate target database to testdb from active database password file spfile nofilenamecheck;
Где:
testdb
— имя БД на новом хосте, т.е. то имя, которое будет у вновь поднятой БД;password file
— указание перенести и password-файл тоже. Бывает нужно в случае, если в исходной БД он содержит несколько учётных записей;spfile
— перенести и spfile тоже;nofilenamecheck
— полные имена файлов исходной БД и целевой будут совпадать, что вызовет ошибки, т.к. RMAN посчитает это неправильным. Для игнорирования таких ошибок используем эту опцию.Если всё сделано правильно, через некоторое время (зависит от объёмов БД, от пропусной способности каналов, от скорости записи дисковых подсистем,..) на удалённом хосте появится клон БД.