【02】Oracle資料庫的例項啟動關閉詳解

神諭丶發表於2015-01-28
啟動
資料庫的啟動分為三個階段:
nomount:啟動資料庫例項。(查詢引數檔案)
mount:啟動資料庫例項並載入資料檔案。(查詢控制檔案)
open:啟動資料庫例項,開啟資料檔案

當然也可以直接通過startup來開啟資料庫
可選引數是:
startup (預設為open)
startup nomount
startup mount
startup force(實際上為shutdown abort + startup)

啟動到nomount狀態
SQL> startup nomount
ORACLE instance started.


Total System Global Area 1603411968 bytes
Fixed Size                  2213776 bytes
Variable Size            1174407280 bytes
Database Buffers          419430400 bytes
Redo Buffers                7360512 bytes

實際上就是查詢引數檔案,根據引數檔案的內容(應用引數),建立了instance,併為其分配記憶體,啟動相應的後臺程式。

輸入 show parameter spfile便可查詢使用的是哪個spfile進行的啟動

SQL> show parameter spfile

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      /u01/app/oracle/product/11.2.0
                                                 /db_1/dbs/spfileORCL.ora
其中ORCL是資料庫的sid

若找不到spfile.ora檔案,則將以spfile.ora檔案啟動資料庫。
若找不到spfile.ora檔案,則將以init.ora檔案啟動資料庫。

若上述三者都不在,則oracle將無法啟動。

在上述引數檔案中,至少需要提供db_name才能啟動instance。
其他幾個引數值將會呼叫系統預設值:

SQL> show parameter dump_dest
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
background_dump_dest                 string      /u01/app/oracle/diag/rdbms/orc
                                                 l/ORCL/trace
core_dump_dest                       string      /u01/app/oracle/diag/rdbms/orc
                                                 l/ORCL/cdump
user_dump_dest                       string      /u01/app/oracle/diag/rdbms/orc
                                                 l/ORCL/trace

SQL>show parameter control_files
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_files                        string      /u01/app/oracle/oradata/ORCL/c
                                                 ontrol01.ctl, /u01/app/oracle/
                                                 flash_recovery_area/ORCL/contr
                                                 ol02.ctl


啟動到mount狀態
SQL> alter database mount;

Database altered.

啟動到mount這個過程中,oracle會從控制檔案中獲得資料檔案的位置,這將判斷資料檔案是否存在。
如果不存在,後臺程式將會在告警日誌中記錄檔案缺失資訊。



啟動到open狀態
SQL> alter database open;

Database altered.

啟動到open階段時,oracle會根據控制檔案記錄的資料檔案頭塊及日誌檔案資訊,然後進行檢查點及完整性檢查。
假若不存在問題,則可以開啟資料庫。
反之,存在不一致性或檔案丟失,則需要進行恢復。

在open的時候需要進行很多校驗。
第一次檢查資料檔案頭塊中的checkpoint cnt,這將於控制檔案中的checkpoint cnt做對比,看是否一致。用以確認資料檔案是來自同一版本,而不是從備份中恢復而來。(checkpoint cnt會一直被修改)

第二次檢查資料檔案頭塊的開始scn和控制檔案中記錄的該檔案的結束scn是否一致,如果控制檔案中記錄的結束scn等於資料檔案頭塊開始的scn,則不需要對那個檔案進行恢復。(如果此前異常當機,則結束scn會變成無窮大,資料庫必須執行例項恢復以確保一致性)

最後開啟資料庫,鎖定資料檔案,同時將每個資料檔案的結束scn設定為無窮大。

如果無法鎖定某資料檔案,則會直接返回error,資料庫將停止開啟。
此時會將完整的錯誤資訊和錯誤號寫入告警日誌中。

優先檢查alert_.log,位置可以通過:
show parameter background_dumo_dest來查詢。




關閉

資料庫的關閉實際上是啟動的逆操作,也可以分為三個階段:
close(關閉資料庫到mount)
dismount(解除安裝資料庫到nomount)
shutdown(關閉例項)


在shutdown關閉資料庫時,還有幾個可選引數:
shutdown (預設為normal)
shutdown immediate
shutdown transactional
shutdown abort

normal:
拒絕任何新的會話連線,並等待所有會話斷開。
此方法不常用,因為需要所有的使用者連線斷開才能關閉。

immediate:
拒絕任何新的會話連線,並將所有正在被處理的事務中斷,未提交的事務回滾。
強行斷開所有連線,執行檢查點,將變更資料寫入資料檔案。
此方法常用,但在系統繁忙的時候,有大量事務或大事務執行時,關閉也需要大量時間。

transactional:
拒絕任何新的會話連線,等待未完成的事務完成,拒絕新的事務纏身。
待所有活動事務完成之後,關閉過程和immediate一致。

abort:
立刻終止所有使用者連線、所有事務、立即關閉資料庫。
後果:未完成的事務不會回滾,不執行檢查點。
在下一次啟動資料庫時,資料庫必須進行例項恢復,可能需要更大的等待時間。

其效果類似於伺服器突然斷電,可能會導致出現不一致的情況。

(摘自深入解析oracle
以下場景需要使用abort來關閉:
資料庫或應用異常,其他方式無法關閉資料庫。
因為馬上要到來的斷電或其他維護情況,需要快速關閉資料庫。
啟動異常後需要重新嘗試啟動
當使用shutdown immediate無法關閉時
需要快速重新啟動資料庫
shutdown超時或異常

     
abort之後重啟資料庫需要進行恢復。
啟動時間有時會很長,如果時間允許,可以在關閉之前執行一次:
alter system checkpoint
這樣可以再下次啟動恢復時,需要恢復的資料可以減少。

在通過其他三種方式關閉的過程中,如果等待時間超過1h,則會丟擲:(可能因為個別事務或程式阻塞)
ORA-01013: user requested cancel of current operation


此外,在關閉過程中,使用者發出ctrl+c則關閉也會被取消。

無論是ctrl+c或是等待超時,都會使資料庫進入兩種狀態之一:
可能會正常,可以繼續執行。
也可能會無法正常執行,進入未知狀態。

abort、immediate、transactional、normal四種引數比較:






圖摘自Eygle Gai


p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; line-height: 19.0px; font: 13.0px 'Helvetica Neue'}

作者公眾號(持續更新)


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29773961/viewspace-1417938/,如需轉載,請註明出處,否則將追究法律責任。

相關文章