Oracle恢復例項之一:資料檔案、控制檔案、聯機日誌丟失
假設儲存資料庫檔案的硬碟出現了故障,導致當前資料庫所有的控制檔案、資料檔案、聯機日誌檔案都丟失或損壞了,而只剩下備份集和該備份集之後的所有歸檔日誌檔案,在這種情況下,由於聯機日誌檔案已經丟失,只能使用不完全恢復,恢復的情況由歸檔日誌檔案的完整度決定。現在我們開始來模擬這個實驗:
1)首先,備份資料庫,待會兒就利用這個備份集來做恢復。
注意這次備份產生2個檔案,第一個包含所有的資料檔案,第二個包含控制檔案和引數檔案。
2)準備測試資料,我們向測試表中插入兩條資料,第一條的redo已經被歸檔,而第二條的redo還在聯機日誌中。
建立測試表:
SQL> create table test (id number);
插入第一條資料:
SQL> insert into test values(1);
SQL> commit;
切換日誌使得包含第一天的redo被歸檔:
SQL>alter system switch logfile;
插入第二條資料,該條資料所對應的redo未被歸檔:
SQL> insert into test values(2);
SQL> commit;
3)模擬災難:刪除所有的資料檔案、控制檔案、聯機日誌檔案,且資料庫
異常關閉資料庫:
SQL> shutdown abort;
刪除所有的資料檔案,聯機日誌和控制檔案。
4)從備份集中恢復控制檔案:
首先啟動資料庫至nomount狀態(可以啟動到nomount狀態時因為引數檔案還在):
RMAN> startup nomount
接著從備份集中恢復控制檔案:
5)所有的控制檔案都已經恢復成功,現在開始恢復資料檔案:
資料檔案恢復成功。
6)註冊備份集之後產生的歸檔日誌。
由於控制檔案時從備份集中恢復過來的,因此控制檔案中記錄的歸檔日誌是不完整的:
SQL> select name from v$archived_log;
NAME
------------------------------------------------------------------------------
H:\INTEL_ARCH\O04DMS0\O04DMS0_1_1043_686537442.ARCH
H:\INTEL_ARCH\O04DMS0\O04DMS0_1_1044_686537442.ARCH
H:\INTEL_ARCH\O04DMS0\O04DMS0_1_1045_686537442.ARCH
H:\INTEL_ARCH\O04DMS0\O04DMS0_1_1046_686537442.ARCH
從上面輸出可以看出控制檔案記錄的最新的歸檔日誌為1046,而在硬碟上還有一個O04DMS0_1_1047_686537442.ARCH,這個歸檔日誌是在備份之後產生的,因此未被記錄在控制檔案中,下面我們用rman提供的catalog命令註冊歸檔日誌到控制檔案中:
RMAN> catalog archivelog 'H:\INTEL_ARCH\O04DMS0\O04DMS0_1_1047_686537442.ARCH';
cataloged archive log
archive log filename=H:\INTEL_ARCH\O04DMS0\O04DMS0_1_1047_686537442.ARCH recid=1006 stamp=767678151
7)執行不完全恢復
當所有的歸檔日誌都已經註冊到控制檔案中後,就可以開始執行不完全恢復:
選擇AUTO之後,Oracle會自動應用所有的歸檔日誌,知道無法找到為止,出現的ORA-錯誤都是可以忽略的。
最後以resetlogs方式開啟資料庫:
SQL> alter database open resetlogs;
SQL> select * from test;
ID
----------
1
查詢測試表,發現只有第一條記錄,第二天丟失,這和我們之前預測的一樣。
1)首先,備份資料庫,待會兒就利用這個備份集來做恢復。
RMAN> backup database format'H:\INTEL_DB_DUMPS\O04DMS0\rman\O04DMS0_%U'; Starting backup at 20-NOV-11 using channel ORA_DISK_1 channel ORA_DISK_1: starting full datafile backupset channel ORA_DISK_1: specifying datafile(s) in backupset input datafile fno=00001 name=I:\INTEL_DATA\O04DMS0\SYSTEM01.O04DMS0 input datafile fno=00002 name=I:\INTEL_DATA\O04DMS0\UNDOTBS01.O04DMS0 input datafile fno=00006 name=I:\INTEL_DATA\O04DMS0\SYSAUX01.O04DMS0 input datafile fno=00003 name=I:\INTEL_DATA\O04DMS0\USERS01.O04DMS0 input datafile fno=00004 name=I:\INTEL_DATA\O04DMS0\SECURITY_D.O04DMS0 input datafile fno=00005 name=K:\INTEL_INDEX\O04DMS0\SECURITY_I.O04DMS0 channel ORA_DISK_1: starting piece 1 at 20-NOV-11 channel ORA_DISK_1: finished piece 1 at 20-NOV-11 piece handle=H:\INTEL_DB_DUMPS\O04DMS0\RMAN\O04DMS0_05MS3KIH_1_1 tag=TAG20111120T033648 comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:37 Finished backup at 20-NOV-11 Starting Control File and SPFILE Autobackup at 20-NOV-11 piece handle=H:\INTEL_DB_DUMPS\O04DMS0\RMAN_F\C-3120696418-20111120-00 comment=NONE Finished Control File and SPFILE Autobackup at 20-NOV-11 |
注意這次備份產生2個檔案,第一個包含所有的資料檔案,第二個包含控制檔案和引數檔案。
2)準備測試資料,我們向測試表中插入兩條資料,第一條的redo已經被歸檔,而第二條的redo還在聯機日誌中。
建立測試表:
SQL> create table test (id number);
插入第一條資料:
SQL> insert into test values(1);
SQL> commit;
切換日誌使得包含第一天的redo被歸檔:
SQL>alter system switch logfile;
插入第二條資料,該條資料所對應的redo未被歸檔:
SQL> insert into test values(2);
SQL> commit;
3)模擬災難:刪除所有的資料檔案、控制檔案、聯機日誌檔案,且資料庫
異常關閉資料庫:
SQL> shutdown abort;
刪除所有的資料檔案,聯機日誌和控制檔案。
4)從備份集中恢復控制檔案:
首先啟動資料庫至nomount狀態(可以啟動到nomount狀態時因為引數檔案還在):
RMAN> startup nomount
接著從備份集中恢復控制檔案:
RMAN> restore controlfile from 'H:\INTEL_DB_DUMPS\O04DMS0\RMAN_F\C-3120696418-20111120-00'; Starting restore at 20-NOV-11 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: sid=157 devtype=DISK channel ORA_DISK_1: restoring control file channel ORA_DISK_1: restore complete, elapsed time: 00:00:17 output filename=I:\INTEL_DATA\O04DMS0\CONTROL01.O04DMS0 output filename=J:\INTEL_LOG\O04DMS0\CONTROL02.O04DMS0 output filename=K:\INTEL_INDEX\O04DMS0\CONTROL03.O04DMS0 Finished restore at 20-NOV-11 |
5)所有的控制檔案都已經恢復成功,現在開始恢復資料檔案:
RMAN> sql 'alter database mount'; RMAN> restore database; Starting restore at 20-NOV-11 using channel ORA_DISK_1 channel ORA_DISK_1: starting datafile backupset restore channel ORA_DISK_1: specifying datafile(s) to restore from backup set restoring datafile 00001 to I:\INTEL_DATA\O04DMS0\SYSTEM01.O04DMS0 restoring datafile 00002 to I:\INTEL_DATA\O04DMS0\UNDOTBS01.O04DMS0 restoring datafile 00003 to I:\INTEL_DATA\O04DMS0\USERS01.O04DMS0 restoring datafile 00004 to I:\INTEL_DATA\O04DMS0\SECURITY_D.O04DMS0 restoring datafile 00005 to K:\INTEL_INDEX\O04DMS0\SECURITY_I.O04DMS0 restoring datafile 00006 to I:\INTEL_DATA\O04DMS0\SYSAUX01.O04DMS0 channel ORA_DISK_1: reading from backup piece H:\INTEL_DB_DUMPS\O04DMS0\RMAN\O04DMS0_05MS3KIH_1_1 channel ORA_DISK_1: restored backup piece 1 piece handle=H:\INTEL_DB_DUMPS\O04DMS0\RMAN\O04DMS0_05MS3KIH_1_1 tag=TAG20111120T033648 channel ORA_DISK_1: restore complete, elapsed time: 00:00:56 Finished restore at 20-NOV-11 |
資料檔案恢復成功。
6)註冊備份集之後產生的歸檔日誌。
由於控制檔案時從備份集中恢復過來的,因此控制檔案中記錄的歸檔日誌是不完整的:
SQL> select name from v$archived_log;
NAME
------------------------------------------------------------------------------
H:\INTEL_ARCH\O04DMS0\O04DMS0_1_1043_686537442.ARCH
H:\INTEL_ARCH\O04DMS0\O04DMS0_1_1044_686537442.ARCH
H:\INTEL_ARCH\O04DMS0\O04DMS0_1_1045_686537442.ARCH
H:\INTEL_ARCH\O04DMS0\O04DMS0_1_1046_686537442.ARCH
從上面輸出可以看出控制檔案記錄的最新的歸檔日誌為1046,而在硬碟上還有一個O04DMS0_1_1047_686537442.ARCH,這個歸檔日誌是在備份之後產生的,因此未被記錄在控制檔案中,下面我們用rman提供的catalog命令註冊歸檔日誌到控制檔案中:
RMAN> catalog archivelog 'H:\INTEL_ARCH\O04DMS0\O04DMS0_1_1047_686537442.ARCH';
cataloged archive log
archive log filename=H:\INTEL_ARCH\O04DMS0\O04DMS0_1_1047_686537442.ARCH recid=1006 stamp=767678151
7)執行不完全恢復
當所有的歸檔日誌都已經註冊到控制檔案中後,就可以開始執行不完全恢復:
SQL> recover database using backup controlfile until cancel; ORA-00279: change 30650218 generated at 11/20/2011 03:36:51 needed for thread 1 ORA-00289: suggestion : H:\INTEL_ARCH\O04DMS0\O04DMS0_1_1047_686537442.ARCH ORA-00280: change 30650218 for thread 1 is in sequence #1047 Specify log: { AUTO ORA-00279: change 30650338 generated at 11/20/2011 03:39:26 needed for thread 1 ORA-00289: suggestion : H:\INTEL_ARCH\O04DMS0\O04DMS0_1_1048_686537442.ARCH ORA-00280: change 30650338 for thread 1 is in sequence #1048 ORA-00278: log file 'H:\INTEL_ARCH\O04DMS0\O04DMS0_1_1047_686537442.ARCH' no longer needed for this recovery ORA-00308: cannot open archived log 'H:\INTEL_ARCH\O04DMS0\O04DMS0_1_1048_686537442.ARCH' ORA-27041: unable to open file OSD-04002: unable to open file O/S-Error: (OS 2) The system cannot find the file specified. |
選擇AUTO之後,Oracle會自動應用所有的歸檔日誌,知道無法找到為止,出現的ORA-錯誤都是可以忽略的。
最後以resetlogs方式開啟資料庫:
SQL> alter database open resetlogs;
SQL> select * from test;
ID
----------
1
查詢測試表,發現只有第一條記錄,第二天丟失,這和我們之前預測的一樣。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26277071/viewspace-711640/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle恢復例項之二:Inactive聯機日誌檔案丟失Oracle
- Oracle恢復例項之三:active或current聯機日誌檔案丟失Oracle
- rman恢復:資料檔案丟失,控制檔案丟失,聯機日誌檔案丟失(非當前使用與當前使用)
- 丟失聯機重做日誌檔案的恢復
- RMAN恢復案例:無恢復目錄,丟失全部資料檔案、控制檔案、日誌檔案恢復
- 恢復案例:無歸檔,丟失全部控制檔案、日誌檔案恢復案例
- oracle丟失日誌檔案的恢復( 轉)Oracle
- 【恢復】Redo日誌檔案丟失的恢復
- 丟失已歸檔日誌檔案下恢復資料庫資料庫
- 控制檔案丟失恢復例項(3) - 使用重建控制檔案方式(noresetlogs)
- 控制檔案丟失恢復
- 【控制檔案丟失恢復】
- 非歸檔丟失日誌檔案的恢復
- 解決Oracle資料庫日誌檔案丟失恢復問題Oracle資料庫
- Oracle聯機日誌檔案丟失解決方法一例Oracle
- 引數檔案控制檔案和資料檔案丟失的恢復
- 控制檔案丟失恢復(二)
- 恢復丟失的控制檔案
- 控制檔案全部丟失恢復
- 【備份恢復】恢復 丟失已歸檔重做日誌檔案
- Oracle資料庫聯機日誌檔案丟失處理方法(1)Oracle資料庫
- Oracle資料庫聯機日誌檔案丟失處理方法(3)Oracle資料庫
- Oracle資料庫聯機日誌檔案丟失處理方法(2)Oracle資料庫
- Oracle資料庫聯機日誌檔案丟失處理方法(4)Oracle資料庫
- Oracle資料庫聯機日誌檔案丟失處理方法(5)Oracle資料庫
- 沒備份,歸檔日誌存在,丟失資料檔案的恢復
- 在歸檔模式下丟失日誌檔案的恢復模式
- 資料檔案丟失的恢復
- 資料檔案丟失如何恢復
- 聯機日誌檔案丟失解決方法
- Oracle資料庫聯機日誌檔案丟失處理方法(總結)!Oracle資料庫
- 控制檔案全部丟失的恢復
- 控制檔案部分丟失的恢復
- 控制檔案丟失的RMAN恢復
- 丟失當前current重做日誌檔案下恢復資料庫資料庫
- oracle歸檔日誌丟失後的資料庫恢復Oracle資料庫
- oracle丟失inactive日誌檔案的恢復操作過程Oracle
- Oracle重做日誌檔案損壞或丟失後的恢復Oracle