一個備份集同時恢出dataguard的主庫&備庫

feelme發表於2014-01-13

----------源庫rman備份----------------------
RMAN> backup as compressed backupset database format '/mnt/rmanm/wholem_%d_%U';
生成:wholem_MSCDB_02ovel9i_1_1/wholem_MSCDB_03ovelef_1_1/wholem_MSCDB_04ovetlg_1_1
RMAN> backup current controlfile format '/mnt/rmanm/ctl_%d_%U';
生成:ctl_MSCDB_05ovev9f_1_1
backup archivelog all format '/mnt/rmanm/arch_%d_%U';
生成:arch_MSCDB_07ovevel_1_
backup current controlfile format '/mnt/rmanm/ctl_%d_%U';
生成:ctl_MSCDB_08ovevfk_1_1 


BS Key  Size       Device Type Elapsed Time Completion Time
------- ---------- ----------- ------------ ---------------
6       1.48M      DISK        00:00:00     31-JAN-14      
        BP Key: 6   Status: AVAILABLE  Compressed: NO  Tag: TAG20140131T135949
        Piece Name: /mnt/rmanm/arch_MSCDB_07ovevel_1_1


  List of Archived Logs in backup set 6
  Thrd Seq     Low SCN    Low Time  Next SCN   Next Time
  ---- ------- ---------- --------- ---------- ---------
  1    31227   194125679  31-JAN-14 194126673  31-JAN-14
  1    31228   194126673  31-JAN-14 194127437  31-JAN-14
  1    31229   194127437  31-JAN-14 194127886  31-JAN-14
  1    31230   194127886  31-JAN-14 194128361  31-JAN-14
  1    31231   194128361  31-JAN-14 194128820  31-JAN-14
  1    31232   194128820  31-JAN-14 194129424  31-JAN-14
  1    31233   194129424  31-JAN-14 194129980  31-JAN-14
  1    31234   194129980  31-JAN-14 194130514  31-JAN-14
  1    31235   194130514  31-JAN-14 194131079  31-JAN-14
  1    31236   194131079  31-JAN-14 194131303  31-JAN-14
  1    31237   194131303  31-JAN-14 194131324  31-JAN-14


BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
7       Full    13.61M     DISK        00:00:02     31-JAN-14      
        BP Key: 7   Status: AVAILABLE  Compressed: NO  Tag: TAG20140131T140020
        Piece Name: /mnt/rmanm/ctl_MSCDB_08ovevfk_1_1
  Control File Included: Ckp SCN: 194131352    Ckp time: 31-JAN-14
  
-----------------主庫--------------------
1.恢控制檔案
sql>startup nomount;
RMAN>restore controlfile from '/mnt/rmanm/ctl_MSCDB_05ovev9f_1_1';
2.恢資料檔案
RMAN>sql 'alter database mount';


run{
set NEWNAME for datafile  1 to '+DATADG/MSCDB/data/1-system01.dbf';
set NEWNAME for datafile  2 to '+DATADG/MSCDB/data/2-sysaux01.dbf';
set NEWNAME for datafile  3 to '+DATADG/MSCDB/data/3-undotbs01.dbf';
。。。
set NEWNAME for datafile 54 to '+DATADG/MSCDB/data/54-CBMS_DATA0103.ora';
restore database; 
set NEWNAME for datafile  1 to '+DATADG/MSCDB/data/1-system01.dbf';
set NEWNAME for datafile  2 to '+DATADG/MSCDB/data/2-sysaux01.dbf';
set NEWNAME for datafile  3 to '+DATADG/MSCDB/data/3-undotbs01.dbf';
。。。
set NEWNAME for datafile 54 to '+DATADG/MSCDB/data/54-CBMS_DATA0103.ora';
switch datafile all;
recover database;
}
找不到歸檔31227#,


3.恢歸檔
sql>shutdown immediate;
cp control01.ctl control01.ctl.bak                               
cp control02.ctl control02.ctl.bak                               
cp control03.ctl control03.ctl.bak   
sql>startup nomount;
RMAN>restore controlfile from '/mnt/rmanm/ctl_MSCDB_08ovevfk_1_1 ';
RMAN>restore archivelog from sequence = 31227 until sequence = 31235;  ------------腦子暈了 明明是31237阿。為啥寫31235呢。悲劇
sql>shutdown immediate;
cp control01.ctl    control01.ctlnew
cp control01.ctlbak control01.ctl
cp control02.ctl    control02.ctlnew
cp control02.ctlbak control02.ctl
cp control03.ctl    control03.ctlnew
cp control03.ctlbak control03.ctl


4.recover啟庫
sql>recover database using backup controlfile until cancel;
auto
select name from v$tempfile;
select member from v$logfile;
alter database rename file '/oradata/MSCDB/temp01.dbf'     to '+DATADG/MSCDB/data/temp01.dbf';  
alter database rename file '/oradata/MSCDB/redo01.log' to '+DATADG/MSCDB/redo_a/redo01.log';
alter database rename file '/oradata/MSCDB/redo02.log' to '+DATADG/MSCDB/redo_a/redo02.log';
alter database rename file '/oradata/MSCDB/redo03.log' to '+DATADG/MSCDB/redo_a/redo03.log';
ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 ('+DATADG/MSCDB/redo_a/standby_redo4.log') SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 ('+DATADG/MSCDB/redo_a/standby_redo5.log') SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 ('+DATADG/MSCDB/redo_a/standby_redo6.log') SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 7 ('+DATADG/MSCDB/redo_a/standby_redo7.log') SIZE 200M;
alter database open resetlogs;  


