Belli dönemlerde prod database’ lerinden alınan backupları farklı sunucular üzerine dönme testleri yapma zorunluluğumuz var. Bu testlerden birinde yaptığım işleme ait detayları aşağıda anlatmaya çalıştım.
Rman ile bir database’ i farklı bir sunucu üzerine taşımak başlıklı yazımda rman backup diske alındığında nasıl restore edileceğinden bahsetmiştik. Orada catalog database’ ini aslında kullanmamıştık çünkü alınan rman backupı, restore yapılacak sunucu üzerinde rman’ in istemiş olduğu path’lere kopyalamıştık dolayısıyla orada işimiz daha kolaydı.
Burada ise catalog database’ ini kullanarak (rutin işleyişe birebir örnek oluşturması açısından) kartuşa alınan bir backupı hiçbir kopyalama işlemi yapmadan nasıl başka bir ortama taşıyacağımızdan bahsetmek istiyorum. Yine burda da bir takım öngörülerimiz var. Öncelikle, pathlerimiz burda da farklı olarak kabul ediyoruz. (eğer pathler restore yapılacak sunucu ile birebir aynı ise, aşağıdaki scriplerdeki )Sonrasında yapacağımız işlemlerle ilgili olarak adım adım anlatamaya çalışayım ;
- Backupı dönülecek olan sunucu üzerinden rman catalog database’ i ile database’ in backupı kartuşa alınır.
run {
allocate channel ‘dev_0’ type ‘sbt_tape’
parms ‘ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=prdtest,OB2BARLIST=Betasetcms2_PRDTEST)’;
allocate channel ‘dev_1’ type ‘sbt_tape’
parms ‘ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=prdtest,OB2BARLIST=Betasetcms2_PRDTEST)’;
allocate channel ‘dev_2’ type ‘sbt_tape’
parms ‘ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=prdtest,OB2BARLIST=Betasetcms2_PRDTEST)’;
allocate channel ‘dev_3’ type ‘sbt_tape’
parms ‘ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=prdtest,OB2BARLIST=Betasetcms2_PRDTEST)’;
backup incremental level
format ‘Betasetcms2_PRDTEST<%t:%p>.dbf’
restore database;
sql ‘alter system archive log current’;
backup
filesperset 1
format ‘Betasetcms2_PRDTEST<%t:%p>.dbf’
archivelog like ‘/data2/arch/%’;
}
Datafile’ leri farklı pathlere restore edeceğimiz için aşağıdaki bilgileri mutlaka biliyor olmamız gerekiyor. Sonrasında file# numarasına göre yeni path’ lere set edeceğiz.
Database’ deki datafile’ lerin listesinide alıyoruz.
SQL> select name from v$datafile;
FILE# NAME
1 /data2/prdtest/system01.dbf
2 /data2/prdtest/undotbs01.dbf
3 /data2/prdtest/sysaux01.dbf
4 /data2/prdtest/users01.dbf
5 /data2/prdtest/example01.dbf
6 /data2/prdtest/kamil_deneme1_01.dbf
7 /data2/prdtest/kamil_deneme1_02.dbf
8 /data2/prdtest/kamil_deneme2_01.dbf
9 /data2/prdtest/kamil_deneme2_02.dbf
Redologlar hakkında aşağıdaki bilgileri alıyoruz.
Select * from v$logfile;
GROUP# STATUS TYPE MEMBER
3 ONLINE /data2/prdtest/redo03.log NO
2 ONLINE /data2/prdtest/redo02.log NO
1 ONLINE /data2/prdtest/redo01.log NO
Ayrıca bu database’ e ait dbid bilgisinide öncesinde bilmemiz gerekiyor. Kullanmakta olduğunuz tüm database’ lerin dbid’ lerini saklamanızda fayda var. Bu değer sonradan değişmeyen ve her database için unique olan bir değerdir.
SQL> select dbid from v$database ;
DBID
———-
165917862
Bundan sonraki adımda aslında şunu düşünüyoruz, bu database herhangi bir problemden dolayı down oldu ve temin edilen farklı bir sunucuya data kaybı olmadan restore etmeniz gerekiyor. Şimdi almış olduğumuz backupı başka bir sunucu üzerine restore etmeye çalışalım.
- Restore yapılacak server üzerine sadece oracle software kurulumu yapıyoruz.
- Pfile, initfile, pwd, tns, sqlnet ora gibi (parametre) dosyaları yeni sunucumuz üzerine üzerine kopyalıyoruz. (veya elimizde backupları yoksa yenilerini create ediyoruz. Zaman zaman prod ortamlarından bu tarz kritik file’ lerin backupının alınması ciddi zaman kazançları sağlıyor)
Parametre dosyaları restore yapılacak olan servera kopyalandıkdan sonra içerisinde gerekli değişiklikleri yapmamız gerekiyor. Örneğin memory parametreleri yeni sunucuya göre set edilir veya backup alınan sunucu ile restore yapılacak olan sunucunun path’ leri farklı olabileceğinden buradaki controlfile parametresinin restore yapılacak olan sunucuda nerde olması gerekiyor ise ilgili path bilgisi buraya girilir.
Örneğin bizim örneğimizde backup alınan sunucudaki control file parametresi ;
*.control_files=’/data2/prdtest/control01.ctl’,’/data2/prdtest/control02.ctl’,’/data2/prdtest/control03.ctl’
Restore yapılacak sunucudaki olması gereken path ise (burada böyle bir path olmadığından dolayı) ;
*.control_files=’/data/oracle/oradata/prdtest/control01.ctl’,’/data/oracle/oradata/prdtest/control02.ctl’,’/data/oracle/oradata/prdtest/control03.ctl’
- Sonra yeni sunucumuzdaki database sys olarak bağlanıp nomount modda database’ i start ediyoruz.
oracle@betasetapp2:/data/oracle/product/10.1.0/db:>sqlplus “/as sysdba”
SQL*Plus: Release 10.1.0.5.0 – Production on Mon Nov 29 09:22:50 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.1.0.5.0 – 64bit Production
With the Partitioning, OLAP and Data Mining options
SQL> startup nomount
ORACLE instance started.
Total System Global Area 419430400 bytes
Fixed Size 1330696 bytes
Variable Size 122401272 bytes
Database Buffers 293601280 bytes
Redo Buffers 2097152 bytes
- Database’ i nomount moda aldıkdan sonra yine bu sunucu üzerinden önce rman’e sonra catalog database’ ine bağlanıyoruz.
oracle@betasetapp2:/data/oracle:>rman target /
Recovery Manager: Release 10.1.0.5.0 – 64bit Production
Copyright (c) 1995, 2004, Oracle. All rights reserved.
connected to target database: prdtest (not mounted)
RMAN> connect catalog RMAN_PRDTEST/r10011002@RMAN
connected to recovery catalog database
RMAN>
Catalog database’ ine bağlanmak için kullandığımız user bizim backup aldığımız veritabanını catalog database’ ine register ederken kullanmış olduğumuz user’ ı ifade ediyor. @RMAN ise rman catalog database’ inin tns kaydıdır.
- Rman ile restore işlemine artık başlıyabiliriz, öncelikle işlem yapacağımız database’ in dbid bilgisini set ediyoruz.
RMAN> set dbid=165917862
executing command: SET DBID
database name is “PRDTEST” and DBID is 165917862
- İlk olarak controlfile’ i dönmemiz gerekiyor.
RMAN> run {
2> allocate channel ‘dev_0’ type ‘sbt_tape’;
3> allocate channel ‘dev_1’ type ‘sbt_tape’;
4> allocate channel ‘dev_2’ type ‘sbt_tape’;
5> allocate channel ‘dev_3’ type ‘sbt_tape’;
6> restore controlfile;
7> }
released channel: ORA_DISK_1
allocated channel: dev_0
channel dev_0: sid=159 devtype=SBT_TAPE
channel dev_0: Data Protector A.06.00/PHSS_37147/PHSS_37148/DPSOL_00306/DPLNX_
allocated channel: dev_1
channel dev_1: sid=157 devtype=SBT_TAPE
channel dev_1: Data Protector A.06.00/PHSS_37147/PHSS_37148/DPSOL_00306/DPLNX_
allocated channel: dev_2
channel dev_2: sid=160 devtype=SBT_TAPE
channel dev_2: Data Protector A.06.00/PHSS_37147/PHSS_37148/DPSOL_00306/DPLNX_
allocated channel: dev_3
channel dev_3: sid=161 devtype=SBT_TAPE
channel dev_3: Data Protector A.06.00/PHSS_37147/PHSS_37148/DPSOL_00306/DPLNX_
Starting restore at 30-NOV-10
channel dev_0: starting datafile backupset restore
channel dev_0: restoring controlfile
[Normal] From: OB2BAR_Oracle8@betasetapp2 “PRDTEST” Time: 11/30/10 10:47:22
Starting OB2BAR Restore: betasetcms2:c-165917862-20101125-02 “Oracle8”
[Normal] From: OB2BAR_Oracle8@betasetapp2 “PRDTEST” Time: 11/30/10 10:47:24
Completed OB2BAR Restore: betasetcms2:c-165917862-20101125-02 “Oracle8”
channel dev_0: restored backup piece 1
piece handle=c-165917862-20101125-02 tag=TAG20101125T141314
channel dev_0: restore complete
output filename=/data/oracle/oradata/prdtest/control01.ctl
output filename=/data/oracle/oradata/prdtest/control02.ctl
output filename=/data/oracle/oradata/prdtest/control03.ctl
Finished restore at 30-NOV-10
released channel: dev_0
released channel: dev_1
released channel: dev_2
released channel: dev_3
RMAN>
Ben testimde, channel allocate ederken, rman’ in backup alırken allocate ettiği kadar channel’ lar allocate ettim, istenirse daha az veya daha fazla channel allocate edilebilir.
Örneğin;
RMAN> run {
2> allocate channel ‘dev_0’ type ‘sbt_tape’;
3> allocate channel ‘dev_1’ type ‘sbt_tape’;
4> allocate channel ‘dev_2’ type ‘sbt_tape’;
5> allocate channel ‘dev_3’ type ‘sbt_tape’;
6> allocate channel ‘dev_4’ type ‘sbt_tape’;
7> allocate channel ‘dev_5’ type ‘sbt_tape’;
8> allocate channel ‘dev_6’ type ‘sbt_tape’;
9> restore controlfile;
10> }
allocated channel: dev_0
channel dev_0: sid=159 devtype=SBT_TAPE
channel dev_0: Data Protector A.06.00/PHSS_37147/PHSS_37148/DPSOL_00306/DPLNX_
allocated channel: dev_1
channel dev_1: sid=157 devtype=SBT_TAPE
channel dev_1: Data Protector A.06.00/PHSS_37147/PHSS_37148/DPSOL_00306/DPLNX_
allocated channel: dev_2
channel dev_2: sid=160 devtype=SBT_TAPE
channel dev_2: Data Protector A.06.00/PHSS_37147/PHSS_37148/DPSOL_00306/DPLNX_
allocated channel: dev_3
channel dev_3: sid=161 devtype=SBT_TAPE
channel dev_3: Data Protector A.06.00/PHSS_37147/PHSS_37148/DPSOL_00306/DPLNX_
allocated channel: dev_4
channel dev_4: sid=156 devtype=SBT_TAPE
channel dev_4: Data Protector A.06.00/PHSS_37147/PHSS_37148/DPSOL_00306/DPLNX_
allocated channel: dev_5
channel dev_5: sid=155 devtype=SBT_TAPE
channel dev_5: Data Protector A.06.00/PHSS_37147/PHSS_37148/DPSOL_00306/DPLNX_
allocated channel: dev_6
channel dev_6: sid=154 devtype=SBT_TAPE
channel dev_6: Data Protector A.06.00/PHSS_37147/PHSS_37148/DPSOL_00306/DPLNX_
Starting restore at 30-NOV-10
…………………….
RMAN> run {
2> allocate channel ‘dev_0’ type ‘sbt_tape’;
3> restore controlfile;
4> }
allocated channel: dev_0
channel dev_0: sid=159 devtype=SBT_TAPE
channel dev_0: Data Protector A.06.00/PHSS_37147/PHSS_37148/DPSOL_00306/DPLNX_
Starting restore at 30-NOV-10
…………………….
- Controlfile’ lerimizi döndükden sonra database’ imizi artık mound moda çekebiliriz.
SQL> alter database mount;
database mounted.
Rman Catalog Database’ i Kullanarak, Kartuşa Alınan Backupı Farklı bir Sunucuya Dönme -2 ile devam ediyoruz.