之前對Oracle也沒有什麼瞭解,只是DBA給我們一個用戶,然後我們連上去就OK,總是搞不明白。今天有空來看看Oracle的啓動過程,還是有很多東西值得我們來仔細研究的:
Oracle的啓動過程總共分三步:
1 啓動Oracle的實例;
2 掛載Oracle數據庫;
3 打開數據庫;
啓動Oracle實例到nomount狀態:
- SQL> startup nomount
- ORACLE 例程已經啓動。
- Total System Global Area 293601280 bytes
- Fixed Size 1248600 bytes
- Variable Size 109052584 bytes
- Database Buffers 176160768 bytes
- Redo Buffers 7139328 bytes
- SQL>
在這個情況下,Oracle都做了哪些工作呢:只是去尋找一個叫做spfile,或者是pfile的文件,然後根據這個文件去創建實例,分配內存;那麼你肯定是要問,那我如何纔可以知道我載入的那個文件呢:
- SQL> show parameter spfile;
- NAME TYPE
- ------------------------------------ ----------------------
- VALUE
- ------------------------------
- spfile string
- D:\ORACLE\PRODUCT\10.2.0\DB_1\
- DATABASE\SPFILEGJSID.ORA
- SQL>
看到了吧,Oracle載入的就是在這個目錄下的SPFILE<sid>.ora。那pfile和spfile之間有什麼區別呢:pfile其實和spfile是一樣的內容,只不過spfile在文件頭的時候,有些我也不太明白的東西。
可以用以下的命令來實現pfile和spfile的轉換:
- SQL> create pfile from spfile;
- 文件已創建。
- SQL>
接下來呢,就到了掛載Oracle數據庫的時候:
- SQL> alter database mount;
- 數據庫已更改。
那這個過程中,Oracle做了哪些工作,其實是根據剛剛spfile裏面的內容來尋找一個叫做控制文件的東東control file,你能搞明白麼,在Oracle中,共有三個一模一樣的控制文件,就是爲了防止有控制文件損壞。
這個時候你可以通過以下的命令來查看加載的控制文件:
- SQL> select * from v$controlfile;
- STATUS NAME IS_ BLOCK_SIZE FILE_SIZE_BLKS
- ------- ---------------------------------------- --- ---------- --------------
- D:\ORACLE\DATA\GJSID\CONTROL01.CTL NO 16384 430
- D:\ORACLE\DATA\GJSID\CONTROL02.CTL NO 16384 430
- D:\ORACLE\DATA\GJSID\CONTROL03.CTL NO 16384 430
- SQL> show parameter control_file;
- NAME TYPE VALUE
- ------------------------------------ ----------- ------------------------------
- control_file_record_keep_time integer 7
- control_files string D:\ORACLE\DATA\GJSID\CONTROL01
- .CTL, D:\ORACLE\DATA\GJSID\CON
- TROL02.CTL, D:\ORACLE\DATA\GJS
- ID\CONTROL03.CTL
- SQL>
看到了吧,這個時候,控制文件就加載到系統視圖裏了,在沒有mount之前,v$controlfile裏是沒有內容的。
打開數據庫,
SQL> alter database open;
這個時候,Oracle會去數據文件頭和控制文件頭裏去檢查數據庫版本的一致性,和數據的連續性,檢查SCN - system changing number。
至此,Oracle就算是啓動完成了。如果其中有報錯的話,可以去查看在alter_<sid>.log. 在其中有比較完整的信息。
全當自己學習Oracle的筆記吧。