Oracle 資料庫的啟動需要三個步驟,當我們直接輸入Startup進行啟動時,實際上資料庫已經隱含的將三個步驟一起執行。
而實際上,Oracle的啟動過程包括了啟動常式,裝載資料庫,開啟資料庫。每完成一個步驟,資料庫就進入了一個特定的環境,以保證資料庫進入了某種一致性的狀態。
本文即是對這三個步驟中需要開啟的檔案,以及各個步驟執行後的資料庫狀態進行簡單的實驗。我們在每一個步驟執行時,通過alert_orcl.log觀察每個步驟oracle所做的工作
1.啟動常式
每一個啟動的資料庫,至少要對應一個常式。它是由一組邏輯記憶體結構和後台進程組成的。
當資料庫啟動時,這些記憶體結構和後台進程得到分配,初始化,和啟動。
oracle資料在這一步驟中,只會讀取參數檔案的內容,只是為常式建立各種邏輯記憶體結構和後台服務進程。此時資料庫還不能使用資料庫中的任何檔案。
SQL> startup nomount
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed Size 1218968 bytes
Variable Size 83887720 bytes
Database Buffers 192937984 bytes
Redo Buffers 7168000 bytes
我們通過人為的移除初始化參數檔案,測試在每一個步驟中都用到了那些檔案:
首先重新命名初始設定檔案(資料庫啟動失敗)
:[oracle@myhost dbs]$ mv spfileorcl.ora spfileorcl.ora.bak
SQL> startup nomount
ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/u01/app/oracle/product/10.2.0/db_1/dbs/initorcl.ora'
重新命名控制檔案(資料庫啟動沒有受影響):
[oracle@myhost orcl]$ mv control01.ctl control01.ctl.bak
[oracle@myhost orcl]$ mv control02.ctl control02.ctl.bak
[oracle@myhost orcl]$ mv control03.ctl control03.ctl.bak
SQL> startup nomount
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed Size 1218968 bytes
Variable Size 83887720 bytes
Database Buffers 192937984 bytes
Redo Buffers 7168000 bytes
2.裝載資料庫
在啟動執行個體所用到的參數檔案中,記錄了控制檔案的相關位置和儲存資訊。當資料庫在啟動過程中試圖裝載資料庫時,會按照這個路徑找到控制檔案,並開啟。
控制檔案中記錄著資料庫的名稱,資料檔案的位置和名稱等資料庫物理結構方面的資訊。此時資料庫會去讀取這些資訊,但是並不開啟資料檔案,只是為了開啟資料檔案做準備。
在裝載資料庫時,系統不會去開啟資料檔案和重做記錄檔。此時資料庫仍然處於關閉的狀態。
在這一狀態下,資料庫管理員可以進行如下的操作:
1、對資料庫的資料檔案進行重新命名。
2、維護重做記錄檔。如添加、刪除記錄檔或者變更記錄檔檔案的名字。
3、執行資料庫的完全恢複操作
4、改變資料庫的歸檔
3.開啟資料庫
在開啟資料庫的過程中,常式會根據控制檔案中的資訊找到對應的重做記錄檔,資料檔案等等。
只要控制檔案中列出的任何一個重做記錄檔或者資料檔案損壞的話,都無法正常開啟資料庫。只有在開啟資料庫的時候,系統才會真正的去查看這些檔案是否可用。
此時的資料檔案,記錄檔都處於開啟狀態,管理員無法對這些檔案進行維護操作。