Oracle例項恢復

2021-08-10 16:26:57 字數 3144 閱讀 2841

例項恢復會在資料庫沒有安全關閉的情況下會發生,在資料庫shutdown abort和資料庫異常

down

掉,或者斷電會發生例項恢復。例項恢復的原因就是,在資料庫

down

掉那一刻,有部分修改過的資料沒有寫到磁碟上面,雖然資料在記憶體裡面丟掉了,但是

redo

寫到磁碟上面了,所以例項恢復用

redo

將丟掉的資料恢復,那麼資料庫就恢復了,就可以開啟了。

在出現掉電這種情況,可能連例項恢復都恢復不了,雖然redo日誌會很快的刷到磁碟上面,但是總有乙個時間是還沒來得及刷到磁碟上面,如果非常不恰巧,日誌還沒有寫到磁碟的那一瞬間掉電了,那麼這個時候資料也就恢復不了了,因為保護資料的

redo

沒有寫入到磁碟上面。這個情況下資料庫就可能壞了。

例項恢復是乙個自動的過程,不需要人工的干預,控制檔案的乙個作用就是檢查資料庫檔案的各個版本和儲存在控制檔案裡面的版本是不是一致,如果不一致就需要例項恢復。

已連線。

sql> shutdown abort;   突然間將資料庫關閉,沒有將記憶體裡面的髒資料寫到磁碟上面

oracle 例程已經關閉。

這種方式關閉資料庫那麼資料庫在重新啟動的時候就會有乙個例項恢復的過程。

sql> startup nomount;    oracle啟動的第乙個過程,將例項啟動(其實就是作業系統給

oracle

分配了一些記憶體,同時

oracle

將後台的一些程序啟動)

ora-32004: obsolete or deprecated parameter(s) specified for rdbms instance

oracle 例程已經啟動。

total system global area 3390558208 bytes

fixed size                  2180464 bytes

variable size            2214595216 bytes

database buffers         1157627904 bytes

redo buffers               16154624 bytes

sql> alter database mount;  這個階段就是在配置檔案裡面去找控制檔案,將控制檔案掛載

資料庫已更改。

第乙個階段和第二個階段都不會發生例項恢復,都不會檢查資料庫的完整性,只有在第三個階段才會去檢查資料庫的完整性。如果完整性有問題了就需要恢復了。

sql> alter database open;  第三個階段將資料庫開啟發生例項恢復

資料庫已更改。

檔案頭:每乙個資料檔案頭記錄著檔案更新的資訊,在資料庫裡面更新的資訊通常使用scn來表示,

scn記錄著

oracle

的變化。

恢復實際上就是讀redo log裡面資訊。

前滾,即redo的過程不是執行

sql的過程,實際上是乙個資料塊修正的過程,因為資料庫還沒有開啟,

sql語句都沒有辦法解析,所以使用

redo

在資料塊上面進行更新。在將所有可以應用的

redo

應用完之後,這個時候資料庫就可以開啟了。資料庫開啟就可以使用了,這個時候就有了回滾的問題,在資料庫非正常關閉,有些事務還沒有提交,這個時候就突然斷電了,可能這個事務將資料修改了但是沒有提交,重啟之後就要將這些沒有提交的事務回滾。回滾就將回滾段相應的資料拿回來就行了。回滾是在資料庫開啟之後做的,而不是先前滾再回滾最後開啟資料庫。

在將資料庫shoutdown abort之後,在

start up

之後,去資料庫

alter

檔案裡面看就會看到上面那些例項恢復的資訊。在使用

shutdown immediately

就不會出現上面的資訊,不需要例項恢復,因為將記憶體裡面的髒資料寫到磁碟上面了。

11g以前

oracle

的alter

檔案是在

bdump

目錄下呢。

oracle 11g

一改常態以

xml與傳統的文字兩種格式提供

alert

日誌。

oracle 11g

新的日誌的位置由

automatic diagnostic respository(adr)

決定。 可以通過新的初始化引數

diagnostic_dest

控制adr base

的位置。 顯示

diagnostic_dest

的位置

show parameter diagnostic_dest;

查詢兩種日誌的位置 查詢

xml檔案的目錄

select value from v$diag_info where name='diag alert';

查詢文字檔案的目錄 select value from v$diag_info where name='diag trace';

也可以通過查詢background_dump_dest來檢視

oracle

的文字日誌

show paramter backgound_dump_dest

; 或是

select value from v$parameter where name=』background_dump_dest』;

oracle在每一次啟動的過程當中,都會去做一致性的檢查,如果發現有問題會去做例項恢復。

Oracle例項恢復

oracle例項恢復原理 首先從事物說起,當執行update開啟乙個事物的時候,首先需要在buffer cache中找到可用的塊 block 更新資料,然後構造cr塊,將update之前的資料放入到undo中,同時會在log buffer內寫日誌,log buffer內資料每隔3秒通過lgwr程序將...

Oracle 例項恢復詳解 MTTR

mttr mean time to recover mtbf mean time between failures 先要明白一些概念 日誌檔案中的資訊為了當系統出現failure時,保證事務可以恢復。當使用者事務完成發出commit時,總是先等待lgwr程序將事務所需的redo資訊寫到日誌檔案 之前...

(2010 07 14)Oracle例項恢復詳解

又有一段時間沒接觸oracle了,也就是沒有天天都保證乙個小時以上的oracle學習時間,慚愧,意志力不夠。感覺oracle的學習真的是乙個比較長期的過程,在其中的學習過程中會經歷沮喪,恐懼,甚至受挫感,我想這就是我這整整一年oracle的學習體會吧。然而oracle的學習也是乙個柳暗花明的過程,在...