Hurriyet

19 Ocak 2014 Pazar

Oracle Veritabanı: Database Cloning - Veritabanı Klonlama

Database klonlamanın amacı DBA'lerin developer'lara hızlı bir test veya development ortamları hazırlanmasıdır. Klonlar genellikle production ortamından alınırlar.

Database hızlıca klonlamak için aşağıda sıralayacağımız adımların atılması gerekmektedir.

1.Adım:

Sqlplus'tan bağlanıp controlfile yedeği alınır. Controlfile yedeği trace directory'sine alınarak controlfile yaratılma script'i bir trace dosyasına yazılır.

 sqlplus / as sysdba  
   
 alter database backup controlfile to trace;  





Trace'e backup alındıktan sonra gerekli bilgiler bir trace dosyasına yazılır. Hangi trace dosyasına yazıldığını görmek için alert_SID.orcl içine bakılabilinir.

tail -100 alert_orcl.ora | grep "controlfile"  

 Backup controlfile written to trace file /oracle/product/11.2.0/diag/rdbms/orcl/orcl/trace/orcl_ora_3666148.trc  
 Completed: alter database backup controlfile to trace  







Eğer farklı bir lokasyona backup alınacaksa aşağıdaki gibi syntax kullanılır.

 alter database backup controlfile to trace as '/home/users/oracle/berke_deneme.ctl' 

Control File trace dosyasına alındıktan sonra bu trace dosyasında aşağıdaki gibi SQL'ler bulunur. SQL'ler içerisinde 2 durum belirtilmiştir. 1.sinde yani NORESETLOGS durumunda online log'lar elimizde olmalıdır ki bu klon durumunda elimizde bulunmaktadır. Bu durumda database'imizin adını değiştirmeden tutmuş oluruz.

2.durumda ise veritabanı RESETLOGS ile açılır. Ya loglar yoktur ya da veritabanı ismi değiştirilmek isteniyordur.

Her iki durumda da lokasyonlar yeni uygun konumlarına göre değiştirilmelidirler. Örneğin aşağıdaki sistemde "/u01/" ile başlayan lokasyonu uygun şekilde değiştiririz. Bunu bütün log lokasyonları ve diğer gerekli yerler için değiştiririz.

Bu işlemleri yaptıktan sonra durumumuza göre yani şeçimimize göre hangi kısmı istiyorsak kopyalayıp onu bir SQL dosyasına yerleştiririz.