------------------備庫-------------------
1,2和主庫一樣
1.恢控制檔案
sql>startup nomount;
RMAN>restore controlfile from '/mnt/rmanm/ctl_MSCDB_05ovev9f_1_1';


2.恢資料檔案
RMAN>sql 'alter database mount';
run{
set NEWNAME for datafile  1 to '+DATADG/MSCDB/data/1-system01.dbf';
set NEWNAME for datafile  2 to '+DATADG/MSCDB/data/2-sysaux01.dbf';
set NEWNAME for datafile  3 to '+DATADG/MSCDB/data/3-undotbs01.dbf';
。。。
set NEWNAME for datafile 54 to '+DATADG/MSCDB/data/54-CBMS_DATA0103.ora';
restore database; 
set NEWNAME for datafile  1 to '+DATADG/MSCDB/data/1-system01.dbf';
set NEWNAME for datafile  2 to '+DATADG/MSCDB/data/2-sysaux01.dbf';
set NEWNAME for datafile  3 to '+DATADG/MSCDB/data/3-undotbs01.dbf';
。。。
set NEWNAME for datafile 54 to '+DATADG/MSCDB/data/54-CBMS_DATA0103.ora';
switch datafile all;
recover database;
}
--------------------------分析-------------------------------------------------
備庫網路相當好,速度是主庫的20倍,導致 備庫的資料檔案比主庫更早恢復好。
主庫完工的時候,備庫後面的歸檔都自動傳了。非常詭異已經應用到31237了(這是為什麼呢?!)。兩邊不一致了,
備庫在分岔路口不知道要應用哪個歸檔了。
   31234    31235    31236
__________________________________31237備庫
             ·\__________________ 
               1   2  3   4        主庫
               


——————————————————————————備庫正確操作------------------------------------------
1.恢控制檔案
sql>startup nomount;
RMAN>restore standby controlfile from '/mnt/rmanm/ctl_MSCDB_05ovev9f_1_1';


2.恢資料檔案
RMAN>sql 'alter database mount';
run{
set NEWNAME for datafile  1 to '+DATADG/MSCDB/data/1-system01.dbf';
set NEWNAME for datafile  2 to '+DATADG/MSCDB/data/2-sysaux01.dbf';
set NEWNAME for datafile  3 to '+DATADG/MSCDB/data/3-undotbs01.dbf';
。。。
set NEWNAME for datafile 54 to '+DATADG/MSCDB/data/54-CBMS_DATA0103.ora';
restore database; 
set NEWNAME for datafile  1 to '+DATADG/MSCDB/data/1-system01.dbf';
set NEWNAME for datafile  2 to '+DATADG/MSCDB/data/2-sysaux01.dbf';
set NEWNAME for datafile  3 to '+DATADG/MSCDB/data/3-undotbs01.dbf';
。。。
set NEWNAME for datafile 54 to '+DATADG/MSCDB/data/54-CBMS_DATA0103.ora';
switch datafile all;
--recover database;  這句去掉,防止發生詭異問題
}
recover報錯找不到歸檔31227#


3.追resetlogs之前的歸檔
sql>shutdown immediate;
sql>startup nomount;
RMAN>restore controlfile from '/mnt/rmanm/ctl_MSCDB_08ovevfk_1_1 ';
RMAN>restore archivelog from sequence = 31227 until sequence = 31235; 
應用缺失的歸檔進行恢復:
sql>recover automatic standby database;
auto追至31235,尋找31236。。不能讓它找到哦,要和做了resetlog的主庫一樣再從1開始。那麼就用主庫的控制檔案。


4. 追resetlogs之後的歸檔
sql>shutdown immediate;
sql>startup nomount;
把主庫的控制檔案備份出來
RMAN>backup current controlfile;
在備庫上恢復
RMAN>restore standby controlfile from '/oracle/app/oracle/product/11.2.0/dbs/07otonhb_1_1';
再做sql>recover automatic standby database;  果然開始從1開始了,大功快告成了!
把主庫歸檔備份出來
RMAN>backup archivelog from sequence = 1 until sequence = 104;
在備庫上恢復
RMAN>catalog start with '/oracle/app/oracle/product/11.2.0/dbs'; 
RMAN>restore archivelog from sequence = 1 until sequence = 104; 
再做sql>recover automatic standby database;  刷的就追完了,和主庫一樣了。


5.開啟實時應用
sql>alter database recover managed standby database using current logfile disconnect from session;
在主庫切幾個歸檔alter system switch logfile;
select thread#,sequence#,applied from v$archived_log order by 2;
看到都及時應用了。done!
過程有點坎坷。但證明一個備份集可以恢出主備兩個庫來的,即使主庫做了resetlog。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7590112/viewspace-1070201/,如需轉載,請註明出處,否則將追究法律責任。

相關文章