冷備份+歸檔日誌的恢復
論壇上有人問起,能用以前的冷備份+冷備份以來的所有歸檔日誌將資料庫恢復到當前狀態麼?原帖地址:http://www.itpub.net/676840.html
ref: http://ningoo.itpub.net/post/2149/232909
[@more@]冷備份是一致的,如果冷備份包含所有的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> recover database;
ORA-00283: 恢復會話因錯誤而取消
ORA-00264: 不要求恢復
可以看到,oracle會給出正確的提示:ORA-00264: 不要求恢復,資料庫是一致的。
開啟資料庫,建立測試表並插入測試資料
SQL> alter database open;
資料庫已更改。
SQL> create table tt(id int,name varchar2(20));
表已建立。
SQL> insert into tt values(1,'a');
已建立 1 行。
SQL> commit;
提交完成。
切換日誌,進行歸檔
SQL> alter system switch logfile;
系統已更改。
SQL> /
系統已更改。
SQL> /
系統已更改。
SQL> /
系統已更改。
關閉系統
SQL> shutdown immediate;
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
恢復場景一:當前聯機日誌檔案,控制檔案都是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 中
指定日誌: {
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 中
指定日誌: {
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 中
指定日誌: {
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 中
指定日誌: {
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 中
指定日誌: {
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 中
指定日誌: {
cancel
介質恢復已取消。
4.啟動資料庫並查詢測試資料
SQL> alter database open resetlogs;
資料庫已更改。
SQL>
SQL> select * from tt;
ID NAME
---------- ----------------------------------------
1 a
(需要引用, 請註明出處: http://ningoo.itpub.net)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/262387/viewspace-892797/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle使用備份檔案集恢復歸檔日誌Oracle
- DG歸檔日誌缺失恢復
- 手工rm刪除歸檔日誌對備份歸檔日誌的影響
- MySQL 日誌管理、備份與恢復MySql
- MySQL日誌管理,備份和恢復MySql
- Oracle設定多個歸檔路徑生成多份歸檔日誌,Rman備份時也只備份其中的一份歸檔日誌Oracle
- oracle dg 歸檔日誌恢復情況Oracle
- RMAN備份整庫和歸檔日誌的方法
- DBV:冷備份的校驗和恢復
- 物理冷備份與恢復的操作命令
- oracle rman備份歸檔日誌需要先切換日誌嗎Oracle
- dg丟失歸檔,使用rman增量備份恢復
- oracle冷備恢復Oracle
- 測試在丟失歸檔日誌的情況下,跳過部分歸檔日誌進行資料恢復資料恢復
- 如何快速找到備份過最近、最大序號的歸檔日誌
- 對歸檔模式下CLEAR 未歸檔日誌後恢復資料庫的一點看法模式資料庫
- 從備份片中恢復某個指定得歸檔或者資料檔案
- RAC備份恢復之Voting備份與恢復
- XFS檔案系統的備份、恢復、修復
- 【Oracle】歸檔日誌管理-設定歸檔日誌路徑以及歸檔日誌冗餘Oracle
- 備份與恢復:polardb資料庫備份與恢復資料庫
- MySQL備份與恢復——基於Xtrabackup物理備份恢復MySql
- Rman在run命令塊裡臨時設定歸檔目錄,歸檔日誌能否恢復主要看預設的歸檔路徑
- 歸檔日誌挖掘
- PostgreSQL 歸檔日誌SQL
- oracle歸檔日誌Oracle
- mydumper備份恢復
- Mysql備份恢復MySql
- 備份和恢復
- 12 使用RMAN備份和恢復檔案
- Linux中XFS檔案系統的備份,恢復,修復Linux
- Oracle資料庫冷備和恢復Oracle資料庫
- DB的備份與恢復
- GitLab的備份與恢復Gitlab
- 詳解叢集級備份恢復:物理細粒度備份恢復
- MySQL備份與恢復——基於MyDumper/MyLoader 邏輯備份恢復MySql
- GitLab的自動備份、清理備份與恢復Gitlab
- Mysql備份與恢復(1)---物理備份MySql
- 歸檔oracle alert日誌Oracle