備份恢復總結(一則)

anycall2010發表於2008-07-26

今天在論壇看zergduan 同學總結的不錯,先借用過來:

1. using backup controlfile 使用在丟失當前controlfile,用冷備份中的controlife恢復的時候。用來告訴oracle,不要以controlfile中的scn作為恢復的終點。

如果你丟失當前controlfile但是有current/active redo應該使用recover database using backup controlfile;--完全恢復

2. until cancel使用在丟失current/active redo的時候。有你手動指定終點。

如果你丟失current/active redo但是有當前controlfile應該使用recover database until cancel;--不完全恢復

3. 如果你有當前的controlfile和current/active redo應該使用recover database;--完全恢復

4. 如果都丟失使用recover database using backup controlfile until cancel;--不完全恢復

5.rman 如果沒有catalog 又丟失controlfile,但又用rman備份並刪除過arcvhivelog就不好辦了。其他的一樣,如果丟失current redo,只不過不能until cancel.而是基於archivelog作不完全恢復就可以

附錄 :

然後推薦了一個BLOG的測試也很好,【順便轉載】

冷備份是一致的,如果冷備份包含所有的datafile,controlfile,online redo logfile,並且將所有的這些檔案全部restore後再來做recover,是不行的,oracle會告訴你,當前資料庫是一致的,無須recover。

首先關閉資料庫,做一個冷備份
SQL> shutdown immediate;
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。

然後啟動到mount狀態,試著做recover(這就相當於將所有的冷備份檔案都restore回來的情況)
SQL> startup mount;
ORACLE 例程已經啟動。

Total System Global Area 142606336 bytes
Fixed Size 1247732 bytes
Variable Size 83887628 bytes
Database Buffers 50331648 bytes
Redo Buffers 7139328 bytes
資料庫裝載完畢。

SQL> alter database open;

資料庫已更改。

恢復場景一:當前聯機日誌檔案,控制檔案都是ok的,資料檔案損壞

恢復方法
1.restore冷備份中的資料檔案

2.啟動資料庫,報錯
SQL> startup
ORACLE 例程已經啟動。

Total System Global Area 142606336 bytes
Fixed Size 1247732 bytes
Variable Size 83887628 bytes
Database Buffers 50331648 bytes
Redo Buffers 7139328 bytes
資料庫裝載完畢。
ORA-01113: 檔案 1 需要介質恢復
ORA-01110: 資料檔案 1: 'E:/ORACLE/ORA10/ORADATA/NING/SYSTEM01.DBF'

