solaris下透過rman工具將備份到帶庫上的db異機恢復
登入到1.71上執行如下操作,從帶庫中恢復控制檔案到dev02上,恢復的資料庫RMAN備份是0級全備,不含2級累積增量備份。
生產環境的主機名為db2,ORACLE_SID和db_name 都為 PROD ,dev02環境的主機名為zone04,ORACLE_SID和db_name都叫 DEV02
此次恢復實驗,採用的控制檔案備份是跟0級備份是同一時刻備份到帶庫上的
Last login: Thu Mar 14 17:06:04 2013 from 192.168.1.210
Oracle Corporation SunOS 5.10 Generic Patch January 2005
You have new mail.
Sourcing //.profile-EIS.....
root@test # bash
root@test # obtool
ob> cd --host db2 //切換到db2主機上
ob> ls
/
ob> cd /
ob> ls
db_data/ opt/
ob> cd db_data
ob> ls
PROD/ PROD.db.20130125.tar PROD.tar.20121223.db.yj
PROD.db.20130116.tar PROD.db.bak.20130104 PROD.tar.20121225.db
ob> cd PROD
ob> ls
db/ nohup.out oraInventory/ temp/
ob> cd db
ob> ls
apps_st/ tech_st/
ob> cd tech_st
ob> ls
11.2.0/ cfbak/
ob> cd cfbak //找到控制檔案備份目錄
ob> ls -l
-rw-r----- oraprod.dba 40.4 MB 2013/03/12.00:45 cntrl_936_1_809829905_20130312
-rw-r----- oraprod.dba 40.4 MB 2013/03/13.00:40 cntrl_945_1_809916020_20130313
-rw-r----- oraprod.dba 40.4 MB 2013/03/14.00:39 cntrl_954_1_810002383_20130314
-rw-r----- oraprod.dba 40.4 MB 2013/03/18.00:34 cntrl_1023_1_810381548_20130318
-rwxr-xr-x oraprod.dba 12.1 KB 2013/03/10.15:03 rman_bak.sh (16)
-rw-rw-rw- root.root 60.6 KB 2013/03/14.00:39 rman_bak.sh.out (16)
-rwxr-xr-x oraprod.dba 246 2013/02/18.19:19 run_bak.sh (16)
ob> pwd
/db_data/PROD/db/tech_st/cfbak on host db2 (browsing catalog data)
ob> cd /
ob> restore --tohost zone04 --go /db_data/PROD/db/tech_st/cfbak/cntrl_1023_1_810381548_20130318 --aspath /export/home/oradev/cfbak/cntrl_1023_1_810381548_20130318
Info: 1 catalog restore request item submitted; job id is admin/69.
這樣首先將db2的控制檔案從帶庫目錄 /db_data/PROD/db/tech_st/cfbak/cntrl_1023_1_810381548_20130318 恢復到 dev02主機的/export/home/oradev/cfbak目錄,名字保持一致
然後在dev02主機(也就是zone04主機)的/export/home/oradev/cfbak目錄下可以看到還原回來的控制檔案
緊接著從備份集中恢復控制檔案
bash-3.2$ export ORACLE_SID=PROD //(注意此時的ORACLE_SID仍然為PROD ,而且用生產環境的pfile啟動db到nomount狀態)
bash-3.2$ rman target /
Recovery Manager: Release 11.2.0.3.0 - Production on Thu Mar 14 18:28:05 2013
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
connected to target database (not started)
RMAN>
RMAN> startup nomount pfile='/export/zones/zone04/root/uat_data/DEV02/db/tech_st/11.2.0/dbs/initPROD.ora';
Oracle instance started
Total System Global Area 1069252608 bytes
Fixed Size 2166160 bytes
Variable Size 427823728 bytes
Database Buffers 624951296 bytes
Redo Buffers 14311424 bytes
RMAN> restore controlfile from '/export/home/oradev/cfbak/cntrl_1023_1_810381548_20130318';
Starting restore at 18-MAR-13
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=551 device type=DISK
channel ORA_DISK_1: copied control file copy
output file name=/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/cntrl01.dbf
output file name=/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/cntrl02.dbf
output file name=/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/cntrl03.dbf
Finished restore at 18-MAR-13
RMAN>
這時候在 /export/zones/zone04/root/uat_data/DEV02/db/apps_st/data目錄下可以看到三個控制檔案
然後將db啟動到mount狀態(原rman視窗中)
RMAN> alter database mount;
using target database control file instead of recovery catalog
database mounted
然後直接在dev02主機上/export/zones/zone04/root/uat_data目錄下建立指令碼 catlog.txt ,catlog.txt指令碼內容如下:
注意資料檔案編號一定要跟資料檔名對應,否則恢復會出錯
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
run{
ALLOCATE CHANNEL ch00 TYPE sbt parms 'ENV=(ob_media_family=erpdb-mf)';
set newname for datafile 1 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/system01.dbf';
set newname for datafile 2 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/system02.dbf';
set newname for datafile 3 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/system03.dbf';
set newname for datafile 4 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/system04.dbf';
set newname for datafile 5 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/system05.dbf';
set newname for datafile 6 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/system06.dbf';
set newname for datafile 7 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/system07.dbf';
set newname for datafile 8 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/system08.dbf';
set newname for datafile 9 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/system09.dbf';
set newname for datafile 10 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/system10.dbf';
set newname for datafile 11 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/system11.dbf';
set newname for datafile 12 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/undo01.dbf';
set newname for datafile 13 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/a_archive01.dbf';
set newname for datafile 14 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/a_int01.dbf';
set newname for datafile 15 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/a_media01.dbf';
set newname for datafile 16 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/a_nolog01.dbf';
set newname for datafile 17 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/a_queue01.dbf';
set newname for datafile 18 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/a_queue02.dbf';
set newname for datafile 19 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/a_ref01.dbf';
set newname for datafile 20 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/a_ref02.dbf';
set newname for datafile 21 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/a_summ01.dbf';
set newname for datafile 22 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/a_txn_data01.dbf';
set newname for datafile 23 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/a_txn_data02.dbf';
set newname for datafile 24 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/a_txn_data03.dbf';
set newname for datafile 25 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/a_txn_ind01.dbf';
set newname for datafile 26 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/a_txn_ind02.dbf';
set newname for datafile 27 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/a_txn_ind03.dbf';
set newname for datafile 28 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/a_txn_ind04.dbf';
set newname for datafile 29 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/a_txn_ind05.dbf';
set newname for datafile 30 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/ctxd01.dbf';
set newname for datafile 31 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/odm.dbf';
set newname for datafile 32 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/olap.dbf';
set newname for datafile 33 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/owad01.dbf';
set newname for datafile 34 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/portal01.dbf';
set newname for datafile 35 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/sysaux01.dbf';
set newname for datafile 36 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/apps_ts_tools01.dbf';
set newname for datafile 37 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/interim.dbf';
set newname for datafile 38 to '/export/zones/zone04/root/uat_data/DEV02/db/apps_st/data/a_txn_data4.dbf';
restore database;
switch datafile all;
RELEASE CHANNEL ch00;
}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
再在 /export/zones/zone04/root/uat_data 目錄下建立 zx.sh 指令碼,指令碼內容如下:
-bash-3.2$ more zx.sh
rman target / cmdfile='/export/zones/zone04/root/uat_data/catlog.txt' log='/export/zones/zone04/root/uat_data/cat.log'
然後在vnc視窗中,export ORACLE_SID=PROD , 然後直接執行 sh zx.sh , 這個時候資料庫就進行恢復。
接下來是 recover 資料庫
注意:一定要指定備份到帶庫上的歸檔日誌通道 ALLOCATE CHANNEL , 否則報錯
RMAN> run{
ALLOCATE CHANNEL ch00 TYPE sbt parms 'ENV=(ob_media_family=erpdb-mf)';
recover database;
RELEASE CHANNEL ch00;
}
allocated channel: ch00
channel ch00: SID=551 device type=SBT_TAPE
channel ch00: Oracle Secure Backup
Starting recover at 18-MAR-13
starting media recovery
channel ch00: starting archived log restore to default destination
channel ch00: restoring archived log
archived log thread=1 sequence=938
channel ch00: restoring archived log
archived log thread=1 sequence=939
channel ch00: reading from backup piece al_1021_1_810381476
channel ch00: piece handle=al_1021_1_810381476 tag=TAG20130318T095756
channel ch00: restored backup piece 1
channel ch00: restore complete, elapsed time: 00:02:35
archived log file name=/export/zones/zone04/root/uat_data/DEV02/db/tech_st/11.2.0/dbs/arch1_938_800615529.dbf thread=1 sequence=938
archived log file name=/export/zones/zone04/root/uat_data/DEV02/db/tech_st/11.2.0/dbs/arch1_939_800615529.dbf thread=1 sequence=939
unable to find archived log
archived log thread=1 sequence=940
released channel: ch00
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 03/18/2013 12:16:15
RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 940 and starting SCN of 226495995
RMAN>
上述提示的兩個歸檔日誌此時會在下述的路徑下出現:
-bash-3.2$ cd $ORACLE_HOME/dbs
-bash-3.2$ ls
arch1_938_800615529.dbf initDEV02_noaq.ora lkDEV02
arch1_939_800615529.dbf initDEV02.ora.bak20120312 lkPROD
DEV02_zone04_ifile.ora init.ora orapwPROD
hc_DEV02.dat initPROD.ora
hc_PROD.dat initPROD.ora.bak.ok
-bash-3.2$
出現上述錯誤以後,可以直接在rman中執行
RMAN> run{
ALLOCATE CHANNEL ch00 TYPE sbt parms 'ENV=(ob_media_family=erpdb-mf)';
recover database until scn 226495995;
RELEASE CHANNEL ch00;
}
若接下來不重建控制檔案,而直接以resetlogs方式開啟資料庫會提示報錯,主要是因為日誌檔案路徑還是PROD的路徑。
RMAN> alter database open resetlogs;
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of alter db command at 03/18/2013 18:21:50
ORA-00349: failure obtaining block size for '/db_data/PROD/db/apps_st/data/log01b.dbf'
ORA-27041: unable to open file
SVR4 Error: 2: No such file or directory
Additional information: 9
而在這裡,我們採取的方法是在open resetlogs報錯的情況下,重建控制檔案
找到控制檔案建立的語法,重新建立控制檔案
bash-3.2$ export ORACLE_SID=PROD (注意這裡還是用之前sid為PROD的引數檔案啟動db)
bash-3.2$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Mon Mar 18 14:48:37 2013
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup nomount pfile='/export/zones/zone04/root/uat_data/DEV02/db/tech_st/11.2.0/dbs/initPROD.ora';
ORACLE instance started.
Total System Global Area 1069252608 bytes
Fixed Size 2166160 bytes
Variable Size 427823728 bytes
Database Buffers 624951296 bytes
Redo Buffers 14311424 bytes
SQL>
SQL> alter database mount;
Database altered.
SQL> alter database backup controlfile to trace as '/tmp/control.sql';
Database altered.
找到restlogs方式的語法
-- Set #2. RESETLOGS case
將db的名字改為 DEV02,同時更改資料檔案、日誌檔案的路徑
然後關閉資料庫,備份之前的控制檔案,然後將三個控制檔案刪除
SQL> shutdown immediate ;
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
SQL> exit
bash-3.2$ cp cntrl01.dbf cntrl01.dbf.bak20130318
bash-3.2
bash-3.2$ cd $ORACLE_HOME/dbs
bash-3.2$ cp initPROD.ora initDEV02.ora
注意這裡改用新的ORACLE_SID了,而且startup nomount啟動的時候,使用的是 initDEV02.ora (db_name 為 DEV02) 檔案,而不是
initPROD.ora ( db_name 為 PROD)檔案,他們的唯一區別是引數檔案裡的 db_name不一樣,其他都一樣
root@zone04 # su - oradev
Oracle Corporation SunOS 5.10 Generic Patch January 2005
-bash-3.2$
-bash-3.2$ env|grep ORACLE_SID
ORACLE_SID=DEV02
-bash-3.2$
-bash-3.2$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Mon Mar 18 15:00:41 2013
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup nomount pfile='/export/zones/zone04/root/uat_data/DEV02/db/tech_st/11.2.0/dbs/initDEV02.ora';
ORACLE instance started.
Total System Global Area 1069252608 bytes
Fixed Size 2166160 bytes
Variable Size 427823728 bytes
Database Buffers 624951296 bytes
Redo Buffers 14311424 bytes
SQL>
然後將控制檔案的語法貼上到sql中,也可以放到一個文字檔案ctr.sql 中,執行這個sql檔案,如果控制檔案建立成功會顯示 Control file created.
最終以resetlogs方式開啟db
SQL> alter database open resetlogs;
Database altered.
最後新增臨時表空間
SQL> select file_name from dba_data_files where tablespace_name='TEMP2';
no rows selected
SQL> ALTER TABLESPACE TEMP1 ADD TEMPFILE '/uat_data/DEV02/db/apps_st/data/temp01.dbf' SIZE 800M AUTOEXTEND on next 50 maxsize 8000M;
Tablespace altered.
SQL> ALTER TABLESPACE TEMP2 ADD TEMPFILE '/uat_data/DEV02/db/apps_st/data/temp02.dbf' SIZE 800M AUTOEXTEND on next 50 maxsize 8000M;
Tablespace altered.
以上是完整的異機恢復步驟
另外一種方法是:在我們執行 alter database open resetlogs 報錯的時候,可以不重建控制檔案,直接用nid修改db,但是個人理解從本質上還是修改控制檔案
RMAN> alter database open resetlogs;
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of alter db command at 03/18/2013 18:21:50
ORA-00349: failure obtaining block size for '/db_data/PROD/db/apps_st/data/log01b.dbf'
ORA-27041: unable to open file
SVR4 Error: 2: No such file or directory
Additional information: 9
這個時候可以用 如下命令強制清除當前日誌組4
SQL> alter database clear logfile group 4; //清除當前日誌組
然後再進行 alter database open resetlogs
再按照步驟執行 nid ,步驟參考 http://blog.csdn.net/tianlesoftware/article/details/6240983
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28373936/viewspace-1722266/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- RMAN備份異機恢復
- 透過搭建恢復目錄實現RMAN異地備份和恢復
- rman備份異機恢復(原創)
- RMAN備份恢復典型案例——異機恢復未知DBID
- 透過RMAN備份standby database成功恢復還原Database
- ORACLE DG從庫 Rman備份恢復Oracle
- 在DG備庫備份資料庫並恢復到一個主機上,報錯RMAN-06820資料庫
- rman 增量備份恢復
- RMAN備份恢復技巧
- DB的備份與恢復
- 【RMAN】在多租戶環境下的RMAN備份及恢復
- RMAN備份恢復典型案例——RMAN備份&系統變慢
- G017-ORACLE-MIGRATION-01 RMAN備份異機不完全恢復Oracle
- RMAN備份恢復效能優化優化
- RMAN備份與恢復測試
- RMAN備份恢復典型案例——資料庫卡頓資料庫
- DB2備份與恢復DB2
- Oracle 備份恢復篇之RMAN catalogOracle
- 通過rman為客戶實現linux下oracle11.2.0.4到windows下oracle同版本資料庫的異機恢復。LinuxOracleWindows資料庫
- Windows oracle 11g rman備份恢復到linux系統WindowsOracleLinux
- db2備份恢復(backup restore)DB2REST
- 12 使用RMAN備份和恢復檔案
- RMAN備份恢復典型案例——ORA-00245
- 異機使用完全備份恢復指定的PDB
- 備份與恢復:polardb資料庫備份與恢復資料庫
- db2 命令列備份和恢復DB2命令列
- 備份恢復Lesson 04.Using the RMAN Recovery Catalog
- Linux下MySQL資料庫的備份與恢復LinuxMySql資料庫
- 【RMAN】Oracle12c以後rman 備份恢復命令參考Oracle
- 資料庫備份恢復資料庫
- dg丟失歸檔,使用rman增量備份恢復
- Oracle9i RMAN 的優缺點及RMAN 備份及恢復步驟Oracle
- RMAN備份恢復典型案例——跨平臺遷移pdb
- OceanBase-OB備份異地恢復流程
- RAC備份恢復之Voting備份與恢復
- 從dataguard備份的恢復機制
- PostgreSql資料庫的備份和恢復SQL資料庫
- ORACLE 11.2.0.4 RAC RMAN異機恢復之ORA-15001Oracle
- RMAN備份恢復典型案例——快速檢查資料庫一致性資料庫