
Bu yazıda Oracle RMAN Duplicate Database işleminin adım adım nasıl yapıldığını inceleyeceğiz. Active database clone işlemleri, listener ve tns ayarları, password file, spfile hazırlıkları ve sık karşılaşılan hata senaryoları detaylı olarak ele alınacaktır.
Oracle RMAN Duplicate işlemi; test ortamı oluşturma, DR senaryoları, migration çalışmaları ve upgrade hazırlıkları gibi birçok farklı ihtiyaç için Oracle DBA’lerin en sık kullandığı yöntemlerden biridir. Bu yazıda duplicate database işleminin tüm adımlarını uçtan uca inceleyeceğiz.
uplicate işlemine başlamadan önce hedef sunucuya, kaynak veritabanı ile aynı Oracle Database versiyonu software-only olarak kurulmalıdır. Kurulum tamamlandıktan sonra aşağıdaki adımlar uygulanır.
İlk olarak kaynak ve hedef veritabanı sunucularında bulunan $ORACLE_HOME/network/admin dizini altındaki tnsnames.ora dosyasına, hem kaynak hem de hedef veritabanına ait TNS kayıtları karşılıklı erişim sağlayacak şekilde eklenmelidir.
tnsnames.ora
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 bulundan orapwTARGET_DB isimli password file, hedef veritabanı sunucusunda $ORACLE_HOME/dbs dizini altında orapwdSOURCE_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.
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) duplicate komutu aşaıdaki gibide verilebilir
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;
};
Bir yanıt yazın