3.使用recover database恢復資料庫
SQL> recover database;
ORA-00279: 更改 301820 (在 11/29/2006 10:16:00 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: E:/ORACLE/ARCH/NING/ARC00133_0607342148.001
ORA-00280: 更改 301820 (用於執行緒 1) 在序列 #133 中


指定日誌: {=suggested | filename | AUTO | CANCEL}
auto
ORA-00279: 更改 301821 (在 11/29/2006 10:26:15 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: E:/ORACLE/ARCH/NING/ARC00134_0607342148.001
ORA-00280: 更改 301821 (用於執行緒 1) 在序列 #134 中
ORA-00278: 此恢復不再需要日誌檔案 'E:/ORACLE/ARCH/NING/ARC00133_0607342148.001'


ORA-00279: 更改 302089 (在 11/29/2006 10:27:30 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: E:/ORACLE/ARCH/NING/ARC00135_0607342148.001
ORA-00280: 更改 302089 (用於執行緒 1) 在序列 #135 中
ORA-00278: 此恢復不再需要日誌檔案 'E:/ORACLE/ARCH/NING/ARC00134_0607342148.001'


已應用的日誌。
完成介質恢復。

4.開啟資料庫並檢查測試資料
SQL> alter database open;

資料庫已更改。

SQL> select * from tt;

ID NAME
---------- --------------------
1 a

可以看到,資料庫已經恢復。其實這種情況下,只要有歸檔日誌檔案,當前聯機日誌檔案,當前控制檔案,恢復起來是相當簡單的,

和使用聯機熱備的方式也沒有什麼區別。如果只是丟失了個別datafile(非系統表空間檔案),也可以使

用recover datafile的方式來恢復。

恢復場景二:當前聯機日誌檔案ok,控制檔案,資料檔案全部損壞

恢復方法一
1.restore冷備份中的控制檔案和資料檔案

2.啟動資料庫
SQL> startup
ORACLE 例程已經啟動。

Total System Global Area 142606336 bytes
Fixed Size 1247732 bytes
Variable Size 83887628 bytes
Database Buffers 50331648 bytes
Redo Buffers 7139328 bytes
資料庫裝載完畢。
ORA-00314: 日誌 1 (用於執行緒 1) 要求的序號 與 不匹配
ORA-00312: 聯機日誌 1 執行緒 1: 'E:/ORACLE/ORA10/ORADATA/NING/REDO01.LOG'

3.使用recover database using backup controlfile恢復資料庫
SQL> recover database using backup controlfile;
ORA-00279: 更改 301820 (在 11/29/2006 10:16:00 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: E:/ORACLE/ARCH/NING/ARC00133_0607342148.001
ORA-00280: 更改 301820 (用於執行緒 1) 在序列 #133 中


指定日誌: {=suggested | filename | AUTO | CANCEL}
auto
ORA-00279: 更改 301821 (在 11/29/2006 10:26:15 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: E:/ORACLE/ARCH/NING/ARC00134_0607342148.001
ORA-00280: 更改 301821 (用於執行緒 1) 在序列 #134 中
ORA-00278: 此恢復不再需要日誌檔案 'E:/ORACLE/ARCH/NING/ARC00133_0607342148.001'

ORA-00279: 更改 302089 (在 11/29/2006 10:27:30 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: E:/ORACLE/ARCH/NING/ARC00135_0607342148.001
ORA-00280: 更改 302089 (用於執行緒 1) 在序列 #135 中
ORA-00278: 此恢復不再需要日誌檔案 'E:/ORACLE/ARCH/NING/ARC00134_0607342148.001'

ORA-00279: 更改 302091 (在 11/29/2006 10:27:31 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: E:/ORACLE/ARCH/NING/ARC00136_0607342148.001
ORA-00280: 更改 302091 (用於執行緒 1) 在序列 #136 中
ORA-00278: 此恢復不再需要日誌檔案 'E:/ORACLE/ARCH/NING/ARC00135_0607342148.001'

ORA-00279: 更改 302094 (在 11/29/2006 10:27:36 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: E:/ORACLE/ARCH/NING/ARC00137_0607342148.001
ORA-00280: 更改 302094 (用於執行緒 1) 在序列 #137 中
ORA-00278: 此恢復不再需要日誌檔案 'E:/ORACLE/ARCH/NING/ARC00136_0607342148.001'

ORA-00279: 更改 302098 (在 11/29/2006 10:27:45 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: E:/ORACLE/ARCH/NING/ARC00138_0607342148.001
ORA-00280: 更改 302098 (用於執行緒 1) 在序列 #138 中
ORA-00278: 此恢復不再需要日誌檔案 'E:/ORACLE/ARCH/NING/ARC00137_0607342148.001'

ORA-00279: 更改 302227 (在 11/29/2006 10:37:31 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: E:/ORACLE/ARCH/NING/ARC00139_0607342148.001
ORA-00280: 更改 302227 (用於執行緒 1) 在序列 #139 中
ORA-00278: 此恢復不再需要日誌檔案 'E:/ORACLE/ARCH/NING/ARC00138_0607342148.001'

ORA-00308: 無法開啟歸檔日誌 'E:/ORACLE/ARCH/NING/ARC00139_0607342148.001'
ORA-27041: 無法開啟檔案
OSD-04002: ??????????
O/S-Error: (OS 2) The system cannot find the file specified.

SQL> alter database open resetlogs;
alter database open resetlogs
*
第 1 行出現錯誤:
ORA-01113: 檔案 1 需要介質恢復
ORA-01110: 資料檔案 1: 'E:/ORACLE/ORA10/ORADATA/NING/SYSTEM01.DBF'

SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 302227 (在 11/29/2006 10:37:31 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: E:/ORACLE/ARCH/NING/ARC00139_0607342148.001
ORA-00280: 更改 302227 (用於執行緒 1) 在序列 #139 中

指定日誌: {=suggested | filename | AUTO | CANCEL}
cancel
介質恢復已取消。

4.開啟資料庫並檢查測試資料
SQL> alter database open;
alter database open
*
第 1 行出現錯誤:
ORA-01589: 要開啟資料庫則必須使用 RESETLOGS 或 NORESETLOGS 選項

SQL> alter database open noresetlogs;
alter database open noresetlogs
*
第 1 行出現錯誤:
ORA-01588: 要開啟資料庫則必須使用 RESETLOGS 選項

SQL> alter database open resetlogs;

資料庫已更改。

SQL> select * from tt;

ID NAME
---------- --------------------
1 a

可以看到,由於控制檔案是老的控制檔案,和當前聯機日誌檔案的資訊不同步,恢復完後需要使用resetlogs才能開啟資料庫。恢復過程中如果無法將資料庫恢復到一致狀態,也可以嘗試應用所有的當前聯機日誌。

恢復方法二

1.restore所有的資料檔案

2.重建控制檔案
SQL> startup nomount;
ORACLE 例程已經啟動。

Total System Global Area 142606336 bytes
Fixed Size 1247732 bytes
Variable Size 83887628 bytes
Database Buffers 50331648 bytes
Redo Buffers 7139328 bytes

SQL> CREATE CONTROLFILE REUSE DATABASE "NING" NORESETLOGS ARCHIVELOG
2 MAXLOGFILES 16
3 MAXLOGMEMBERS 3
4 MAXDATAFILES 100
5 MAXINSTANCES 8
6 MAXLOGHISTORY 292
7 LOGFILE
8 GROUP 1 'E:/ORACLE/ORA10/ORADATA/NING/REDO01.LOG' SIZE 10M,
9 GROUP 2 'E:/ORACLE/ORA10/ORADATA/NING/REDO02.LOG' SIZE 10M,
10 GROUP 3 'E:/ORACLE/ORA10/ORADATA/NING/REDO03.LOG' SIZE 10M
11 -- STANDBY LOGFILE
12 DATAFILE
13 'E:/ORACLE/ORA10/ORADATA/NING/SYSTEM01.DBF',
14 'E:/ORACLE/ORA10/ORADATA/NING/UNDOTBS01.DBF',
15 'E:/ORACLE/ORA10/ORADATA/NING/SYSAUX01.DBF',
16 'E:/ORACLE/ORA10/ORADATA/NING/USERS01.DBF'
17 CHARACTER SET UTF8
18 ;

控制檔案已建立。

3.使用recover database恢復資料庫
SQL> recover database;
SQL> recover database using backup controlfile;
ORA-00279: 更改 301820 (在 11/29/2006 10:16:00 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: E:/ORACLE/ARCH/NING/ARC00133_0607342148.001
ORA-00280: 更改 301820 (用於執行緒 1) 在序列 #133 中

指定日誌: {=suggested | filename | AUTO | CANCEL}
auto
ORA-00279: 更改 301821 (在 11/29/2006 10:26:15 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: E:/ORACLE/ARCH/NING/ARC00134_0607342148.001
ORA-00280: 更改 301821 (用於執行緒 1) 在序列 #134 中
ORA-00278: 此恢復不再需要日誌檔案 'E:/ORACLE/ARCH/NING/ARC00133_0607342148.001'

ORA-00279: 更改 302089 (在 11/29/2006 10:27:30 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: E:/ORACLE/ARCH/NING/ARC00135_0607342148.001
ORA-00280: 更改 302089 (用於執行緒 1) 在序列 #135 中
ORA-00278: 此恢復不再需要日誌檔案 'E:/ORACLE/ARCH/NING/ARC00134_0607342148.001'

已應用的日誌。
完成介質恢復。

4.開啟資料庫並檢查測試資料
SQL> alter database open;

資料庫已更改。

SQL> select * from tt;

ID NAME
---------- ----------------------------------------
1 a

可見,使用重建控制檔案的恢復方法,只有當前聯機日誌是最新的,無需使用resetlogs即可開啟資料庫。只要當前聯機日誌正常,一般建議採取重建日誌檔案而不是採用備份的控制檔案來恢復資料庫。由此也可以看到,聯機日誌檔案相當重要,要盡最大努力避免聯機日誌損壞,例如,使用多個member logfile,每個logfile放到不同的磁碟上,等等。同時,在修改過資料庫的結構,比如新增datafile後,最好將控制檔案的指令碼備份一次alter database backup controlfile to trace;

恢復場景三:當前聯機日誌檔案,控制檔案,資料檔案全部損壞

恢復方法
1.restore冷備份中的聯機日誌檔案,控制檔案和資料檔案

2.啟動資料庫到mount狀態
SQL> startup mount;
ORACLE 例程已經啟動。

Total System Global Area 130023424 bytes
Fixed Size 1247684 bytes
Variable Size 92276284 bytes
Database Buffers 33554432 bytes
Redo Buffers 2945024 bytes
資料庫裝載完畢。

3.使用recover database until cancel using backup controlfile恢復
SQL> recover database until cancel using backup controlfile;
ORA-00279: 更改 300612 (在 11/29/2006 09:12:44 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: E:/ORACLE/ARCH/NING/ARC00131_0607342148.001
ORA-00280: 更改 300612 (用於執行緒 1) 在序列 #131 中

指定日誌: {=suggested | filename | AUTO | CANCEL}
auto
ORA-00279: 更改 300613 (在 11/29/2006 09:20:11 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: E:/ORACLE/ARCH/NING/ARC00132_0607342148.001
ORA-00280: 更改 300613 (用於執行緒 1) 在序列 #132 中
ORA-00278: 此恢復不再需要日誌檔案 'E:/ORACLE/ARCH/NING/ARC00131_0607342148.001'

ORA-00279: 更改 300739 (在 11/29/2006 09:21:01 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: E:/ORACLE/ARCH/NING/ARC00133_0607342148.001
ORA-00280: 更改 300739 (用於執行緒 1) 在序列 #133 中
ORA-00278: 此恢復不再需要日誌檔案 'E:/ORACLE/ARCH/NING/ARC00132_0607342148.001'

ORA-00279: 更改 300741 (在 11/29/2006 09:21:02 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: E:/ORACLE/ARCH/NING/ARC00134_0607342148.001
ORA-00280: 更改 300741 (用於執行緒 1) 在序列 #134 中
ORA-00278: 此恢復不再需要日誌檔案 'E:/ORACLE/ARCH/NING/ARC00133_0607342148.001'

ORA-00279: 更改 300744 (在 11/29/2006 09:21:06 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: E:/ORACLE/ARCH/NING/ARC00135_0607342148.001
ORA-00280: 更改 300744 (用於執行緒 1) 在序列 #135 中
ORA-00278: 此恢復不再需要日誌檔案 'E:/ORACLE/ARCH/NING/ARC00134_0607342148.001'

ORA-00308: 無法開啟歸檔日誌 'E:/ORACLE/ARCH/NING/ARC00135_0607342148.001'
ORA-27041: 無法開啟檔案
OSD-04002: ??????????
O/S-Error: (OS 2) The system cannot find the file specified.

SQL> recover database until cancel using backup controlfile;
ORA-00279: 更改 300744 (在 11/29/2006 09:21:06 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: E:/ORACLE/ARCH/NING/ARC00135_0607342148.001
ORA-00280: 更改 300744 (用於執行緒 1) 在序列 #135 中

指定日誌: {=suggested | filename | AUTO | CANCEL}
cancel
介質恢復已取消。

4.啟動資料庫並查詢測試資料
SQL> alter database open resetlogs;

資料庫已更改。




 

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

相關文章