oracle的resetlogs機制
alter database open resetlogs 這個命令我想大家都很熟悉了,那有沒有想過這個resetlogs選項為什麼要用?什麼時候用?它的原理機制是什麼?他都起哪些作用?
我們都知道資料在啟動時候是要做一致性檢查的,oracle在open階段要做兩次檢查
1. 檢查資料檔案頭的檢查點計數(checkpoint cnt)是否和控制檔案的檢查點計數(checkpoint cnt)一致。目的是確認資料檔案是否來自同一版本,而不是從備份中恢復的。如果這一步檢查透過,就進行第二步檢查。
2. 檢查資料檔案頭的開始scn和控制檔案中記錄該檔案的結束scn是否一致。如果資料檔案頭的開始scn和控制檔案中該檔案的結束scn相等,那說明這個資料檔案就不需要恢復,否則就要恢復檔案。
如果以上兩步檢查都透過,那就可以正常開啟資料庫,鎖定資料檔案,同時將控制檔案中每個資料檔案的結束scn設定無窮大。
我們在某些條件下開啟資料,會提示讓用resetlogs選項open資料庫,為什麼要用resetlogs呢?它是幹嘛用的呢?問號一大堆了吧,
下面來具體分析下。
resetlogs的作用
1、防止陳舊的資料進入資料庫(保證資料庫的一致性),這也就是為什麼在用resetlogs開啟資料庫,一定要立即對資料庫做個全備。
2、在控制檔案,data file header,redo log header裡儲存”resetlogs data“,當open resetlogs被執行時,可以透過這些內容檢查一致性。
什麼時候用resetlogs
1. 不完全恢復
2. 用備份的控制檔案恢復
3. 新建立的控制檔案來恢復
resetlogs的原理機制
resetlogs是如何來保證開啟資料庫是一致的呢?
1)在open resetlogs時,oracle要對比檢查控制檔案和資料字典file$,如果一個資料檔案在file$中存在,但在控制檔案中不存在,那在控制檔案中將建立一個這個檔案條目(MISSINGnnn ‘nnn’是十進位制的file_id),同時這個檔案被標記為離線並需要恢復。如果實際中這個檔案存在的話,可以透過如下sql更改到正確的檔名。
sql> alter database rename file 'MISSINGnnn' to '
然後資料檔案被恢復,online。
2)如果一個資料檔案存在控制檔案中,而不在資料字典file$中,那麼直接把控制檔案中這個檔案的記錄條目刪除(oracle認為file$檔案是正確的,要以它為準)。
3)當用舊的備份控制檔案恢復的時候,如果有資料檔案不在控制檔案中註冊(會提示控制檔案比較舊的錯誤),那就不得不重建資料檔案,以使資料檔案註冊到控制檔案中,然後系統會自動利用redo/archivelog恢復這個資料檔案。
在保證控制檔案和file$檔案內容一致之後,oracle還有做如下檢查才能open resetlogs
4)資料檔案的版本要小於當前資料庫的版本(counter)。
5)offline的資料檔案必須被online或者直接drop。
6)所有的資料檔案不能設定fuzzy bit,所有的資料檔案要有相同的檢查點(checkpoint SCN)。
到目前為止,open resetlogs的前提條件都已經滿足,resetlogs究竟做了哪些工作呢?(重新使用redo log)
1)所有的online logfile 的資訊重新被放置在控制檔案中。並且還要為有效的thread挑選一個logfile檔案作為current logfile
2)log header被更新為log seq#
3)所有的online的資料檔案頭被新的checkpoint和新的‘resetlogs data’更新,offline的資料檔案被標記為需要媒體恢復。
resetlogs data:當前的scn和counter被稱作”resetlogs data“
如果oracle資料庫一致性檢查失敗的,那資料庫是不允許被open的,即 open resetlogs不成功。但也不是絕對不能open,可以透過隱含引數“_allow_resetlogs_curruption”,繞過oracle的一致性檢查,但這樣會引起資料庫的不一致(檔案可能有不同的scn或有fuzzy bit設定),如果open後,資料庫一定要rebuild (建議ANALYZE TABLE ...VALIDATE STRUCTURE CASCADE;或者imp/exp )
-------end------
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29654823/viewspace-1361528/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle的resetlogs機制淺析Oracle
- 轉:oracle的resetlogs機制淺析Oracle
- Oracle資料恢復:強制Resetlogs的可能資料損失Oracle資料恢復
- oracle中的鎖機制Oracle
- oracle的認證機制Oracle
- ORACLE的工作機制Oracle
- Oracle鎖機制Oracle
- ORACLE scn 機制Oracle
- oracle 鎖機制Oracle
- ORACLE的工作機制-1Oracle
- ORACLE的工作機制-2Oracle
- ORACLE的工作機制-3Oracle
- ORACLE的工作機制-4Oracle
- ORACLE的工作機制-5Oracle
- ORACLE的工作機制(簡)Oracle
- ORACLE golden gate 機制OracleGo
- Oracle SCN機制解析Oracle
- oracle鎖機制研究Oracle
- mySql\oracle分頁機制MySqlOracle
- Oracle回收站機制Oracle
- ORACLE鎖機制-轉載Oracle
- Oracle SCN機制解析(zt)Oracle
- ZT Oracle SCN機制解析Oracle
- oracle工作機制(1)Oracle
- oracle工作機制(2)Oracle
- zt_oracle undo機制Oracle
- ORACLE DML鎖定機制Oracle
- Oracle Redo 並行機制Oracle Redo並行
- Oracle安全機制--審記Oracle
- oracle工作機制(轉)Oracle
- 轉:Oracle SCN機制解析Oracle
- ORACLE 資料庫中的鎖機制Oracle資料庫
- oracle的鎖和並行機制薦Oracle並行
- Oracle的鎖機制歸納總結Oracle
- Oracle資料庫恢復之resetlogsOracle資料庫
- ORACLE鎖機制深入理解Oracle
- oracle工作機制導圖Oracle
- Oracle例項恢復機制Oracle