oracle資料庫的關閉過程

pingley發表於2012-02-18
oracle資料庫的關閉過程
oracle資料庫在關閉過程中經歷的狀態:
open
close
nomount
shutdown
下面介紹通常情況下一個open的資料庫到shutdown的過程:
1、資料庫close,這時候資料庫還是mount的。oracle資料庫會將SGA中的資料寫入資料檔案與線上重做日誌檔案。接下來關閉線上資料檔案與重做日誌檔案。任何的offline的表空間或者資料檔案都已經被關閉了,這些在closed前offline的表空間或者資料檔案,在下次啟動資料庫的時候會被忽略,還是保持offline的狀態。
2、資料庫unmount,例項還在。但是資料庫控制檔案已經關閉了,這時候例項已經不再和某個資料庫關聯在一起。
3、例項shutdown,oracle例項已經不在記憶體中,oracle後臺程式也不再繼續執行。以上是正常的資料庫關閉過程,如果一個例項被shutdown abort或者oracle系統崩潰,伺服器掉電等,不會完全經歷這些過程。這時候資料庫與例項的關閉是立即的。
oracle資料庫關閉的模式:
擁有sysdba,sysoper特權的使用者可以使用sqlplus或者OEM關閉資料庫.如果使用的是共享服務程式連線到資料庫,是無法關閉資料庫的。在資料庫的關閉過程中,使用者無法與資料庫建立新的會話,使用者會收到提示資訊:ORA-01090: shutdown in progress - connection is not permitted
shutdown的可選模式有 abort,immediate,transactional,normal下面介紹這些關閉模式。
資料庫表現                 abort    immediate    transactional    normal
允許新的使用者會話         no         no             no            no
等待當前會話的終結     no         no             no            yes
等待當前事務的終結     no         no             yes           yes
執行一個checkpoint      no         yes            yes           yes
關閉開啟的檔案    
shutdown abort
這種關閉方式,適合在最緊急的情況下使用,比如其他關閉資料庫的方式都不奏效的情況下,或者你知道伺服器將快掉電了。使用這種方式關閉資料庫是最快的,但是在下次開啟資料庫的時候,需要花費大量的時間來自動執行例項恢復,因為在關閉資料庫的時候,沒有執行checkpoint以保持資料檔案的一致性。也就是說SGA中的資料,沒有被寫入到資料檔案與線上重做日誌檔案。其他關閉資料庫的方式不需要執行例項恢復。
shutdown immediate
這種關閉資料庫的速度是僅次於shutdown abort的方式。在這種關閉方式中,oracle資料庫關閉正在執行的SQL語句,斷開使用者連線,活動的事務被終止,沒有提交的事務被rollback掉。
shutdown transactional
這種關閉資料庫的方式,會阻止使用者產生新的事務,但是會等待當前所有的事務執行完。這種關閉資料庫的方式可能花費比較長的時間,取決於當前事務的大小與長度。當前沒有在執行
事務的會話也會被馬上終結。
shutdown normal
這是預設的關閉資料庫的方式,資料庫會等待所有使用者會話的終結,然後在關閉資料庫,但是這很可能需要長時間的等待。
甚至可以認為這種關閉資料庫的方式是沒有用的。
除了abort是非正常的關閉資料庫的方式以外,其他是正常的關閉資料庫的方式。
在某些情況下,資料庫關閉以後可能導致下次無法重啟資料庫,因為還有殘存的例項沒有被關閉,或者某個oracle資料庫後臺程式沒有終結。這時候可以使用sqlplus或者OEM,發出shutdown abort,徹底的關閉例項。當然把程式或者例項kill掉也是一種方法。

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

相關文章