使用FLASHCOPY+資料庫歸檔日誌檔案進行資料庫不完整恢復技術實施方案(1 /2)

djb1008發表於2011-05-19

1.1 應用場景

1.1.1 應用場景條件

u 使用FLASHCOPY功能,生成一個全庫資料的時間點複製。

u 擁有從那個時間點開始的所有的資料庫歸檔日誌檔案。

u 資料庫使用的儲存完全損壞,無法恢復,資料庫當機。

1.1.2 應用場景目標

使用FLASHCOPY 生成的儲存的時間點資料,進行資料庫的恢復,步驟和原理和使用資料庫冷備份(cold backup)進行資料庫恢復是一樣的。但這樣的恢復只能夠恢復到生成flashcopy的時間點。當我們還有很多這個時間點後歸檔日誌檔案的前提下,如何才能恢復更多的資料呢?

使用FLASHCOPY生成的時間點全庫資料和時間點後的資料庫歸檔日誌檔案,使用特殊的方法,進行資料庫恢復,資料庫恢復到最後一個歸檔日誌檔案確定的時間點。

[@more@]

1.1 實驗內容

1.1.1 實驗總體步驟

實驗總體步驟如下:

1. 啟動資料庫(歸檔模式),資料庫資料檔案是建立在DS810050005102 FBVOL上。

2. 記錄資料庫SCN,進行FLASHCOPY,FBVOL5000-5102,目標FBVOL80008102

3. 在資料庫上新增特徵記錄,並進行歸檔日誌切換。

4. 關閉資料庫,刪除原來的儲存裝置,模擬災難發生。

5. 檢查FLASHCOPY的進度,直至FLASHCOPY 完成複製工作。

6. DS8100上,取消主機訪問50005102的路徑,增加主機訪問80008102的路徑

7. 在主機上識別80008100FBVOL,匯入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

其中:50005102flashcopy的源盤,80008102flashcopy的目標盤。每個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: 2011517 下午031301 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: 2011517 下午031316 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: 2011517 下午031332 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

複製的空間大小為120GDS8100完成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: 2011518 上午101707 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上,取消主機訪問50005102的路徑,增加主機訪問80008102的路徑

dscli> chvolgrp -action remove -volume 5000-5002,5100-5102 V4

Date/Time: 2011517 下午040049 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: 2011517 下午040111 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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章