只讀表空間的恢復問題--預備知識

xuqingwei發表於2010-06-24

1. 預備知識

將表空間設定為只讀,可以防止使用者對錶空間中的資料檔案執行寫入操作。然而,這也使得系統程式同樣無法完成檔案頭的寫入操作。這將對系統在執行checkpointresetlogs之類修改檔案頭的等操作產生影響。

要全面理解只讀表空間的恢復問題,我們首先要搞清楚表空間、資料檔案狀態的改變,與控制檔案之間存在著哪些聯絡:

1.1 控制檔案自動備份

首先,當表空間狀態發生改變時,系統將啟動控制檔案自動備份操作。

sys@STUDY>alter tablespace users read only;

Tablespace altered.

我們來檢視alert.log檔案:

Thu Jun 24 13:05:38 2010

alter tablespace users read only

Thu Jun 24 13:05:38 2010

Starting control autobackup

Control autobackup written to DISK device

handle 'C:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREASTUDYAUTOBACKUP2010_06_24O1_MF_S_722523938_625SX4G5_.BKP'

Completed: alter tablespace users read write

如果alert.log檔案被刪除了也不要緊,我們可以在V$BACKUP_CONTROLFILE_DETAILS檢視中查詢系統自動備份控制檔案的詳細資訊。

sys@STUDY>select btype_key, id1, id2, creation_time from v$backup_controlfile_details;

BTYPE_KEY ID1 ID2 CREATION_TIME

--------- ---------- ---------- -------------------

63 722516269 68 2008-04-22 16:50:16

64 722516931 69 2008-04-22 16:50:16

65 722523938 70 2008-04-22 16:50:16

為了顯示方便,以上結果部分被省略了。

當資料檔案被置為read only後,系統將修改檔案頭,將系統當前的SCN記錄在Checkpoint_change#last_change#中。注意,此處系統並未執行CKPT

sys@STUDY>select file#, checkpoint_change#, last_change#, offline_change#, online_change# from v$datafile;

FILE# CHECKPOINT_CHANGE# LAST_CHANGE# OFFLINE_CHANGE# ONLINE_CHANGE#

---------- -------------- ---------- --------------- --------------

1 2147692 534906 534907

2 2147692 534906 534907

3 2147692 534906 534907

4 2151527 2151527 2145970 2150425

5 2147692 0 0

7 2147692 0 0

8 2147692 0 0

進一步實驗我們可以發現:只要表空間狀態發生改變(online, offlineread only, read write),系統均會自動進行控制檔案的備份操作。

如果我們將資料檔案的狀態設為offline

alter database datafile 4 offline;

alert.log檔案中將記錄,但系統並不進行控制檔案的自動備份。

Thu Jun 24 15:38:27 2010

alter database datafile 4 offline

Thu Jun 24 15:38:27 2010

Completed: alter database datafile 4 offline

下一次重新online資料檔案時:

alter database datafile 4 online;

alert.log檔案中將記錄,並執行控制檔案的自動備份。

Thu Jun 24 15:45:54 2010

alter database datafile 4 online

Thu Jun 24 15:45:54 2010

Starting control autobackup

Control autobackup written to DISK device

handle 'C:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREASTUDYAUTOBACKUP2010_06_24O1_MF_S_722533554_62639MC7_.BKP'

Completed: alter database datafile 4 online

瞭解控制檔案備份的位置,對於我們運用using backup controlfile來實現資料庫的不完全恢復非常重要。如果所有的備份控制檔案都丟失了,那麼只能透過執行控制檔案重建指令碼來完成恢復操作。

1.2 控制檔案記錄資料檔案

對於只讀表空間,由於無法對其進行更改,因此係統假設其不需要恢復,其中的資料檔案並沒有包含在控制檔案中。

sys@STUDY>alter database backup controlfile to trace;

對應的跟蹤檔案中有關資料檔案的程式碼段:

DATAFILE

'C:ORACLEPRODUCT10.2.0ORADATASTUDYSYSTEM01.DBF',

'C:ORACLEPRODUCT10.2.0ORADATASTUDYUNDOTBS01.DBF',

'C:ORACLEPRODUCT10.2.0ORADATASTUDYSYSAUX01.DBF',

'C:ORACLEPRODUCT10.2.0ORADATASTUDYEXAMPLE01.DBF',

'C:ORACLEPRODUCT10.2.0ORADATASTUDYRMAN01.DBF',

'C:ORACLEPRODUCT10.2.0ORADATASTUDYPERFSTATS01.DBF'

可以看到,其中沒有記錄USER01.DBF的資訊。

進一步,我們嘗試將Users表空間變為offline;然後匯出控制檔案,我們發現Users中的資料檔案同樣沒有記錄在控制檔案中。這是由於系統同樣認為離線表空間也同樣不需要恢復。

1.3 小結

如下圖所示,表空間與控制檔案間的關係如下:

表空間狀態控制檔案操作
自動備份記錄資料檔案
offline×
onlineread only×
read write

綜上所述,系統對只讀表空間和離線表空間的恢復過程中的操作是非常類似的。

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/20162/viewspace-1034620/,如需轉載,請註明出處,否則將追究法律責任。

相關文章