Asagidaki dosya trace dosyamiza yazilan controlfile dosyasidir. Bu dosyadan 1 numarali ornegi aliriz ve icindeki orcl ile baslayan kisimlari yeni veritabanimizin adina gore degistiririz.

 --   Set #1. NORESETLOGS case  
 --  
 -- The following commands will create a new control file and use it  
 -- to open the database.  
 -- Data used by Recovery Manager will be lost.  
 -- Additional logs may be required for media recovery of offline  
 -- Use this only if the current versions of all online logs are  
 -- available.  
 -- After mounting the created controlfile, the following SQL  
 -- statement will place the database in the appropriate  
 -- protection mode:  
 -- ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE  
 STARTUP NOMOUNT  
 CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS ARCHIVELOG  
   MAXLOGFILES 16  
   MAXLOGMEMBERS 3  
   MAXDATAFILES 100  
   MAXINSTANCES 8  
   MAXLOGHISTORY 292  
 LOGFILE  
  GROUP 1 '/u01/app/oracle/oradata/orcl/redo01.log' SIZE 50M BLOCKSIZE 512,  
  GROUP 2 '/u01/app/oracle/oradata/orcl/redo02.log' SIZE 50M BLOCKSIZE 512,  
  GROUP 3 '/u01/app/oracle/oradata/orcl/redo03.log' SIZE 50M BLOCKSIZE 512  
 -- STANDBY LOGFILE  
 DATAFILE  
  '/u01/app/oracle/oradata/orcl/system01.dbf',  
  '/u01/app/oracle/oradata/orcl/sysaux01.dbf',  
  '/u01/app/oracle/oradata/orcl/undotbs01.dbf',  
  '/u01/app/oracle/oradata/orcl/users01.dbf',  
  '/u01/app/oracle/oradata/orcl/example01.dbf'  
 CHARACTER SET WE8MSWIN1252  
 ;  
 -- Commands to re-create incarnation table  
 -- Below log names MUST be changed to existing filenames on  
 -- disk. Any one log file from each branch can be used to  
 -- re-create incarnation records.  
 -- ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2013_12_23/o1_mf_1_1_%u_.arc';  
 -- ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2013_12_23/o1_mf_1_1_%u_.arc';  
 -- Recovery is required if any of the datafiles are restored backups,  
 -- or if the last shutdown was not normal or immediate.  
 RECOVER DATABASE  
 -- All logs need archiving and a log switch is needed.  
 ALTER SYSTEM ARCHIVE LOG ALL;  
 -- Database can now be opened normally.  
 ALTER DATABASE OPEN;  
 -- Commands to add tempfiles to temporary tablespaces.  
 -- Online tempfiles have complete space information.  
 -- Other tempfiles may require adjustment.  
 ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/orcl/temp01.dbf'  
    SIZE 20971520 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;  
 -- End of tempfile additions.  
 --  
 --   Set #2. RESETLOGS case  
 --  
 -- The following commands will create a new control file and use it  
 -- to open the database.  
 -- Data used by Recovery Manager will be lost.  
 -- The contents of online logs will be lost and all backups will  
 -- be invalidated. Use this only if online logs are damaged.  
 -- After mounting the created controlfile, the following SQL  
 -- statement will place the database in the appropriate  
 -- protection mode:  
 -- ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE  
 STARTUP NOMOUNT  
 CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS ARCHIVELOG  
   MAXLOGFILES 16  
   MAXLOGMEMBERS 3  
   MAXDATAFILES 100  
   MAXINSTANCES 8  
   MAXLOGHISTORY 292  
 LOGFILE  
  GROUP 1 '/u01/app/oracle/oradata/orcl/redo01.log' SIZE 50M BLOCKSIZE 512,  
  GROUP 2 '/u01/app/oracle/oradata/orcl/redo02.log' SIZE 50M BLOCKSIZE 512,  
  GROUP 3 '/u01/app/oracle/oradata/orcl/redo03.log' SIZE 50M BLOCKSIZE 512  
 -- STANDBY LOGFILE  
 DATAFILE  
  '/u01/app/oracle/oradata/orcl/system01.dbf',  
  '/u01/app/oracle/oradata/orcl/sysaux01.dbf',  
  '/u01/app/oracle/oradata/orcl/undotbs01.dbf',  
  '/u01/app/oracle/oradata/orcl/users01.dbf',  
  '/u01/app/oracle/oradata/orcl/example01.dbf'  
 CHARACTER SET WE8MSWIN1252  
 ;  
 -- Commands to re-create incarnation table  
 -- Below log names MUST be changed to existing filenames on  
 -- disk. Any one log file from each branch can be used to  
 -- re-create incarnation records.  
 -- ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2013_12_23/o1_mf_1_1_%u_.arc';  
 -- ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2013_12_23/o1_mf_1_1_%u_.arc';  
 -- Recovery is required if any of the datafiles are restored backups,  
 -- or if the last shutdown was not normal or immediate.  
 RECOVER DATABASE USING BACKUP CONTROLFILE  
 -- Database can now be opened zeroing the online logs.  
 ALTER DATABASE OPEN RESETLOGS;  
 -- Commands to add tempfiles to temporary tablespaces.  
 -- Online tempfiles have complete space information.  
 -- Other tempfiles may require adjustment.  
 ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/orcl/temp01.dbf'  
    SIZE 20971520 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;  
 -- End of tempfile additions.  
 --  

Degisikliklerden sonra asagidaki bir sekil almasi gerekir.

 --  Set #1. NORESETLOGS case   
  --   
  -- The following commands will create a new control file and use it   
  -- to open the database.   
  -- Data used by Recovery Manager will be lost.   
  -- Additional logs may be required for media recovery of offline   
  -- Use this only if the current versions of all online logs are   
  -- available.   
  -- After mounting the created controlfile, the following SQL   
  -- statement will place the database in the appropriate   
  -- protection mode:   
  -- ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE   
    
  CREATE CONTROLFILE SET DATABASE "BERKE" NORESETLOGS ARCHIVELOG   
   MAXLOGFILES 16   
   MAXLOGMEMBERS 3   
   MAXDATAFILES 100   
   MAXINSTANCES 8   
   MAXLOGHISTORY 292   
  LOGFILE   
  GROUP 1 '/u02/app/oracle/oradata/berke/redo01.log' SIZE 50M BLOCKSIZE 512,   
  GROUP 2 '/u02/app/oracle/oradata/berke/redo02.log' SIZE 50M BLOCKSIZE 512,   
  GROUP 3 '/u02/app/oracle/oradata/berke/redo03.log' SIZE 50M BLOCKSIZE 512   
  -- STANDBY LOGFILE   
  DATAFILE   
  '/u02/app/oracle/oradata/berke/system01.dbf',   
  '/u02/app/oracle/oradata/berke/sysaux01.dbf',   
  '/u02/app/oracle/oradata/berke/undotbs01.dbf',   
  '/u02/app/oracle/oradata/berke/users01.dbf',   
  '/u02/app/oracle/oradata/berke/example01.dbf'   
  CHARACTER SET WE8MSWIN1252   
  ;   
  -- Commands to re-create incarnation table   
  -- Below log names MUST be changed to existing filenames on   
  -- disk. Any one log file from each branch can be used to   
  -- re-create incarnation records.   
  -- ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2013_12_23/o1_mf_1_1_%u_.arc';   
  -- ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2013_12_23/o1_mf_1_1_%u_.arc';   
  -- Recovery is required if any of the datafiles are restored backups,   
  -- or if the last shutdown was not normal or immediate.   
   
  -- Commands to add tempfiles to temporary tablespaces.   
  -- Online tempfiles have complete space information.   
  -- Other tempfiles may require adjustment.   
   
  -- End of tempfile additions.   
  --  

