【02】Oracle資料庫的例項啟動關閉詳解
啟動
資料庫的啟動分為三個階段:
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
資料庫的啟動分為三個階段:
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle 資料庫例項啟動關閉過程Oracle資料庫
- 例項管理及資料庫的啟動關閉資料庫
- oracle資料庫的啟動與關閉過程詳解Oracle資料庫
- oracle 例項啟動和關閉解讀Oracle
- Oracle例項的啟動和關閉Oracle
- 2 Day DBA-管理Oracle例項-關閉和啟動Oracle例項-使用OEMDC關閉和啟動Oracle例項Oracle
- Oracle資料庫的啟動與關閉Oracle資料庫
- Oracle資料庫的啟動和關閉Oracle資料庫
- 2 Day DBA-管理Oracle例項-關於例項的啟動和關閉-關於例項啟動Oracle
- 2 Day DBA-管理Oracle例項-關於例項的啟動和關閉-關於例項關閉Oracle
- mongodb關閉資料庫例項MongoDB資料庫
- Oracle單例項+ASM啟動與關閉Oracle單例ASM
- ORACLE資料庫的啟動和關閉(轉)Oracle資料庫
- 3.1.5.1 關於啟動資料庫例項資料庫
- Oracle資料庫AWR的使用例項詳解Oracle資料庫
- 2 Day DBA-管理Oracle例項-關於例項的啟動和關閉-管理啟動和關閉許可權Oracle
- 隨系統啟動關閉的oracle資料庫Oracle資料庫
- oracle 啟動 關閉步驟詳解Oracle
- Oracle資料庫例項啟動步驟分析Oracle資料庫
- Oracle Restart啟動資料庫例項故障一例OracleREST資料庫
- ORACLE資料庫的啟動和關閉之二(轉)Oracle資料庫
- Oracle資料庫的幾種啟動和關閉方式Oracle資料庫
- 深刻理解Oracle資料庫的啟動和關閉Oracle資料庫
- 深刻理解 oracle 資料庫的啟動和關閉Oracle資料庫
- 資料庫自動啟動關閉資料庫
- 資料庫啟動和關閉資料庫
- 啟動/關閉與冷備份Oracle資料庫Oracle資料庫
- ASM CRS 例項啟動和關閉ASM
- RAC 資料庫的啟動與關閉資料庫
- oracle資料庫的啟動關閉與各種服務Oracle資料庫
- 深刻理解Oracle資料庫的啟動和關閉(轉)Oracle資料庫
- rac 管理 啟動關閉資料庫資料庫
- dataguard standby資料庫的關閉和啟動資料庫
- Oracle11g RAC在例項關閉後自動在啟動例項上歸檔Oracle
- Oracle - 啟動、關閉、檢視例項、使用者解鎖、連線數量、資料庫資訊、命令列顯示設定Oracle資料庫命令列
- 通過SQL*Plus遠端啟動Oracle資料庫例項SQLOracle資料庫
- oracle資料庫不同啟動命令和關閉命令全面解析Oracle資料庫
- 3.1.5.4 啟動例項並mount 資料庫資料庫