詳解Oracle 資料庫啓動過程

對於很多剛入門的朋友,如果對數據庫的啟動過程不是很瞭解,這篇文章就可以解決你對數據庫啟動過程的疑問。

最好是在自己虛擬機上跟著我的實驗走,這樣理解會透徹點。


一 啟動數據庫

Oracle啟動過程涉及幾種模式,這些模式涉及不同的文件,每個狀態下數據庫做不同的事情,同時這些模式適用於不同的維護需求,主要的模式有三種:NOMOUNT、MOUNT、OPEN。

詳解Oracle 數據庫啟動過程

圖是必備的

1 NOMOUNT:啟動數據庫實例, 此時讀取參數文件,但是不加載數據庫;

2 MOUNT:啟動數據庫實例,加載數據庫,但是數據庫處於關閉狀態;

3 OPEN: 啟動數據庫實例,加載並打開數據庫;

4 FORCE: 終止實例並重啟數據庫,這種模式在數據庫關閉或者啟動遇到問題時使用,這種方式不到萬不得已時不要使用,會有數據丟失;


1 NOMOUNT

這種模式只會創建實例(創建Oracle實例的各種內存結構與服務進程,其中有5個進程必須啟動, DBWR、LGWR、SMON、PMON、CKPT),並不加載數據庫,也不會打開任何數據文件。

在NoMount模式下,只能訪問那些與SGA區相關的數據字典視圖,包括V$PARAMETER、V$SGA、V$PROCESS 和 V$SESSION等,這些視圖中的信息都是從SGA區中獲取的,與數據庫無關。非安裝啟動,這種方式啟動下可執行:重建控制文件、重建數據庫、讀取init.ora文件,啟動instance,即啟動SGA和後臺進程,這種啟動只需要init.ora文件。

模式用途:

(1)創建新數據庫;

(2)重建控制文件。

先關閉數據庫

詳解Oracle 數據庫啟動過程

startup nomount

詳解Oracle 數據庫啟動過程

數據庫的啟動過程記錄在警告追蹤文件中,該警告追蹤文件中包括數據庫啟動信息,它存放在參數BACKGOUND_DUMP_DEST定義的目錄下,警告日誌的名字為alert_orcl.log

詳解Oracle 數據庫啟動過程

進入到目錄查看警告日誌關於startup nomount過程記錄

詳解Oracle 數據庫啟動過程

測試在nomount狀態時數據字典是否打的開,下圖說明數據庫字典在nomount狀態下是無法訪問的,因為數據字典需要從控制文件獲取文件的信息,而此時控制文件沒有打開所以無法查看。

詳解Oracle 數據庫啟動過程

但是在nomount下可以通過參數文件獲得控制文件的位置,因為此時參數文件已經打開

詳解Oracle 數據庫啟動過程


2 MOUNT

這種模式將啟動實例,加載數據庫並保持數據庫關閉狀態。數據庫啟動到MOUNT狀態有兩種方式,一是可以直接啟動數據庫到MOUNT,二是如果數據庫已經啟動到NOMOUNT狀態,使用alter database mount把數據庫切換到MOUNT狀態;

在Mount模式下,只能訪問那些與控制文件相關的數據字典視圖,包括V$THREAD、V$CONTROLFILE、V$DATABASE、V$DATAFILE 和 V$LOGFILE等,這些視圖都是從控制文件中獲取的。

模式用途:

(1)重命名數據文件;

(2)添加、刪除或重命名重做日誌文件;

(3)執行數據庫完全恢復操作;

(4)改變數據庫的歸檔模式。

alert database mount

詳解Oracle 數據庫啟動過程

startup mount

詳解Oracle 數據庫啟動過程

此時我們可以查看數據字典,因為控制文件已經打開

詳解Oracle 數據庫啟動過程

但是此時我們不能訪問數據庫的數據文件(表,視圖),文件此時數據文件沒有打開。

詳解Oracle 數據庫啟動過程


3 OPEN

這種模式將啟動實例,加載並打開數據庫,這是常規的啟動模式,用戶想要對數據庫進行多種操作就必須使用OPEN模式啟動數據庫,啟動到OPEN狀態,有兩種方式,一是直接啟動到OPEN狀態(使用startup或者startup open),二是如果數據庫處於NOMOUNT或者MOUNT狀態,可以通過alter database open切換到OPEN狀態。

詳解Oracle 數據庫啟動過程

此時可以訪問數據文件了。

詳解Oracle 數據庫啟動過程


4 FORCE

這種模式將終止實例並重啟數據庫,這是一種強制性啟動模式,只有在啟動或者關閉出現問題時才使用,並且有一定的風險,會丟失數據,造成意外的問題。

用途&講解:在某些情況下,使用前面的各種模式都無法成功啟動數據庫時,可以嘗試強制啟動模式。

詳解Oracle 數據庫啟動過程


二 關閉數據庫

與啟動數據庫順序相反,也分三個步驟:關閉數據庫(CLOSE 關閉數據文件),卸載數據庫(關閉控制文件 DISMOUNT),關閉Oracle實例(SHUTDOWN)。同時關閉模式也有多種常見的有:

1 NORMAL

命令:shutdown nomal

正常的關閉方式,如果對於關閉數據庫的時間沒有限制,通常採用這種方式,以NORMAL方式關閉數據庫,Oracle將執行如下操作:

A 阻止任何用戶建立新的連接;

B 等待當前所有正在連接的用戶主動斷開連接;

C 當前所有用戶的都斷開連接後,將立即關閉數據庫;

2 TRANSACTION

命令:shutdown transactional

事務關閉方式,它的首要任務是保證當前所有活動的事務都可以被提交,並在儘可能短的時間內關閉數據庫。以事務方式關閉,Oracle將執行如下操作:

A 阻止用戶建立新連接和開始新事務;

B 等待所有活動事務提交後,再斷開用戶連接;

C 當所有活動事務提交完畢,用戶斷開連接後,關閉數據庫;

3 IMMEDIATE

命令:shutdown immediate

立即關閉方式,可以較快且安全的關閉數據庫,是DBA經常採用的關閉數據庫的方式,立即關閉方式,Oracle執行如下操作:

A 阻止用戶建立新的連接和開始新的事務;

B 中斷當前事務,回滾未提交事務;

C 強制斷開所有用戶連接和執行檢查點把髒數據寫到數據文件中;

D 關閉數據庫

4 Abort(終止關閉方式)

命令:shutdown abort

講解:這是比較粗暴的一種關閉方式,當前面3種方式都無法關閉時,可以嘗試使用終止方式來關閉數據庫。但是以這種方式關閉數據庫將會丟失一

部份數據信息,當重新啟動實例並打開數據庫時,後臺進程SMON會執行實例恢復操作。一般情況下,應當儘量避免使用這種方式來關閉數據庫。執行過程如下:

(1)阻止任何用戶建立新的連接,同時阻止當前連接的用戶開始任何新的事務。

(2)立即終止當前正在執行的SQL語句。

(3)任何未提交的事務均不被退名。

(4)直接斷開所有用戶的連接,關閉、卸載數據庫,並終止實例。


覺得有用的走波關注哦~

詳解Oracle 數據庫啟動過程


分享到:


相關文章: