
Halihazırda çalışmakta olan bir veritabanın bir kopyasını başka bir sunucuda ayağa kaldırmak için RMAN ile duplicate işlemi yapılabilir. Duplicate işlemi için, yeni sunucuya, kaynaktaki veritabanının aynı versiyonu bir veritabanı software-only olarak kurulduktan sonra aşağıdaki adımlar izlenir.
- Her iki veritabanı sunucusunda da $ORACLE_HOME/network/admin altında bulunan tnsnames.ora dosyasına, kaynak ve hedef veritabanı tns’leri aynı şekilde eklenir.
SOURCE_DB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = sourchehost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = SOURCE_DB)
)
)
TARGET_DB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = target_host)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = TARGET_DB)
)
)
- Her iki sunucuda da, kaynak ve hedef sunucuya tnsping testi yapılarak doğru yere gittiği görülür.
[oracle@sourcehost]$ tnsping SOURCE_DB
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = sourcehost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = SOURCE_DB)))
OK (10 msec)
[oracle@sourcehost]$ tnsping TARGET_DB
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = targethost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = TARGET_DB)))
OK (10 msec)
[oracle@targethost]$ tnsping TARGET_DB
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = targethost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = TARGET_DB)))
OK (10 msec)
[oracle@targethost]$ tnsping SOURCE_DB
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = sourcehost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = SOURCE_DB)))
OK (10 msec)
- Kaynak veritabanında
$ORACLE_HOME/dbs
altında bulundanorapwTARGET_DB
isimli password file, hedef veritabanı sunucusunda$ORACLE_HOME/dbs
dizini altındaorapwdSOURCE_DB
ismiyle taşınır.
$ scp orapwTARGET_DB sourcehost:/home/oracle/orapwTARGET_DB $ORACLE_HOME/dbs/orapwSOURCE_DB
- Kaynak veritabanı pfile dosyası yedeklenerek hedef sunucuya gönderilir. Pfile üzerinde gerekli düzenlemeler yapılır.
- Hedef veritabanı kapatılır ve kopyalanan pfile ile nomount modda açılır.
SQL> startup nomount pfile='/home/oracle/pfile_yedek.ora';
ORACLE instance started.
Total System Global Area 1.0689E+11 bytes
Fixed Size 2265864 bytes
Variable Size 1.0415E+11 bytes
Database Buffers 2684354560 bytes
Redo Buffers 55242752 bytes
- Kaynak veritabanındaki controlfile, datafile, logfile, adump dosyalarının bulunduğu konumlar, hedef veritabanında birebir aynı şekilde oluşturulur. (Farklı ise pfile üzerinde ve rman duplicate komutunda ayarlama yapılması gerekir)
mkdir -p <control_file_locations>
mkdir -p <adump_locations>
mkdir -p <soruce_db_files_loc>
mkdir -p <source_redo_files_loc>
- Tüm adımlar tamamlandıktan sonra, RMAN ile bağlanılarak duplicate işlemi başlatılabilir.
$ rman target sys/password@SOURCE_DB auxiliary sys/password@TARGET_DB
--Duplicate Komutu Verilir
duplicate target database to <DB_NAME> from active database nofilenamecheck;
Eğer Target ve Source DB lerde Datafile ve logfile konumları farklı ise pfile içerisine convert parametreleri yazılır ayrıca Duplicate işleminde rman komutu aşağıdaki şekilde verilir.
Pfile
DB_NAME=newdb
CONTROL_FILES=(/dup/oracle/oradata/trgt/control01.ctl,
/dup/oracle/oradata/trgt/control02.ctl)
DB_FILE_NAME_CONVERT=(/oracle/oradata/trgt/,/dup/oracle/oradata/trgt/)
LOG_FILE_NAME_CONVERT=(/oracle/oradata/trgt/redo,/dup/oracle/oradata/trgt/redo)
RUN
{
# The DUPLICATE command uses an automatic sbt channel.
# Because the target datafiles are spread across multiple directories,
# run SET NEWNAME rather than DB_FILE_NAME_CONVERT
SET NEWNAME FOR DATAFILE 1 TO '/oradata1/system01.dbf';
SET NEWNAME FOR DATAFILE 2 TO '/oradata2/undotbs01.dbf';
SET NEWNAME FOR DATAFILE 3 TO '/oradata3/cwmlite01.dbf';
SET NEWNAME FOR DATAFILE 4 TO '/oradata4/drsys01';
SET NEWNAME FOR DATAFILE 5 TO '/oradata5/example01.dbf';
SET NEWNAME FOR DATAFILE 6 TO '/oradata6/indx01.dbf';
SET NEWNAME FOR DATAFILE 8 TO '/oradata7/users01.dbf';
DUPLICATE TARGET DATABASE TO <DB_NAME> from active database nofilenamecheck;
LOGFILE
GROUP 1 ('/duplogs/redo01a.log',
'/duplogs/redo01b.log') SIZE 512M REUSE,
GROUP 2 ('/duplogs/redo02a.log',
'/duplogs/redo02b.log') SIZE 512M REUSE;
};
Değerli Çalışma arkadaşım Eyüp Oray BEKDEMİR’ e bu dokümanı hazırladığı için teşekkür ederim…
Bir yanıt yazın