一、Oracle數據庫體系結構
體系結構由下面組件組成:
1、Oracle服務器(Server):由數據庫實例和數據庫文件組成,另外在用戶建立與服務器的連接時啟動服務器進程並分配PGA(程序全局區)
(1)數據庫實例(Instance)
數據庫實例由一些內存區和后台進程組成。
(a)內存區:共享池、數據庫高速緩存、重做日志緩存、流池以及其他可選內存區
(b)后台進程:系統監控進程(SMON)、進程監控(PMON)、數據庫寫進程(DBWR)、日志寫進程(LGWR)、檢驗點進程(CKPT)、其他進程
(2)數據庫文件
數據庫文件由數據文件、控制文件、重做日志文件組成。
(a)數據文件:數據庫中的實際數據
(b)控制文件:包含維護數據庫和驗證數據庫完整性的信息,是二進制文件。
(c)重做日志文件:包含數據庫發生變化的記錄,在發生故障時用於數據恢復。
2、服務器進程
3、用戶進程
4、參數文件
也稱為數據庫初始化文件,定義數據庫實例的特性,包含為SGA中內存結構分配空間的參數。
分為pfile文件和spfile文件。
(a)pfile文件:文件名默認為init.ora,屬於靜態文件,可以使用文本編輯器編輯,修改后需要重啟實例才生效。
(b)spfile文件:文件名默認為spfile<ORACLE_SID>.ora,屬於二進制的動態文件,只能通過Oracle指令修改,修改后直接生效。
Oracle 11g默認使用spfile啟動,也可以使用pfile文件啟動數據庫,如:startup pfile='d:\init_123.ora'
5、密碼文件
授予用戶啟動和關閉數據庫實例。
6、歸檔日志文件
二、數據庫啟動過程
啟動過程涉及到三個狀態:nomount、mount、open
1、nomount狀態
只打開數據庫實例。
使用startup nomount啟動。
C:\Users\LC>sqlplus /nolog
SQL> connect /as sysdba
已連接。
SQL> startup nomount
ORACLE 例程已經啟動。
Total System Global Area 1686925312 bytes
Fixed Size 2176368 bytes
Variable Size 989858448 bytes
Database Buffers 687865856 bytes
Redo Buffers 7024640 bytes
SQL> select * from v$controlfile;
未選定行
SQL> show parameter control_files;
NAME TYPE VALUE
---------------------------------------------------------------------------------------------------------------
control_files string D:\APP\LC\ORADATA\TESTDB\CONTROL01.CTL, D:\APP\LC\FLASH_RECOVERY_AREA\TESTDB\CONTROL02.CTL
說明:
select * from v$controlfile;用於測試此時控制文件是否已打開。
show parameter control_files;獲取控制文件的位置。
2、mount狀態
根據參數文件中控制文件的位置找到並打開控制文件,讀取控制文件中的各種參數信息,如數據文件和日志文件的位置等。
啟動到mount狀態有二種方式,一是使用指令startup mount直接啟動到mount狀態,二是在數據庫是nomount狀態時使用alter指令切換到mount狀態。
SQL> alter database mount;
數據庫已更改。
此時使用select * from v$controlfile;能查詢到控制文件的信息。
但是此時數據庫並沒有打開,數據文件無法讀取,例如查詢表會出錯。
3、open狀態
將打開數據文件並進行一系列的檢查工作,這些檢查工作用於數據恢復;
啟動到open狀態有二種方式,一是使用指令startup(默認是open)或startup open直接啟動到open狀態,二是在數據庫是nomount或mount狀態時使用alter指令切換到open狀態。在啟動數據庫時,可以執行startup直接啟動數據庫到open狀態,這個過程仍然要經歷上面三個狀態。
SQL> alter database open;
數據庫已更改。
三、數據庫關閉過程
關閉過程和啟動相反,經歷了close、dismount、shutdown。
可以分步關閉,也可以直接關閉。
分步關閉:
1、close數據庫
關閉數據文件、日志文件等。
SQL> alter database close;
數據庫已更改。
2、dismount數據庫
關閉控制文件。
SQL> alter database dismount;
數據庫已更改。
3、shutdown數據庫
關閉實例。
shutdown有4個參數:shutdown normal(默認)、shutdown immediate(推薦)、shutdown transactional、shutdown abort
SQL> shutdown
數據庫已經關閉。
已經卸載數據庫。
ORACLE 例程已經關閉。
另外,有一次測試中,shutdown immediate以后再startup 報錯:監聽程序當前無法識別連接描述符中請求的服務
關閉當前sqlplus窗口,在開始運行-> sqlplus / as sysdba -> startup