Yukaridaki gibi bir hale getirdikten sonra bunu bir sql dosyali uzanti olarak kaydederiz.

2.Adım

Klonu alınacak database kapatılır.

 shutdown database;  

Database kapatılmadan önce belirli bilgiler depolanması "best practice"'dir.

 spool '/home/users/oracle/berke_dbinfo'  
 select name,value from v$parameter where value like '%/oracle%';  
 show parameter dispatchers;  
 select name from v$datafile;  
 select * from v$logfile;  
 select member from v$logfile;  
 spool off;  

Controlfile'dan sonra pfile dosyasıda yedeklenir.

 create pfile from spfile;  















Pfile'ın yedeğini aldıktan sonra bu dosyanın içerisinde yeni alacağımız klonun durumuna göre gerekli değişiklikler yapılır; ama öncesinde pfile'ımızdan yeni sistemde kullanılmak üzere aşağıdaki komuttaki gibi yeni veritabanını adını yansıtacak şekilde bir pfile yaratırız.

 cp $ORACLE_HOME/dbs/initorcl.ora $ORACLE_HOME/dbs/initberke.ora 

Bu yarattığımız pfile dosyası yeni veritabanımızın pfile'ını temsil etmektedir.

 Yarattıktan sonra klasör adları değiştirilir. Belli başlı pfile'da değiştirilecek parametreler aşağıdaki gibidir.

 *.control_files   
 *.audit_file_dest  
 *.db_recovery_file_dest  
 *.diagnostic_dest  
 *.log_archive_dest_1=’LOCATION=’  

Bunları yeni lokasyonlarına göre adlandırdıktan sonra diğer adımlara geçeriz.

3.Adım

Bütün datafile'lar yeni makinadaki uygun yerlerine kopyalanır. Bire bir kopyalama yapılacağı için dosya dizinleri değişmeyecektir.

scp -r /oracle/product/oradata/orcl/* berke@berke_laptop:/u02/app/oracle/product/oradata/berke/.

Datafile adı değiştirilecekse ona göre klasör oluşturulması gerekir. Örneğin uzaktaki makinada klasör adı "berke" olarak değil "orcl" olarak değiştirilir ve öyle yaratılır.

Eğer uzaktaki makinada gerekli dizinler oluşturulmadıysa, oluşturulacak gerekli dizinler aşağıdaki komutlarla bulunur ve yaratılır.

 cd /oracle  
 find . -name *orcl*  
 find . -name *ORCL*  

Veritabanımızın ismiyle oluşturulmuş bütün klasörleri bulmak için ise:

 find . -type d -name *ORCL* 

Böylece database ismimizle yaratılmış olabilecek bütün klasörleri buluruz ve ona göre gerekli dizinleri yaratabiliriz.
ORACLE_HOME klasörümüzdeki binary dosyalarda taşınması gereken dosyalardır. Yani /u01/app/oracle/product/11.2.0/db_1'den yeni makinadaki yerlerine direk olarak kopyalanir.

İlk olarak aynı klasör yapısını oluştururuz. Aynı klasör yapısını oluşturmak için yukarıda find ile çıkarttığımız klasörleri mkdir -p komutuyla oluştururuz. Mkdir  -p komutu ile oluşturmamızın nedeni bütün ardı ardına gelen klasörleri arka arkaya yaratmasıdır.

4.Adım

3.Adımda eğer klasör adları değiştirilirse 1.adımda backup'ını aldığımız Controlfile'ı kopyalayıp editleriz. Oradaki controlfile yaratma script'ini alıp içinde belirli değişiklikler yaparız.

 CREATE CONTROLFILE SET DATABASE "ORCL" RESETLOGS  

Eğer aynı kalacaksa  dokunulmaz.

CREATE CONTROLFILE REUSE DATABASE "BERKE" NORESETLOGS  

5.Adım 

init_.ora dosyası kopyalanır. $ORACLE_HOME/dbs altına atılır.


scp init_BERKE.ora berke@berke_laptop:/u02/oracle/product/11.2.0/db_1/dbs/.

Bu parametre dosyasında eğer parametrelerde değişiklik yapıldıysa controlfile yerleri ile oynandıysa bu değişiklikler aynen yansıtılır.

6.Adim

Bu adima kadar yeni makinamizda sirasiyla:

1- Yeni makinamizda calistiracagimiz controlfile scriptini olusturduk.
2- Eski makinamizdaki veritabanini kapatip butun datafile`lari yeni makinamizdaki yerlerine tasidik. Ayrıca bütün binary dosyalarımızı yani $ORACLE_HOME altındaki dosyaları yeni makinamıza aktardık.
3- Pfile dosyamizi yeni lokasyonuna atip orada , datafile ve controlfile ile ilgili yaptigimiz degisiklikleri yansitacak islemleri yaptik.

Artik geriye veritabanimizi `startup nomount pfile=`init_berke.ora` ` komutuyla acip ilk adimda olusturdugumuz controlfile sql scriptini calistirmak kalir.

Sonrasinda veritabanini acabiliriz.



Hiç yorum yok:

Yorum Gönder