ORACLE數據庫啓停概述

 只要使用過oracle database,那麼確定執行過不少次的startupshutdown的操做,可是你是否關心過這個過程發生了什麼?這篇文章主要講講oracle啓動與中止過程oracle後臺發生的事情。數據庫

實例與數據庫

 首先須要弄清楚一些概念性的東西。咱們平時只會說數據庫是否啓動,關閉不多用到實例的概念,說到實例,或許你想到的只是SID這個詞。  實例和數據庫是兩個獨立卻又相互關聯的兩個不一樣的東西,他們均可以獨立於彼此而存在。實例存在於內存,包含一大堆後臺進程,而數據庫存在於磁盤中。數據庫和實例的關係能夠是one to one或者one to many(例如RAC就是one to many的),可是絕對不存在一個實例對應多個數據庫的狀況。  實例啓動的時候,會爲其分配一個叫System Global Area(SGA)的系統全局區的內存區域以及一系列的後臺進程,它們的主要任務是:緩存

  • 維護對內部數據的併發訪問
  • 緩存數據塊
  • 緩存未寫入聯機重作日誌文件的重作數據
  • 存儲SQL的執行計劃

 下圖展現了oracle實例的主要組件(圖片來自oracle concept): avatar服務器

 每一個主機上能夠建立多個數據庫實例,ORACLE經過system identifier(SID)來惟一標識一個實例。Linux或者Unix下能夠經過ORACLE_SID環境變量設置該主機訪問的默認SID,當咱們經過SQL Net訪問數據庫時也須要指定ORACLE SID。  在咱們安裝oracle數據庫時,咱們會設置兩個環境變量,一個是ORACLE_BASE,以及ORACLE_HOMEORACLE_BASE是安裝oracle二進制文件的目錄,ORACLE_HOME是數據庫軟件的安裝目錄,位於ORACLE_BASE子目錄,咱們能夠在同一個主機上安裝不一樣的數據庫軟件在獨立的ORACLE_HOME下。session

從執行startup到能夠訪問數據庫

 數據庫的啓動包括了四個階段:從SHUTDOWN->NOMOUNT->MOUNT->OPEN,以下圖(圖片來自ORACLE CONCEPT): avatar  可使用STARTUP NOMOUNTSTARTUP MOUNTSTARTUP啓動到各個不一樣的狀態。併發

NOMOUNT

STARTUP NOMOUNT只進行instance的啓動,該狀態下能夠執行數據庫的建立、備份以及恢復操做,該階段會依次完成如下操做:oracle

  • 在默認位置查找server parameter file(spfile),若讀取不到,則進一步查找文本格式的initialization parameter file(pfile),讀取參數文件的初始化參數。
  • 根據參數文件的設置,分配SGA。
  • 啓動後臺進程
  • 打開alter log以及trace file寫入顯示參數設置。

 pfile參數文件通常默認在ORACLE_HOME/dbs目錄下,以init+${ORACLE_SID}.ora方式命名。其中包含了控制文件位置、adump文件地址、UNDO表空間、兼容版本、DB_NAME、內存分配信息等。 實例啓動時首先嚐試讀取spfile,獲取失敗,再尋找文本格式的pfile,都獲取不到則啓動失敗。此時能夠經過如下方式啓動實例: 一、一般數據庫中會存在一份pfile的克隆文件,文件名以init.ora.數字的方式命名,經過STARTUP PFILE='克隆參數文件地址'方式啓動。 二、手動重建參數文件。參數文件的建立仍是很簡單的,注意__oracle_base*.audit_file_dest*.control_files*.db_recovery_file_dest*.db_name*.diagnostic_dest便可,其餘非默認參數能夠在trace文件中獲取,建立pfile,而後指定pfile啓動便可。 以上步驟完成後需執行create spfile from pfile命令,不然下次啓動時仍需以指定pfile的方式才能啓動。  當實例啓動後,具有SYSDBASYSOPERSYSBACKUPSYSDGSYSKM權限的用戶就能夠登陸了。運維

MOUNT

 該階段建立實例與數據庫之間的關聯。實例經過*.control_files定位控制文件位置,並打開控制文件讀取數據庫相關信息,包括數據文件、redo日誌在磁盤中的位置以及名稱。  控制文件是實例與數據庫溝通的橋樑,控制文件丟失將致使實例沒法訪問到數據庫的信息,從而沒法裝載數據庫。關於控制文件的重建,能夠查看我以前寫的一篇博文,重建控制文件。控制文件的重建須要定位全部數據文件以及redo日誌的位置。ide

OPEN

 只有啓動到OPEN狀態咱們才能對數據庫進行正常的操做,這時普通用戶才能登錄數據庫。當OPEN數據庫時,首先會打開除undo之外的,處於online狀態的數據文件;而後打開undo數據文件;最後纔是打開在線重作日誌文件。若是咱們關閉數據庫的執行shutdown abort,那麼在這一步將執行實例恢復的操做。在這個過程咱們容易遇到的主要問題有,數據文件的丟失、損壞等狀況。  在11G中存在服務器異常關閉後沒法自動完成實例恢復的bug,須要手動的完成實例恢復。日誌

從OPEN到SHUTDOWN

首先看下oracle concept中SHUTDOWN數據庫的順序圖: avatar 首先會關閉數據文件以及聯機重作日誌,而後關閉控制文件到NOMOUNT狀態,此時實例仍在運行,最後shutdown實例。code

SHUTODOWN模式

shutdown命令有ABORTIMMEDIATETRANSACTIONALNORMAL四種模式,其產生的行爲以下表:

Database Behavior ABORT IMMEDIATE TRANSACTIONAL NORMAL
Permits new userconnections × × × ×
Waits until current sessions end × × ×
Waits until current transactions end × ×
Performs a checkpoint and closes open files ×

SHUTDOWN ABORT僅在無可奈何的狀況下才使用,例如其餘三種模式均沒法關閉數據庫。該模式不會將checkpoint寫入數據文件的header中,也會不將SGA中的緩存的數據寫入數據文件和聯機重作日誌中、以及對當前事物進行回滾,當啓動數據庫時須要進行實例恢復。

小結

 數據庫啓動時涉及到的參數文件以及控制文件,雖而後期都能手動重建,可是仍是須要耗費一些時間的,特別是控制文件的重建。建議在平常的運維中,對控制文件和參數文件都進行一下備份,平時多花一些時間,可讓咱們在遇到數據庫宕機時節省不少時間。對於控制文件,咱們能夠建立多份控制文件,放置在不一樣的磁盤便可。當咱們執行alter system命令修改參數時使用scope=both,將修改的參數同時寫入spfile和pfile,並對pfile進行備份。  理解數據庫啓動各個階段執行的操做,對於咱們快速定位沒法啓動數據庫仍是頗有必要的,只有理解了每一個階段實例會進行哪些操做,咱們能大大縮小數據庫沒法啓動到下一個階段的問題範圍。

相關文章
相關標籤/搜索