使用冷備份與冷備份後的資料庫歸檔日誌檔案進行資料庫不完整恢復
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
- 備份與恢復:polardb資料庫備份與恢復資料庫
- Oracle資料庫冷備和恢復Oracle資料庫
- 資料庫備份恢復資料庫
- postgresql備份與恢復資料庫SQL資料庫
- Dedecms備份的資料檔案位置及備份資料庫的方法資料庫
- 資料庫備份與恢復技術資料庫
- oracle uncatalog資料庫備份檔案Oracle資料庫
- mongodb資料庫備份與恢復(資料庫資料遷移)MongoDB資料庫
- SQL SERVER備份資料庫檔案(使用SSMS)SQLServer資料庫SSM
- 物理冷備份與恢復的操作命令
- 如何在HarmonyOS對資料庫進行備份,恢復與加密資料庫加密
- Mysql資料庫備份及恢復MySql資料庫
- 達夢資料庫備份恢復資料庫
- SqlServer資料庫恢復備份資料的方法SQLServer資料庫
- 從備份片中恢復某個指定得歸檔或者資料檔案
- MySQL-19.資料庫備份與恢復MySql資料庫
- RMAN備份整庫和歸檔日誌的方法
- PostgreSql資料庫的備份和恢復SQL資料庫
- 使用Mysqldump備份和恢復MySQL資料庫MySql資料庫
- Linux下MySQL資料庫的備份與恢復LinuxMySql資料庫
- mysqldump使用方法(MySQL資料庫的備份與恢復)MySql資料庫
- Mongo 資料庫備份和恢復命令Go資料庫
- pg_dump 備份,恢復資料庫資料庫
- 如何恢復在全備後新增了資料檔案的資料庫資料庫
- 使用MySQL Workbench進行資料庫備份MySql資料庫
- Dedecms資料庫恢復與備份的兩種方法資料庫
- 淺談達夢資料庫的備份與恢復資料庫
- mysql的冷備份與熱備份MySql
- 遠端備份資料庫和檔案的方法資料庫
- 備份與恢復:Polardb資料庫資料基於時間點恢復資料庫
- DBV:冷備份的校驗和恢復
- 對歸檔模式下CLEAR 未歸檔日誌後恢復資料庫的一點看法模式資料庫
- Mysql資料備份與恢復MySql
- vivo 資料庫備份恢復系統演化資料庫
- PG-pg_dump備份/恢復資料庫資料庫
- 資料庫資料恢復—無備份,binlog未開啟的Mysql資料庫資料恢復案例資料庫資料恢復MySql
- NoSQL 資料庫案例實戰 -- MongoDB資料備份、恢復SQL資料庫MongoDB
- RMAN備份恢復典型案例——資料檔案存在壞快