本文說明 Oracle 數據庫的啟動和關閉,內容雖然基礎,但是在數據庫很多操作中都需要,因此,基礎而重要,必須深入理解。比如,何種情況應該使用何種數據庫加載模式,以及數據庫文件打開模式。
若用 startup 命令啟動數據庫,執行的操作要經歷三個不同的階段:
實例啟動(instance startup),在這個階段,Oracle 分析數據庫參數文件,並通過設法獲得實例鎖來確定實例還未運行。隨後,Oracle 啟動多種不同的數據庫進程,如 DBWn 和 LGWR 進程。Oracle 還將分配SGA所需的內存。一旦啟動了實例,Oracle 會向啟動實例的用戶報告後台進程已經啟動了實例。
數據庫加載(加載啟動),在加載階段,Oracle 打開數據庫控制文件。成功打開控制文件後,Oracle 從這個控制文件中析取數據庫數據文件名,為打開這些數據庫文件做准備。需要注意的是,這個時候,Oracle 不會檢查這些數據文件是否存在,而只是從控制文件中標識數據文件的位置。完成這個步驟後,Oracle 向用戶報告已經加載了數據庫。
數據庫打開,Oracle 將繼續啟動進程並設法打開數據庫。在數據庫打開階段,Oracle 驗證數據庫文件是否存在,並打開這些文件。Oracle 打開數據文件時會檢查數據文件頭,並且比較這些文件頭中的 SCN 信息和控制文件中存儲的 SCN(SCN 是跟蹤數據庫狀態的 Oracle 方法)。
Oracle 設法打開數據庫時,會檢查每個數據文件和數據庫控制文件中的 SCN。如果 SCN 相同,並且位映射標記設置正確,則認為這個數據庫是一致的,即可打開和使用數據庫。如果 SCN 不相同,則 Oracle 會自動執行災難或實例恢復。如果聯機重做日志文件中存在生成一致的映像所需要的重做,就會發生災難或實例恢復。如果由於數據文件損壞或由於恢復需要的重做不在聯機重做日志中而不能執行災難或實例恢復,Oracle 會要求 DBA 執行介質恢復。介質恢復需要從一個數據庫備份中恢復一個或多個數據庫數據文件,與實例恢復不同的是,介質恢復是一個手動執行的進程。
與啟動對應是關閉 shutdown 命令,關閉卸載數據庫,執行與 startup 相反的操作。
下面本例,啟動或關閉數據庫都在服務器上進行。
圖 1 啟動數據庫
圖 2 關閉數據庫