Press ESC to close

Oracle DUPLICATE DATABASE

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 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.

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

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir