使用冷備份與冷備份後的資料庫歸檔日誌檔案進行資料庫不完整恢復
1.1 應用場景
1.1.1 應用場景條件
u 擁有資料庫一個時間點上冷備份(注意:這裡的全備份不是rman的full database backup,而是全庫資料檔案的複製)
u 擁有從那個時間點開始的所有的歸檔日誌檔案。
1.1.2 應用場景目標
使用全庫時間點全庫備份和時間點後的歸檔日誌檔案,進行資料庫恢復,恢復資料庫到最後一個歸檔日誌檔案確定的時間點。
[@more@]1.1 實驗內容
1.1.1 實驗環境初始狀態
SQL> select * from v$version;
BANNER
Oracle Database 10g
Enterprise Edition Release 10.2.0.5.0 - Prod
SQL> select name from v$datafile;
C:ORACLEORADATAAIDUSYSTEM01.DBF
C:ORACLEORADATAAIDUUNDOTBS01.DBF
C:ORACLEORADATAAIDUSYSAUX01.DBF
C:ORACLEORADATAAIDUUSERS01.DBF
C:ORACLEORADATAAIDUAIDU01.DBF
SQL> archive log list;
資料庫日誌模式 存檔模式
自動存檔 啟用
存檔終點 c:oraclearchivelog
最早的聯機日誌序列 1
下一個存檔日誌序列 1
當前日誌序列 1
SQL> select checkpoint_change# from v$database;
CHECKPOINT_CHANGE#
201351
SQL> select checkpoint_change# from v$datafile;
CHECKPOINT_CHANGE#
201351
201351
201351
201351
201351
SQL> select username,default_tablespace from dba_users;
USERNAME DEFAULT_TABLESPACE
SYS SYSTEM
SYSTEM SYSTEM
DBSNMP SYSAUX
SYSMAN SYSAUX
AIDU AIDU
1.1.2 停止資料庫執行,進行資料庫全庫冷備份
Sqlplus / as sysdba
SQL>shutdown immediate;
C:>cp c:oracleoradataaidu*.* c:oracleoradataaidu_bak
Sqlplus / as sysdba
SQL>startup
1.1.3 插入實驗資料,生成兩個歸檔日誌檔案
Sqlplus / as sysdba
SQL>startup
Sqlplus /nolog
SQL>conn aidu/*******
SQL>create table test01(id number(10,2),name varchar2(200),primary key(id));
SQL> insert into test01(id,name) values(1,’test for restore db from full db copy’);
已建立 1 行。
SQL> insert into test01(id,name) select id+(select count(1) from test01),name from test01;
已建立 1 行。
SQL> /
已建立2行。
SQL> /
已建立4行。
SQL> /
已建立8行。
SQL> /
已建立16行。
SQL> /
已建立32行。
SQL> commit;
提交完成。
SQL> select count(1) from test02;
COUNT(1)
----------
64
在表test02裡插入了64條記錄後,進行一次歸檔日誌的切換,將這個變化儲存到歸檔日誌檔案中。
SQL>conn / as sysdba
SQL> alter system switch logfile;
系統已更改。
再次向aidu.test02表中插入記錄
SQL>conn aidu/*******
SQL> insert into test02(id,name) select id+(select count(1) from test02),name from t
已建立64行。
SQL> /
已建立128行。
SQL> /
已建立256行。 ####此時test01表裡有512條記錄.
再次進行歸檔日誌的切換,將新的變化儲存到資料庫歸檔日誌檔案中.
SQL>conn / as sysdba
SQL>alter system switch logfile;
系統已更改。
SQL>alter system switch logfile;
系統已更改。
SQL> select checkpoint_change# from v$database;
CHECKPOINT_CHANGE#
205547
SQL> select first_change#,next_change#,name,sequence# from v$archived_log
FIRST_CHANGE#NEXT_CHANGE# NAME SEQUENCE#
201348
203621 C:ORACLEARCHIVELOGARC00001_0751290496.001 1
203621
203684 C:ORACLEARCHIVELOGARC00002_0751290496.001 2
203684
204036 C:ORACLEARCHIVELOGARC00003_0751290496.001 3
204036
204387 C:ORACLEARCHIVELOGARC00004_0751290496.001 4
204387
204405 C:ORACLEARCHIVELOGARC00005_0751290496.001 5
204405
204885 C:ORACLEARCHIVELOGARC00006_0751290496.001 6
204885
205360 C:ORACLEARCHIVELOGARC00007_0751290496.001 7
205360
205383 C:ORACLEARCHIVELOGARC00008_0751290496.001 8
205383
205734 C:ORACLEARCHIVELOGARC00009_0751290496.001 9
1.1.4 關閉資料庫,模擬災難發生
1.1.4.1 停止資料庫執行
Sqlplus / as sysdba
SQL>shutdown immediate;
此時可以去歸檔日誌目錄檢查一下,在資料庫停止時,會產生一個歸檔日誌檔案,本例為(c:oraclearchivelog ARC00009_0751290496.001),後面的恢復,如果使用到這個歸檔日誌檔案,則說明恢復是成功的。
1.1.4.2 模擬資料庫災難發生
修改當前的資料庫檔案目錄名稱,模擬資料庫檔案全部丟失(因為資料庫檔案目錄c:oracleoradataaidu 已經不存在了)
Ren c:oracleoradataaidu c:oracleoradataaidu_new
1.1.4.3 模擬使用資料庫冷備份進行資料庫檔案的物理恢復
將原來的冷備份目錄更改為資料庫檔案目錄名,模擬使用資料庫的冷備份,將資料庫檔案恢復回來.
Ren c:oracleoradataaidu_bak c:oracleoradataaidu
注意:此時c:oracleoradataaidu 目錄存放的資料庫檔案是冷備份的資料庫檔案.
1.1.5 進行資料庫恢復操作
1.1.5.1 啟動資料庫到mount狀態(注意千萬不要啟動到open狀態)
SQL> startup mount;
ORACLE 例程已經啟動。
Total System Global
Area 612368384 bytes
Fixed Size 1304728 bytes
Variable Size 167774056 bytes
Database Buffers 436207616 bytes
Redo Buffers 7081984 bytes
資料庫裝載完畢。
資料庫已經開啟。
因為使用冷備份的介質,所以啟動資料庫到mount狀態應該沒有任何問題.啟動到mount狀態而不是open狀態,是為了不更改資料檔案的scn.(曾經嘗試啟動資料庫到open狀態,然後進行後面的恢復,結果失敗,分析一下原因,發現問題出在了啟動資料庫後,很多資料庫檔案的scn發生了變化,導致與歸檔日誌裡的記錄不吻合,從而導致恢復失敗).
1.1.5.2 建立生成controlfile的trace檔案,編輯建立控制檔案的指令碼
SQL> alter database backup controlfile to trace;
資料庫已更改。
開啟$ORACLE_BASE/admin/udump/目錄下最新的trace檔案,找出該檔案中建立controlfile檔案的指令碼(注意選擇resetlog那一節的指令碼).建立新建控制檔案的指令碼,內容如下:
CREATE CONTROLFILE REUSE
DATABASE "AIDU" RESETLOGS
ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1
'C:ORACLEORADATAAIDUREDO01.LOG' SIZE
50M,
GROUP 2
'C:ORACLEORADATAAIDUREDO02.LOG' SIZE
50M,
GROUP 3 'C:ORACLEORADATAAIDUREDO03.LOG' SIZE 50M
-- STANDBY LOGFILE
DATAFILE
'C:ORACLEORADATAAIDUSYSTEM01.DBF',
'C:ORACLEORADATAAIDUUNDOTBS01.DBF',
'C:ORACLEORADATAAIDUSYSAUX01.DBF',
'C:ORACLEORADATAAIDUUSERS01.DBF',
'C:ORACLEORADATAAIDUAIDU01.DBF'
CHARACTER SET ZHS16GBK;
1.1.5.3 關閉資料庫
SQL> shutdown immediate;
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
1.1.5.4 啟動資料庫到nomount狀態,建立新的控制檔案
SQL> startup nomount;
ORACLE 例程已經啟動。
Total System Global
Area 612368384 bytes
Fixed Size 1304728 bytes
Variable Size 167774056 bytes
Database Buffers 436207616 bytes
Redo Buffers 7081984 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "AIDU" RESETLOGS ARCHIVELOG
2 MAXLOGFILES 16
3 MAXLOGMEMBERS 3
4 MAXDATAFILES 100
5 MAXINSTANCES 8
6 MAXLOGHISTORY 292
7 LOGFILE
8 GROUP 1 'C:ORACLEORADATAAIDUREDO01.LOG' SIZE 50M,
9 GROUP 2 'C:ORACLEORADATAAIDUREDO02.LOG' SIZE 50M,
10 GROUP 3 'C:ORACLEORADATAAIDUREDO03.LOG' SIZE 50M
11 -- STANDBY LOGFILE
12 DATAFILE
13 'C:ORACLEORADATAAIDUSYSTEM01.DBF',
14 'C:ORACLEORADATAAIDUUNDOTBS01.DBF',
15 'C:ORACLEORADATAAIDUSYSAUX01.DBF',
16 'C:ORACLEORADATAAIDUUSERS01.DBF',
17 'C:ORACLEORADATAAIDUAIDU01.DBF'
18 CHARACTER SET ZHS16GBK;
控制檔案已建立。
1.1.5.5 進行資料庫恢復
SQL> recover database using backup controlfile until cancel;
ORA-00279: change 205046
generated at 05/16/2011 15:04:02 needed for thread 1
ORA-00289: suggestion :
C:ORACLEARCHIVELOGARC00007_0751290496.001
ORA-00280: change 205046
for thread 1 is in sequence #7
Specify log:
{
AUTO ####注意:這裡回答AUTO 就可以了
ORA-00279: change 205360
generated at 05/16/2011 15:13:05 needed for thread 1
ORA-00289: suggestion :
C:ORACLEARCHIVELOGARC00008_0751290496.001
ORA-00280: change 205360
for thread 1 is in sequence #8
ORA-00278: log file
'C:ORACLEARCHIVELOGARC00007_0751290496.001' no longer
needed for this recovery
ORA-00279: change 205383
generated at 05/16/2011 15:14:10 needed for thread 1
ORA-00289: suggestion :
C:ORACLEARCHIVELOGARC00009_0751290496.001
ORA-00280: change 205383
for thread 1 is in sequence #9
ORA-00278: log file
'C:ORACLEARCHIVELOGARC00008_0751290496.001' no longer
needed for this recovery
ORA-00279: change 205734
generated at 05/16/2011 15:18:32 needed for thread 1
ORA-00289: suggestion :
C:ORACLEARCHIVELOGARC00010_0751290496.001
ORA-00280: change 205734
for thread 1 is in sequence #10
ORA-00278: log file
'C:ORACLEARCHIVELOGARC00009_0751290496.001' no longer
needed for this recovery
ORA-00308: cannot open
archived log
'C:ORACLEARCHIVELOGARC00010_0751290496.001'
ORA-27041: unable to
open file
最終以找不到新的歸檔日誌序列檔案的錯誤提示結束,這屬於正常的情況,因為ORACLE 會在auto方式下窮盡尋找,直至最後,然後報一個找不到下一個的錯誤.
SQL> alter database open resetlogs;
Database altered.
1.1.5.6 檢驗資料庫是否恢復到最新的資料狀態.
u 檢查恢復後的資料庫SCN
SQL> select checkpoint_change# from v$database;
CHECKPOINT_CHANGE#
------------------
205738 ####大於停庫前的205734
u 檢查特徵表的記錄
SQL> conn aidu/*****
Connected.
SQL> select count(1) from test01;
COUNT(1)
512 ####與恢復前的資料記錄數完全相同,恢復成功.
1.2 總結
通常我們使用資料庫的冷備份,可以將資料庫回覆到冷備份的時間點。但如果只恢復到時間點還不滿足要求,同時我們又有冷備份後的所有歸檔日誌檔案,我們就可以使用上文提到的方法,進行更有效的資料庫不完整恢復,減少資料庫資料的丟失。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/32980/viewspace-1049938/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 冷備份+歸檔日誌的恢復
- 資料庫備份與恢復(使用歸檔後滾)資料庫
- Oracle資料庫的冷備份及冷備份異地恢復方法Oracle資料庫
- 備份與恢復--從備份的歸檔日誌中恢復資料
- 第5章:從開啟的資料庫備份與恢復之備份歸檔日誌檔案資料庫
- Oracle資料庫冷備份的異地恢復Oracle資料庫
- 基於歸檔的冷備份恢復
- 基於非歸檔的冷備份恢復
- 使用資料庫冷備份方式進行資料庫遷移,資料庫檔案遷移到不同的目錄資料庫
- 使用備份的控制檔案恢復資料庫資料庫
- Oracle資料庫冷備份與熱備份操作梳理Oracle資料庫
- 沒備份,歸檔日誌存在,丟失資料檔案的恢復
- rman全庫備份備份歸檔日誌檔案
- Oracle資料庫的備份方法-冷備份(轉)Oracle資料庫
- 使用logmnr,在RMAN備份檔案中恢復備份的歸檔日誌檔案進行分析
- 資料庫冷備份內容資料庫
- 用冷備份+歸檔日誌執行不完全恢復一例
- 資料庫的冷備份遷移資料庫
- Oracle RMAN 不完全恢復(只有資料檔案備份,丟失歸檔日誌備份)Oracle
- Oracle資料庫備份與恢復之匯出/匯入(EXP/IMP)、熱備份和冷備份Oracle資料庫
- 不完全恢復(資料檔案備份--新建表空間--控制檔案備份--日誌歸檔檔案)
- Oracle使用備份檔案集恢復歸檔日誌Oracle
- 備份&恢復之八:RMAN備份歸檔模式下損壞(丟失)多個資料檔案,進行整個資料庫的恢復模式資料庫
- RAC環境備份歸檔日誌和RMAN恢復啟動資料庫資料庫
- Backup And Recovery User's Guide-備份資料庫-備份歸檔重做日誌檔案GUIIDE資料庫
- Oracle資料庫冷備和恢復Oracle資料庫
- 資料庫異機冷備恢復資料庫
- RMAN備份資料檔案+控制檔案+歸檔日誌
- 歸檔模式無備份丟失資料檔案後恢復模式
- 歸檔模式有備份丟失資料檔案後恢復模式
- 冷備份應用歸檔
- RMAN資料庫恢復 之歸檔模式有(無)備份-丟失資料檔案的恢復資料庫模式
- 備份與恢復:polardb資料庫備份與恢復資料庫
- 【備份恢復】從備份恢復資料庫資料庫
- rman恢復資料庫--用備份的控制檔案資料庫
- 使用FLASHCOPY+資料庫歸檔日誌檔案進行資料庫不完整恢復技術實施方案(1 /2)資料庫
- 使用FLASHCOPY+資料庫歸檔日誌檔案進行資料庫不完整恢復技術實施方案(2 /2)資料庫
- 歸檔模式,恢復沒有備份的資料檔案模式