日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Oracle的resetlogs机制浅析

發布時間:2023/12/19 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle的resetlogs机制浅析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

alter database open resetlogs 這個命令我想大家都很熟悉了,那有沒有想過這個resetlogs選項為什么要用?什么時候用?它的原理機制是什么?他都起哪些作用?


我們都知道數據在啟動時候是要做一致性檢查的,oracle在open階段要做兩次檢查


(1)檢查數據文件頭的檢查點計數(checkpoint cnt)是否和控制文件的檢查點計數(checkpoint cnt)一致。目的是確認數據文件是否來自同一版本,而不是從備份 中恢復的。如果這一步檢查通過,就進行第二步檢查。


(2)檢查數據文件頭的開始scn和控制文件中記錄該文件的結束scn是否一致。如果數據文件頭的開始scn和控制文件中該文件的結束scn相等,那說明這個數據文件就不 需要做 instance 恢復,否則就要恢復文件


如果以上兩步檢查都通過,那就可以正常打開數據庫,鎖定數據文件,同時將控制文件中每個數據文件的結束scn設置無窮大。


我們在某些條件下打開數據,會提示讓用resetlogs選項open數據庫,為什么要用resetlogs呢?它是干嘛用的呢?問號一大堆了吧,下面來具體分析下。



1、resetlogs的作用


防止陳舊的數據進入數據庫(保證數據庫的一致性),這也就是為什么在用resetlogs打開數據庫,一定要立即對數據庫做個全備。


在控制文件,data file header,redo log header里存儲”resetlogs data“,當open resetlogs被執行時,可以通過這些內容檢查一致性。




2、什么時候用resetlogs


(1)不完全恢復


(2)用備份的控制文件恢復


(3)新創建的控制文件來恢復




3、resetlogs的原理機制


resetlogs是如何來保證打開數據庫是一致的呢?


1)在open resetlogs時,oracle要對比檢查控制文件和數據字典file$,如果一個數據文件在file$中存在,但在控制文件中不存在,那在控制文件中將創建一個這個文件條目(MISSINGnnn ‘nnn’是十進制的file_id),同時這個文件被標記為離線并需要恢復。如果實際中這個文件存在的話,可以通過如下sql更改到正確的文件名。


sql> alter database rename file 'MISSINGnnn' to '<filename>';


然后數據文件被恢復,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 )


oracle視頻教程請關注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html

轉載于:https://blog.51cto.com/19880614/1254152

總結

以上是生活随笔為你收集整理的Oracle的resetlogs机制浅析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。