使用FLASHCOPY+資料庫歸檔日誌檔案進行資料庫不完整恢復技術實施方案(1 /2)
1.1 應用場景
1.1.1 應用場景條件
u 使用FLASHCOPY功能,生成一個全庫資料的時間點複製。
u 擁有從那個時間點開始的所有的資料庫歸檔日誌檔案。
u 資料庫使用的儲存完全損壞,無法恢復,資料庫當機。
1.1.2 應用場景目標
使用FLASHCOPY 生成的儲存的時間點資料,進行資料庫的恢復,步驟和原理和使用資料庫冷備份(cold backup)進行資料庫恢復是一樣的。但這樣的恢復只能夠恢復到生成flashcopy的時間點。當我們還有很多這個時間點後歸檔日誌檔案的前提下,如何才能恢復更多的資料呢?
使用FLASHCOPY生成的時間點全庫資料和時間點後的資料庫歸檔日誌檔案,使用特殊的方法,進行資料庫恢復,資料庫恢復到最後一個歸檔日誌檔案確定的時間點。
[@more@]1.1 實驗內容
1.1.1 實驗總體步驟
實驗總體步驟如下:
1. 啟動資料庫(歸檔模式),資料庫資料檔案是建立在DS8100的5000-5102等 FBVOL上。
2. 記錄資料庫SCN,進行FLASHCOPY,源FBVOL為5000-5102,目標FBVOL為8000-8102。
3. 在資料庫上新增特徵記錄,並進行歸檔日誌切換。
4. 關閉資料庫,刪除原來的儲存裝置,模擬災難發生。
5. 檢查FLASHCOPY的進度,直至FLASHCOPY 完成複製工作。
6. 在DS8100上,取消主機訪問5000-5102的路徑,增加主機訪問8000-8102的路徑
7. 在主機上識別8000-8100等FBVOL,匯入VG,設定lv的訪問許可權。
8. 進行資料庫恢復。
9. 檢查特徵記錄,檢驗資料庫恢復是否成功。
1.1.2 實驗環境總體情況描述
1.1.2.1 主機總體情況
u 主機:IBM P570 小型機
# oslevel -s
6100-06-03-1048
#lsvg –p testvg
testvg:
PV_NAME PV STATE TOTAL PPs FREE PPs
FREE DISTRIBUTION
vpath0 active 159 116 32..00..20..32..32
vpath1 active 159
116 32..00..20..32..32
vpath2 active 159 116 32..00..20..32..32
vpath3 active 159 116 32..00..20..32..32
vpath4 active 159 116 32..00..20..32..32
vpath5 active 159 116 32..00..20..32..32
# datapath query device
Total Devices : 6
DEV#: 0
DEVICE NAME: vpath0 TYPE:
2107900 POLICY: Optimized
SERIAL: 75TXXXX5000
==========================================================================
Path# Adapter/Hard Disk State Mode
Select Errors
0
fscsi0/hdisk2 OPEN NORMAL
425 0
1
fscsi0/hdisk8 OPEN
NORMAL 385 0
2
fscsi0/hdisk14 OPEN NORMAL
388 0
3
fscsi0/hdisk20 OPEN NORMAL
394 0
4
fscsi1/hdisk26 OPEN NORMAL
422 0
5
fscsi1/hdisk32 OPEN NORMAL
415 0
6
fscsi1/hdisk38 OPEN NORMAL
395 0
7
fscsi1/hdisk44 OPEN NORMAL
406 0
DEV#: 1
DEVICE NAME: vpath1 TYPE:
2107900 POLICY: Optimized
SERIAL: 75TXXXX5001
。。。。。。
DEV#: 2
DEVICE NAME: vpath2 TYPE:
2107900 POLICY: Optimized
SERIAL: 75TXXXX5002
。。。。。。
DEV#: 3
DEVICE NAME: vpath3 TYPE:
2107900 POLICY: Optimized
SERIAL: 75TXXXX5100
。。。。。。
DEV#: 4
DEVICE NAME: vpath4 TYPE:
2107900 POLICY: Optimized
SERIAL: 75TXXXX5101
。。。。。。
DEV#: 5
DEVICE NAME: vpath5 TYPE:
2107900 POLICY: Optimized
SERIAL: 75TXXXX5102
。。。。。。
1.1.2.2 儲存總體情況
儲存:IBM DS8100
#lsfbvol -l
test_p0_02 5000 Online Normal Normal 2107-900 FB 512 P0 standard
test_p0_03 5001Online Normal Normal 2107-900 FB 512 P0 Standard
test_p0_04 5002 Online Normal Normal 2107-900 FB 512 P0 standard
test_p1_02 5100 Online Normal Normal 2107-900 FB 512 P1standard
test_p1_03 5101 Online Normal Normal 2107-900 FB 512 P1standard
test_p1_04 5102 Online Normal Normal 2107-900 FB 512 P1standard
fltest_01 8000 Online
Normal Normal 2107-900
FB 512 P0 Standard
fltest_02 8001 Online
Normal Normal 2107-900
FB 512 P0 Standard
fltest_03 8002 Online Normal
Normal 2107-900 FB 512
P0 Standard
fltest_01 8100 Online
Normal Normal 2107-900
FB 512 P0 Standard
fltest_02 8100 Online
Normal Normal 2107-900
FB 512 P0 Standard
fltest_03 8102 Online Normal Normal 2107-900 FB 512 P0 Standard
其中:5000-5102是flashcopy的源盤,8000-8102是flashcopy的目標盤。每個FBVOL都是20G大小。
1.1.2.3 資料庫總體情況
資料庫:Oracle 10.2.0.5
SQL> select * from v$version;
BANNER
Oracle Database 10g
Enterprise Edition Release 10.2.0.5.0 - Prod
資料庫資料檔案都是裸裝置格式。
SQL> select file#,name,bytes/1024/1024 from v$datafile;
FILE# NAME
BYTES/1024/1024
1 /dev/rora_system 700
2 /dev/rora_undotbs01 3500
3 /dev/rora_sysaux 700
4 /dev/rora_data01 3500
5 /dev/rora_data02 3500
6 /dev/rora_index01 3500
7 /dev/rora_index02 3500
SQL> select * from v$controlfile;
NAME IS_
BLOCK_SIZE FILE_SIZE_BLKS
/dev/rora_control01 NO 16384 386
/dev/rora_control02 NO 16384 386
/dev/rora_control03 NO 16384 386
資料庫執行在歸檔模式下
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /archivelog
Oldest online log
sequence 3
Next log sequence to
archive 5
Current log
sequence 5
SQL> select username,default_tablespace from dba_users;
USERNAME DEFAULT_TABLESPACE
OUTLN SYSTEM
SYS SYSTEM
SYSTEM SYSTEM
AIDU YD_DATA
TSMSYS SYSTEM
1.1.3 記錄資料庫的SCN,檢查特徵表是否存在
SQL> select checkpoint_change# from v$database;
CHECKPOINT_CHANGE#
454267
SQL> select count(1) from aidu.test01;
select count(1) from
aidu.test01
ERROR at line 1:
ORA-00942: table or view
does not exist
此時還沒有建立特徵表,所以報物件不存在的錯誤,這是正常的。
1.1.4 將資料庫設定為begin backup狀態
筆者曾經嘗試過三個場景,只有使用begin backup場景,實驗才成功。
場景一:資料庫不做任何特殊操作(不執行suspend和不執行begin backup)
場景一結果:資料庫無法使用歸檔日誌進行不完整恢復,恢復時報file #1需要恢復的錯誤,alert日誌裡報:
Recovering data file 1
from a fuzzy file. If not the current file it might be an online backup taken
without entering the begin backup command.
不過資料庫在不做任何特殊操作的前提下,直接執行flashcopy,然後使用目標盤是可以成功啟動資料庫到open狀態,可以實現時間點的資料庫恢復。
場景二:在FLASHCOPY 執行前,先執行資料庫的suspend操作。
場景二結果:資料庫無法使用歸檔日誌進行不完整恢復,報file #1需要恢復的錯誤,alert日誌裡報:
Recovering data file 1
from a fuzzy file. If not the current file it might be an online backup taken
without entering the begin backup command.
不過資料庫在執行了suspend的前提下,使用目標盤是可以成功啟動資料庫到open狀態,可以實現時間點的資料庫恢復。
場景三:在FLASHCOPY執行前,先執行資料庫的begin backup操作。
場景三結果:資料庫可以使用歸檔日誌進行不完整恢復;當然也可以實現時間點的恢復。所以本技術方案採用這種場景。
筆者在研究的過程中,按照上述場景順序一一進行實驗的。剛開始以為flashcopy和資料庫冷備份是完全一樣的(筆者在windows環境裡已經測試過使用資料庫冷備份與歸檔日誌檔案進行資料庫的不完全恢復,比較成功,詳見筆者的部落格文章:http://djb1008.itpub.net/post/42280/517938),但多次測試的結果都是失敗的。於是筆者測試將資料庫的I/O掛起(執行ALTER SYSTEM SUSPEND命令),即測試場景二,以為I/O都停止的情況下,再做flashcopy,恢復工作一定可以完成,測試結果和場景一完全相同,無法進行時間點的恢復。在metalink上就錯誤資訊’Recovering data file 1 from a fuzzy file’進行搜尋,找到一篇關於IBM ESS flashcopy的文章,ID=300255.1,該文中提到了多卷組複製時需要執行begin backup的命令,將資料庫設定在online backup 模式,即場景三。透過設定資料庫進入online backup模式,然後再執行flashcopy,就可以使用flashcopy和資料庫歸檔日誌檔案進行資料庫不完整恢復了。
SQL> alter system checkpoint;
SQL>alter database begin backup;
System altered.
1.1.5 在DS8100儲存上登入DSCLI管理介面,開始進行FLASHCOPY操作
執行begin backup命令,將資料庫設定為online backup模式後,就可以執行儲存的flashcopy命令了,當flashcopy命令(mkflash)執行後,不用等到整個複製工作完成,而是馬上可以在資料庫端執行end backup命令,將資料庫退出online backup模式,以減少對業務系統的影響。
資料庫設定為online backup模式後,執行mkflash命令,生成flashcopy的對應關係,這個操作基本上是1秒左右就可以完成,儲存端馬上就可以顯示’FlashCopy pair successfully created.’資訊,執行mkflash命令前,需要保證資料庫是處於online backup模式;當mkflash命令使用約1秒種左右的時間,完成了flashcopy pair關係的建立,啟動了後臺的複製工作後,就不再需要資料庫處於online backup模式了,資料庫可以馬上退出online backup模式,而不影響flashcopy的執行,同樣也不影響後面的flashcopy+歸檔日誌的不完整恢復。為什麼執行完mkflash命令,需要立即將資料庫退出online backup模式呢?
資料庫進入online backup模式後,資料庫資料檔案被鎖定,不寫入任何內容,資料庫仍然不間斷執行,對資料庫使用者沒有任何影響,只是變化的資料被寫入到redo日誌檔案中,對日誌檔案的開銷比較大,所以需要儘快退出online backup模式,退出online backup模式時,資料庫會自動將變化量恢復到資料檔案中,如果處於online backup模式時間過長,這種應用變化也會造成資料庫的短時間的效能瓶頸。
dscli> mkflash -freeze -cp 5000-5002:8000-8002 5100-5102:8100-8102
Date/Time: 2011年5月17日 下午03時13分01秒 IBM DSCLI Version: 5.3.1.172 DS: IBM.2107-75TXXXX
CMUC00137I mkflash:
FlashCopy pair 5000:8000 successfully created.
CMUC00137I mkflash:
FlashCopy pair 5001:8001 successfully created.
CMUC00137I mkflash:
FlashCopy pair 5002:8002 successfully created.
CMUC00137I mkflash:
FlashCopy pair 5100:8100 successfully created.
CMUC00137I mkflash:
FlashCopy pair 5101:8101 successfully created.
CMUC00137I mkflash:
FlashCopy pair 5102:8102 successfully created.
dscli> unfreezeflash 50 51
Date/Time: 2011年5月17日 下午03時13分16秒 IBM DSCLI Version: 5.3.1.172 DS: IBM.2107-75TXXXX
CMUC00172I
unfreezeflash: FlashCopy consistency group for logical subsystem 50:
successfully reset.
CMUC00172I
unfreezeflash: FlashCopy consistency group for logical subsystem 51:
successfully reset.
立刻退出online backup模式
SQL> alter database end backup; #### 在mkflash沒有完成的時候就執行這個命令。
System altered.
不斷檢視flashcopy的複製進度
dscli> lsflash -l 5000-8200
Date/Time: 2011年5月17日 下午03時13分32秒 IBM DSCLI Version: 5.3.1.172 DS: IBM.2107-75TXXXX
ID SrcLSS SequenceNum Timeout ActiveCopy
Recording Persistent Revertible SourceWriteEnabled TargetWriteEnabled
BackgroundCopy OutOfSyncTracks DateCreated Da
teSynced State AllowTgtSE
5000:8000 50 0
60 Enabled Enabled
Enabled Disabled Enabled Enabled Enabled 287952 Tue May 17 15:31:38 CST 2011 Tue May
17 15:31:38 CST 2011 Valid Disabled
5001:8001 50 0
60 Enabled Enabled
Enabled Disabled Enabled Enabled Enabled 287976 Tue May 17 15:31:38 CST 2011 Tue May
17 15:31:38 CST 2011 Valid Disabled
5002:8002 50 0
60 Disabled Enabled
Enabled Disabled Enabled Enabled Enabled 327680 Tue May 17 15:31:38 CST 2011 Tue May
17 15:31:38 CST 2011 Valid Disabled
5100:8100 51 0
60 Enabled Enabled
Enabled Disabled Enabled Enabled Enabled
287136 Tue May 17
15:31:38 CST 2011 Tue May 17 15:31:38 CST 2011 Valid Disabled
5101:8101 51 0
60 Enabled Enabled
Enabled Disabled Enabled Enabled Enabled 288000 Tue May 17 15:31:38 CST 2011 Tue May
17 15:31:38 CST 2011 Valid Disabled
5102:8102 51 0
60 Disabled Enabled
Enabled Disabled Enabled Enabled Enabled 327680 Tue May 17 15:31:38 CST 2011 Tue May
17 15:31:38 CST 2011 Valid Disabled
複製的空間大小為120G,DS8100完成120G的複製工作,大概需要7分鐘。在flashcopy複製資料期間可以同步進行下面的插入資料的操作。
1.1.6 插入實驗資料,生成兩個歸檔日誌檔案,記載SCN
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> /
已建立64行。
SQL> commit;
提交完成。
SQL> select count(1) from test01;
COUNT(1)
----------
128
在表test01裡插入了128條記錄後,進行一次歸檔日誌的切換,將這個變化儲存到歸檔日誌檔案中。
SQL> conn / as sysdba
Connected.
SQL> alter system switch logfile;
System altered.
SQL> host
$ ls -lt /archivelog
total 148552
-rw-r----- 1 oracle
oinstall 76055552 May 17 15:22 1_18_750759569.dbf
drwxr-xr-x 2 oracle
dba 256 May 05 04:09
lost+found
可以看到在/archivelog目錄下增加了一個歸檔日誌檔案,檔名稱為:1_18_750759569.dbf
再次向aidu.test01表中插入記錄
SQL>conn aidu/*******
Connected.
SQL> insert into test01(id,name) select id+(select count(1) from test01),name from test01;
128 rows created.
SQL> /
256 rows created.
SQL> /
512 rows created.
SQL> select count(1) from test01;
COUNT(1)
1024
SQL> conn / as sysdba
Connected.
SQL> alter system switch logfile;
System altered.
SQL> host
$ ls -lt /archivelog
total 148784
-rw-r----- 1 oracle
oinstall 118784 May 17 15:24 1_19_750759569.dbf
-rw-r----- 1 oracle
oinstall 760555 May 17 15:22 1_18_750759569.dbf
drwxr-xr-x 2 oracle
dba 256 May 05 04:09
lost+found
可以看到在/archivelog目錄下增加了一個歸檔日誌檔案,檔名稱為:1_19_750759569.dbf
SQL>alter system switch logfile;
System altered.
SQL> select checkpoint_change# from v$database;
CHECKPOINT_CHANGE#
453645
SQL> select first_change#,next_change#,name,sequence# from v$archived_log;
FIRST_CHANGE#
NEXT_CHANGE# NAME SEQUENCE#
-------------
------------ --------------------------------------------- ----------
453962 453994
/archivelog/1_17_750759569.dbf 17
453994 454599
/archivelog/1_18_750759569.dbf 18
454599 454634
/archivelog/1_19_750759569.dbf 19
1.1.7 檢查FLASHCOPY的進度,直至FLASHCOPY 完成複製
檢查mkflash命令是否完成,看到下面的結果就表示複製完成了。
dscli> lsflash -l 1000-9000
Date/Time: 2011年5月18日 上午10時17分07秒 IBM DSCLI Version: 5.3.1.172 DS: IBM.2107-75TC601
CMUC00234I lsflash: No
Flash Copy found.
1.1.8 關閉資料庫,模擬災難發生
1.1.8.1 插入最後的特徵記錄,停止資料庫執行
SQL> conn aidu/aidutest
Connected.
SQL> insert into test01(id,name) select id+(select count(1) from test01),name from test01;
1024 rows created.
SQL> commit;
Commit complete.
SQL> conn / as sysdba
Connected.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut
down.
最後插入1024條記錄,但不切換archivelog,只是保留在redo檔案中。Redo檔案的內容在本實驗中將無法恢復。
1.1.8.2 解除安裝和刪除VG,刪除相關hdisk,vpath等裝置
# varyoffvg testvg
# exportvg testvg
# rmdev -dl fcs0 -R
。。。。。。
hdisk25 deleted
sfwcomm0 deleted
fscsi0 deleted
fcs0 deleted
# rmdev -dl fcs1 -R
fcnet1 deleted
。。。。。。
sfwcomm1 deleted
fscsi1 deleted
fcs1 deleted
# rmdev -dl dpo -R
vpath0 deleted
vpath1 deleted
vpath2 deleted
vpath3 deleted
vpath4 deleted
vpath5 deleted
dpo deleted
# lspv
hdisk0
00c87badb8db2ba6
rootvg active
hdisk1
00c87bad75ee70a9
rootvg active
# lsvg
rootvg
磁碟主機中只有rootvg,儲存資料庫資料的VG被刪除,模擬了發生了儲存損壞的災難情況。
1.1.9 在DS8100上,取消主機訪問5000-5102的路徑,增加主機訪問8000-8102的路徑
dscli> chvolgrp -action remove -volume 5000-5002,5100-5102 V4
Date/Time: 2011年5月17日 下午04時00分49秒 IBM DSCLI Version: 5.3.1.172 DS: IBM.2107-75TXXXX
CMUC00031I chvolgrp: Volume group V4 successfully
modified.
dscli> chvolgrp -action add -volume 8000-8002,8100-8102 V4
Date/Time: 2011年5月17日 下午04時01分11秒 IBM DSCLI Version: 5.3.1.172 DS: IBM.2107-75TXXXX
CMUC00031I chvolgrp: Volume group V4 successfully modified.
未完,下一章節見http://djb1008.itpub.net/post/42280/518102
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/32980/viewspace-1050092/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用FLASHCOPY+資料庫歸檔日誌檔案進行資料庫不完整恢復技術實施方案(2 /2)資料庫
- 使用冷備份與冷備份後的資料庫歸檔日誌檔案進行資料庫不完整恢復資料庫
- 丟失已歸檔日誌檔案下恢復資料庫資料庫
- Oracle叢集資料庫中恢復歸檔日誌Oracle資料庫
- 只有.dbf資料檔案進行資料庫恢復資料庫
- oracle歸檔日誌丟失後的資料庫恢復Oracle資料庫
- SQL Server資料庫多資料檔案恢復技術SQLServer資料庫
- 無歸檔日誌恢復rman資料
- 兩個日誌組未能歸檔之後恢復資料庫資料庫
- Oracle資料庫恢復:歸檔日誌損壞案例一則Oracle資料庫
- 建立資料庫檔案-日誌檔案-次要資料庫檔案資料庫
- REDO日誌損壞,非歸檔模式資料檔案恢復模式
- 非歸檔模式恢復資料庫模式資料庫
- 分析Oracle資料庫日誌檔案(1)Oracle資料庫
- 分析Oracle資料庫日誌檔案(2)Oracle資料庫
- 資料庫資料恢復-SQL SERVER資料庫檔案大小變為“0”的資料恢復方案資料庫資料恢復SQLServer
- 對歸檔模式下CLEAR 未歸檔日誌後恢復資料庫的一點看法模式資料庫
- Sqlserver系統資料庫和使用者資料庫日誌檔案全部丟失的恢復SQLServer資料庫
- 缺少歸檔日誌,ORACLE資料庫恢復使用_allow_resetlogs_corruption引數Oracle資料庫
- oracle RMAN 非歸檔資料庫恢復Oracle資料庫
- 分析Oracle資料庫日誌檔案(1)(轉)Oracle資料庫
- 分析Oracle資料庫日誌檔案(1) [轉]Oracle資料庫
- 測試在丟失歸檔日誌的情況下,跳過部分歸檔日誌進行資料恢復資料恢復
- 【資料庫資料恢復】MongoDB資料庫檔案損壞的資料恢復案例資料庫資料恢復MongoDB
- 沒備份,歸檔日誌存在,丟失資料檔案的恢復
- 歸檔路徑更改後,如何對資料庫進行恢復(轉)資料庫
- SQL資料庫怎麼進行資料歸檔和歸檔管理?SQL資料庫
- RMAN資料庫恢復 之歸檔模式有(無)備份-丟失資料檔案的恢復資料庫模式
- Oralce資料庫關閉歸檔日誌並且刪除歸檔日誌資料庫
- 教你自動恢復MySQL資料庫的日誌檔案(binlog)MySql資料庫
- 丟失當前current重做日誌檔案下恢復資料庫資料庫
- 解決Oracle資料庫日誌檔案丟失恢復問題Oracle資料庫
- RAC環境備份歸檔日誌和RMAN恢復啟動資料庫資料庫
- 【資料庫資料恢復】透過恢復NDF檔案修復資料庫的資料恢復過程資料庫資料恢復
- 資料庫備份與恢復(使用歸檔後滾)資料庫
- 使用RMAN備份集和過時的控制檔案進行資料庫的恢復(1/2)資料庫
- Bak檔案恢復到資料庫資料庫
- 歸檔資料庫中的不可恢復操作資料庫