轉:oracle的resetlogs機制淺析
author:skate
time:2010/09/07
oracle的resetlogs機制淺析
alter database open resetlogs 這個命令我想大家都很熟悉了,那有沒有想過這個resetlogs選項為什麼要用?什麼時候用?
它的原理機制是什麼?他都起哪些作用?
我們都知道資料在啟動時候是要做一致性檢查的,oracle在open階段要做兩次檢查
1. 檢查資料檔案頭的檢查點計數(checkpoint cnt)是否和控制檔案的檢查點計數(checkpoint cnt)一致。目的是確認資料檔案
是否來自同一版本,而不是從備份中恢復的。如果這一步檢查通過,就進行第二步檢查
2. 檢查資料檔案頭的開始scn和控制檔案中記錄該檔案的結束scn是否一致。如果資料檔案頭的開始scn和控制檔案中該檔案的結束scn
相等,那說明這個資料檔案就不需要恢復,否則就要恢復檔案
如果以上兩步檢查都通過,那就可以正常開啟資料庫,鎖定資料檔案,同時將控制檔案中每個資料檔案的結束scn設定無窮大。
我們在某些條件下開啟資料,會提示讓用resetlogs選項open資料庫,為什麼要用resetlogs呢?它是幹嘛用的呢?問號一大堆了吧,
下面來具體分析下。
resetlogs的作用
防止陳舊的資料進入資料庫(保證資料庫的一致性),這也就是為什麼在用resetlogs開啟資料庫,一定要立即對資料庫做個全備。
在控制檔案,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/21584437/viewspace-716825/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MVVM機制淺析MVVM
- Libco Hook 機制淺析Hook
- Timer機制原始碼淺析原始碼
- PostgreSQL MVCC快照機制淺析SQLMVC
- 淺析Vue 中 $nextTick 機制Vue
- js執行機制淺析JS
- 淺析雙親委派機制
- NX實現機制淺析
- 淺析JavaScript的事件迴圈機制JavaScript事件
- JavaScript的事件迴圈機制淺析JavaScript事件
- Webpack 模組打包機制淺析Web
- 微前端無界機制淺析前端
- 淺析注意力(Attention)機制
- Linux系統呼叫機制淺析Linux
- 淺析Dubbo的SPI擴充套件機制套件
- 淺析 PHP7 的垃圾回收機制PHP
- 淺析java記憶體管理機制Java記憶體
- [玩轉MySQL之二]MySQL連線機制淺析及運維MySql運維
- webrtc QOS筆記四 Nack機制淺析Web筆記
- IO多路複用與epoll機制淺析
- 淺析Windows的訪問許可權檢查機制Windows訪問許可權
- 簡單案例淺析JS執行緒機制JS執行緒
- 技術淺析:前端沙箱資料安全保護的機制前端
- 淺談文字詞向量轉換的機制embedding
- 淺析eBay聯盟營銷的上下文廣告機制
- Oracle資料庫恢復之resetlogsOracle資料庫
- MySQL多版本併發控制機制(MVCC)-原始碼淺析MySqlMVC原始碼
- 完美的一天:遊戲敘事機制(再)淺析遊戲
- 淺析Oracle(rownum)和Mysql(limit)分頁的區別OracleMySqlMIT
- 使用CoordinatorLayout過程中遇到的兩個問題以及淺析CoordinatorLayout工作機制
- 淺談 LiveData 的通知機制LiveData
- 淺析oracle b-tree index搜尋原理OracleIndex
- Java程式設計技術之淺析SPI服務發現機制Java程式設計
- 簡析Windows訊息機制Windows
- VMware 與 SmartX 分散式儲存快取機制淺析與效能對比分散式快取
- 淺談Kotlin的Checked Exception機制KotlinException
- 淺談JS事件機制與React事件機制JS事件React
- 計算機網路淺析(二)計算機網路
- 淺談Java的反射機制和作用Java反射