Oracle啟動模式及其出現(xiàn)的問題探討
當(dāng)我們發(fā)出startup命令時,Oracle將開始啟動,如果成功啟動的話,這個實(shí)例啟動的過程分為3個階段。
1.Oracle啟動模式的nomount階段
nomount,在這個啟動階段里,Oracle主要做的事情,就是找到相關(guān)的啟動參數(shù)文件,并且打開啟動參數(shù)文件,根據(jù)啟動參數(shù)里記錄的參數(shù)值。
啟動實(shí)例,并且啟動成功的話,打開告警文件alert_.ora文件,這個文件默認(rèn)在ORACLE_BASE/admin/SID /bdump下,并且記錄相關(guān)的啟動信息。如果在startup里指定了pfile=''的話,Oracle將從你指定的文件作為啟動參數(shù)文件,如果是沒有指定pfile的話,Oracle會先去默認(rèn)目錄($ORACLE_HOME/)下找spfileSID.ora,如果沒有找到,則找 spfile.ora,如果還是沒有,找initSID.ora,這個就是以前的靜態(tài)參數(shù)文件了,如果沒有則找init.ora;如果沒有找到的話,這時候,啟動就會有,找不到參數(shù)文件的錯誤,同時會動態(tài)注冊實(shí)例名到監(jiān)聽服務(wù)里。
當(dāng)然,在使用startup pfile=''前,我們需要先用create pfile from spfile;把實(shí)例的動態(tài)參數(shù)文件先export成靜態(tài)的文本參數(shù)文件,然后根據(jù)合適的參數(shù)修改這個文件,修改好了一個在用這個pfile啟動。
2.Oracle啟動模式的mount階段
當(dāng)達(dá)到了nomount階段以后,數(shù)據(jù)庫就只能一步一步的來進(jìn)行啟動了,他的下一個啟動的階段,就是mount。我們通過alter database mount;來從nomount階段或者通過startup mount來到達(dá)這個階段,到達(dá)這個階段,Oracle從啟動參數(shù)文件里找到控制文件的路徑參數(shù)值,找到所有的控制文件,然后打開讀取控制文件的信息,控制文件里記錄了各種表空間文件,日志文件的信息,以及數(shù)據(jù)庫的字符集,其實(shí)就是控制文件里的記錄(控制文件是可以指定多個的,只要有個一個不能成功讀取,這個階段將會失敗),這時,數(shù)據(jù)庫已經(jīng)讀取了相關(guān)系統(tǒng)文件的信息,也讀取了字符集信息,但是僅僅只是讀取,這些系統(tǒng)文件,并沒有真正的加載到數(shù)據(jù)庫里。
曾經(jīng)有人啟動到mount的時候,出現(xiàn)問題,最后一看原來是control文件這里已經(jīng)被刪除掉了,解決的辦法,就是從備份的控制文件來一個過來,然后做恢復(fù)就可以了。如果沒有備份,在nomount下,新建一個controlfile,就可以了。
3.Oracle啟動模式的open階段
mount階段結(jié)束后,數(shù)據(jù)庫體系的所有信息已經(jīng)讀取全了,我們知道了redo文件,數(shù)據(jù)文件的信息,但是還沒有加載,到open狀態(tài),數(shù)據(jù)庫讀取所有的文件,如果有一個文件不能成功讀取,open階段就會失敗。這時候,我們能夠解決的就是通過錯誤的提示,進(jìn)行數(shù)據(jù)恢復(fù),或者錯誤排查。
這一個階段的錯誤的各種原因最多,處理起來的方式也相對于前面的要復(fù)雜的多,不過基本上都是和數(shù)據(jù)文件,日志文件缺失,數(shù)據(jù)scn不一致,等等有關(guān),這時我們需要做的就是根據(jù)錯誤的提示來進(jìn)行相應(yīng)的數(shù)據(jù)恢復(fù),和數(shù)據(jù)排查,這塊是數(shù)據(jù)庫恢復(fù)最有趣的地方。
【編輯推薦】