Oracle數據庫的關閉詳解

  
與數據庫的啓動相對應,關閉數據庫時也是分步驟進行的。在關閉數據庫與實例時,需要使用一個具有SYSDBA權限的用戶連接到Oracle中,然後使用Shutdown語句執行關閉操作。
(1)    關閉步驟
與啓動數據庫實例時的三個步驟一樣,關閉數據庫與實例也可以分爲三步:首先關閉數據庫,然後實例卸載數據庫,最後終止實例。
當關閉數據庫時,Oracle將重做日誌,高速緩存中的內容寫入重做日誌文件,並且將數據庫高速緩存中被改動過的數據(髒數據)寫入數據文件,然後再關閉所有的數據庫文件和重做日誌文件。這時數據庫的控制文件仍然處於打開狀態,但是由於數據庫已經處於關閉狀態,用戶將無法訪問數據庫。
關閉數據庫後,實例才能卸載數據庫。數據庫的控制文件在這個時候被關閉,但是實例仍然存在。最後是終止實例,實例所擁有的所有後臺進程和服務進程被終止,內存中的SGA區被回收。
(2)    正常關閉方式(NORMAL)
如果對關閉數據庫的時間沒有限制,通常會使用正常方式來關閉數據庫。使用帶有Normal子句的Shutdown語句將以正常方式關閉數據庫。
正常關閉數據庫時,Oracle將執行如下操作:
l      阻止任何用戶建立新的連接;
l      等待當前所有正在連接的用戶主動斷開連接。正在連接的用戶能夠繼續他們當前的工作,甚至能夠提交新的事務;
l      一旦所有的用戶都斷開連接,立刻關閉、卸載數據庫,並終止實例。
以正常方式關閉數據庫時,Oracle並不會斷開當前用戶的連接,而是等待當前用戶主動斷開連接。在這個過程中,連接的用戶甚至可以建立新的事務。如果以正常方式關閉數據庫,在下次啓動數據庫時不需要進行任何恢復操作。正常關閉方式所耗費的時間完全取決於用戶主動斷開連接的時間。通常DBA在發佈Shutdown normal語句後,會通知所有在線的用戶儘快斷開連接。
(3)    立即關閉方式(immediate)
立即關閉方式能夠在儘可能短的時間內關閉數據庫。通常如下幾種情況下需要使用立即方式來關閉數據庫:
l      即將啓動自動數據備份操作;
l      即將發生電力供應中斷;
l      當數據庫本身或某個數據庫應用程序發生異常,並且這時無法通知用戶主動斷開連接,或者用戶根本無法執行斷開操作。
使用帶Immediate子句的Shutdown語句將以立即方式關閉數據庫。立即方式關閉數據庫時,Oracle將執行如下操作:
l      阻止任何用戶建立新的連接,同時阻止當前連接用戶開始任何新的事務;
l      任何未提交的事務均被回退;
l      Oracle不再等待用戶主動斷開連接,直接關閉、卸載數據庫,並終止實例。
如果存在太多的未提交事務,立即方式仍然會耗費很長的時間。這時如果需要快速關閉數據庫,可以使用Shutdown abort語句。在立即關閉方式下,Oracle不僅會立即中斷當前用戶的連接,而且會強行終止用戶的當前事務,並將未完成的事務回退。與正常方式類似,以立即方式啓動數據庫後,在下次啓動數據庫時不需要進行任何恢復操作。
(4)    事務關閉方式(transactional)
事務關閉方式介於正常方式與立即方式之間,它能夠使用儘可能短的時間關閉數據庫,但是能夠保證當前所有的活動事務都可以被提交。使用事務方式關閉數據庫時,Oracle將等待所有未提交的事務完成後再關閉數據庫。使用帶有Transactional子句的Shutdown語句將以事務方式關閉數據庫。事務關閉方式既能夠保證用戶不會丟失當前工作的信息,又可以儘可能快地關閉數據庫。事務關閉方式也是最常用的數據庫關閉方式。以事務方式關閉數據庫,下次啓動數據庫時不需要進行任何恢復操作。事務方式關閉數據庫時,Oracle將完成如下操作:
l      阻止任何用戶建立新的連接,同時阻止當前連接用戶開始任何新的事務;
l      等待所有未提交的活動事務提交完畢,然後立即斷開用戶的連接;
l      關閉、卸載數據庫,並終止實例。
(5)    終止關閉方式(ABORT)
如果上述三種關閉方式都無法成功關閉數據庫,說明數據庫產生了嚴重的錯誤。這時只能使用終止方式來關閉數據庫。終止關閉方式將丟失一部分數據信息,會對數據庫的完整性造成損害,需要在下一次啓動數據庫時進行恢復,因此應當儘量避免使用終止方式來關閉數據庫。
在如下幾種特殊情況中,應當使用終止關閉方式:
l      數據庫本身或某個數據庫應用程序發生異常,並且使用其他關閉方式均無效時;
l      出現緊急情況,需要立刻關閉數據庫(比如得到通知將在一分鐘內發生電力供應中斷);
l      在啓動數據庫實例的過程中產生錯誤。
使用帶有Abort子句的Shutdown語句將以終止方式關閉數據庫。終止方式關閉數據庫時,Oracle將執行如下操作:
l      阻止任何用戶建立新的連接,同時阻止當前連接用戶開始任何新的事務;
l      立即終止當前正在執行的SQL語句;
l      任何未提交的事務均不被回退;
l      立即斷開所有用戶的連接,關閉、卸載數據庫,並終止實例。
如果以終止方式關閉數據庫,由於當前未完成的事務並不會被回退,所以當下次啓動數據庫時需要進行數據庫恢復
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章