【DB筆試面試534】在Oracle中,數據庫的啟動經歷幾個過程?

  • 2019 年 10 月 10 日
  • 筆記

題目部分

在Oracle中,數據庫的啟動經歷幾個過程?

答案部分

Oracle數據庫的啟動,嚴格來說應該是實例的啟動,數據庫僅僅是在實例啟動後進行裝載。Oracle數據庫啟動的過程被劃分為幾個不同的步驟,在不同的啟動過程中,可以對其實現不同的操作。

啟動命令:STARTUP [FORCE][RESTRICT] [PFILE=…] [NOMOUNT] [MOUNT] [OPEN]

啟動過程:NOMOUNT—>MOUNT—>OPEN,詳細情況如下表所示:

階段

NOMOUNT階段(即實例的啟動,又稱STARTED狀態)

MOUNT階段

OPEN階段

完成的任務

實例的啟動通常包含下列任務:(a)按以下順序在$ORACLE_HOME/dbs(Windows平台在%ORACLE_HOME%database目錄)目錄下搜索下列參數文件:spfile<SID>.ora —> spfile.ora —> init<SID>.ora(b)根據參數內容分配SGA。(c)啟動後台進程,例如PMON、SMON等。(d)打開並修改告警日誌文件及跟蹤文件。

MOUNT階段完成的任務如下所示:(a)利用參數文件中的CONTROL_FILES的值,打開並鎖定控制文件。檢查控制文件是否存在且同步。即使有一個控制文件缺失或損壞,實例也會向DBA返回錯誤(指明控制文件缺失或狀態不同步)並保持NOMOUNT狀態。(b)將數據庫與實例關聯起來。(c)讀取控制文件並獲取數據文件和Redo日誌文件的名稱和狀態信息,但不檢查數據和日誌文件是否存在。需要注意的是,這一步會讀取控制文件,如果這一步有任何一個控制文件被損壞,那麼數據庫就無法正常啟動。

OPEN階段完成的任務如下所示:(a)驗證所有的未脫機數據文件是否存在,但是SYSTEM和Undo表空間的文件必須驗證。驗證控制文件中記錄的所有數據文件是否存在,但不驗證脫機文件。在DBA嘗試使脫機的文件聯機之前,不會檢查這些文件。如果數據文件不屬於SYSTEM或UNDO表空間,那麼DBA就可使數據文件脫機並打開實例。如果缺失了任何數據文件,那麼數據庫會向DBA返回一個錯誤,指出第一個缺失的文件,此時實例保持MOUNT狀態。當實例發現缺失文件時,錯誤消息中只顯示導致問題的第一個文件。要查找需要恢復的所有文件,DBA可以通過檢查v$recover_file動態性能視圖來獲取需要注意的文件的完整列表。(b)驗證所有未脫機數據文件或只讀數據文件是否與控制文件同步。必要時,實例會自動執行實例恢復。但是,如果某個數據文件不同步,而且無法通過使用聯機重做日誌進行恢復,那麼DBA必須執行介質恢復。如果任何文件需要進行介質恢復,那麼數據庫會向DBA返回一條錯誤消息,指出第一個需要恢復的文件,此時實例保持MOUNT狀態。(c)打開聯機Redo日誌文件。檢查控制文件已知的所有重做日誌組是否至少有一個成員存在。任何缺失的成員會記錄在告警日誌中。只要日誌組中至少有一個成員可用,實例就會保持打開狀態。

備註

該階段多用於數據庫創建、控制文件重建、特定的備份恢復等。需要注意的是,此階段不打開任何數據庫文件(控制文件、數據文件、在線Redo日誌)。在RMAN恢復時,還原數據庫控制文件和SPFILE文件也是在該階段進行。

該階段多用於以下場景:(a)重命名數據文件,移動數據文件位置等(數據庫被打開,表空間脫機的情況下也可以重命名數據文件)。(b)修改數據庫的歸檔模式。(c)實現數據庫的完全恢復。

該階段需要注意以下幾點:(a)在此期間,Oracle將校驗所有的數據文件和聯機Redo日誌文件能否打開並對數據庫作一致性檢查。(b)如果出現一致性錯誤,那麼SMON進程將啟動實例恢復。(c)如果任意一個數據文件或聯機日誌文件丟失,那麼Oracle數據庫將會報錯。

命令

STARTUP NOMOUNT

STARTUP MOUNT

STARTUP

打開數據庫的幾種特殊方式:

① 只讀模式:STARTUP OPEN READ ONLY;

若當前數據庫在MOUNT狀態,則執行ALTER DATABASE OPEN READ ONLY;。

② 受限模式:

有時進行數據庫維護,希望一般的用戶不能登錄。可以啟動到該模式,在這種模式下只有用戶具有RESTRICTED SESSION權限的用戶才可登錄到數據庫。

l 啟動方法:STARTUP RESTRICT;

l 取消受限:ALTER SYSTEM DISABLE RESTRICTED SESSION;

數據庫的關閉也有一些參數需要注意,關閉命令為:

SHUTDOWN ABORT | IMMEDIATE | TRANSACTIONAL | NORMAL  

其中,SHUTDOWN不帶參數將缺省為NORMAL。一般情況下,關閉數據庫都使用「SHUTDOWN IMMEDIATE」命令。這幾個參數的區別見下表:

SHUTDOWN

NORMAL

TRANSACTIONAL

IMMEDIATE

ABORT

是否允許新連接

N

N

N

N

是否允許新事務

Y

N

N

N

是否等待所有未提交事務完成提交

Y

Y

N

N

等待所有會話斷開連接

Y

N

N

N

強制檢查點

Y

Y

Y

N

實例恢復

N

N

N

Y

告警日誌

Shutting down instance (normal)

Shutting down instance (transactional)

Shutting down instance (immediate)

Shutting down instance (abort)

l NORMAL表示不准許新的連接,等待當前所有連接到數據庫系統的用戶都斷開連接(DISCONNECT),強制檢查點並關閉文件,下次啟動不需要實例恢復。

l TRANSACTIONALE表示不准許新的連接,不允許開啟新事務,數據庫等待所有事務完成後斷開當前連接到數據庫的所有用戶,強制檢查點並關閉文件,下次啟動不需要實例恢復。

l IMMEDIATE表示不准許新的連接,不允許開啟新事務,任何未提交的事務都進行回滾。數據庫顯式回滾活動的事務並斷開所有當前連接到數據庫的用戶,強制檢查點並關閉文件,下次啟動不需要實例恢復。

l ABORT表示不准許新的連接,不允許開啟新事務,任何未提交的事務不進行回滾。數據庫立刻中斷所有SQL的執行,並斷開所有用戶的連接。不作強制檢查點,下次啟動需要做實例恢復。

& 說明:

關於Oracle的啟動和關閉的更多內容可以參考我的BLOG:http://blog.itpub.net/26736162/viewspace-2139136/

真題1、給出數據庫正常啟動所經歷的幾種狀態?

答案:數據庫正常啟動經歷如下所示的3個階段:

(1) STARTUP NOMOUNT — 數據庫實例啟動

(2) STARTUP MOUNT — 數據庫裝載

(3) STARTUP OPEN — 數據庫打開

本文選自《Oracle程序員面試筆試寶典》,作者:李華榮。