Oracle - 解析啓動的全過程

    之前對Oracle也沒有什麼瞭解,只是DBA給我們一個用戶,然後我們連上去就OK,總是搞不明白。今天有空來看看Oracle的啓動過程,還是有很多東西值得我們來仔細研究的:

    Oracle的啓動過程總共分三步:

    1 啓動Oracle的實例;

    2 掛載Oracle數據庫;

    3 打開數據庫;

啓動Oracle實例到nomount狀態:

  1. SQL> startup nomount 
  2. ORACLE 例程已經啓動。 
  3.  
  4. Total System Global Area  293601280 bytes 
  5. Fixed Size                  1248600 bytes 
  6. Variable Size             109052584 bytes 
  7. Database Buffers          176160768 bytes 
  8. Redo Buffers                7139328 bytes 
  9. SQL>

在這個情況下,Oracle都做了哪些工作呢:只是去尋找一個叫做spfile,或者是pfile的文件,然後根據這個文件去創建實例,分配內存;那麼你肯定是要問,那我如何纔可以知道我載入的那個文件呢:

  1. SQL> show parameter spfile; 
  2.  
  3. NAME                                 TYPE 
  4. ------------------------------------ ---------------------- 
  5. VALUE 
  6. ------------------------------ 
  7. spfile                               string 
  8. D:\ORACLE\PRODUCT\10.2.0\DB_1\ 
  9. DATABASE\SPFILEGJSID.ORA 
  10. SQL> 

看到了吧,Oracle載入的就是在這個目錄下的SPFILE<sid>.ora。那pfile和spfile之間有什麼區別呢:pfile其實和spfile是一樣的內容,只不過spfile在文件頭的時候,有些我也不太明白的東西。

可以用以下的命令來實現pfile和spfile的轉換:

  1. SQL> create pfile from spfile; 
  2.  
  3. 文件已創建。 
  4.  
  5. SQL> 

 

接下來呢,就到了掛載Oracle數據庫的時候:

  1. SQL> alter database mount; 
  2.  
  3. 數據庫已更改。 

那這個過程中,Oracle做了哪些工作,其實是根據剛剛spfile裏面的內容來尋找一個叫做控制文件的東東control file,你能搞明白麼,在Oracle中,共有三個一模一樣的控制文件,就是爲了防止有控制文件損壞。

這個時候你可以通過以下的命令來查看加載的控制文件:

  1. SQL> select * from v$controlfile; 
  2.  
  3. STATUS  NAME                                     IS_ BLOCK_SIZE FILE_SIZE_BLKS 
  4. ------- ---------------------------------------- --- ---------- -------------- 
  5.         D:\ORACLE\DATA\GJSID\CONTROL01.CTL       NO       16384            430 
  6.         D:\ORACLE\DATA\GJSID\CONTROL02.CTL       NO       16384            430 
  7.         D:\ORACLE\DATA\GJSID\CONTROL03.CTL       NO       16384            430 
  8.  
  9. SQL> show  parameter control_file; 
  10.  
  11. NAME                                 TYPE        VALUE 
  12. ------------------------------------ ----------- ------------------------------ 
  13. control_file_record_keep_time        integer     7 
  14. control_files                        string      D:\ORACLE\DATA\GJSID\CONTROL01 
  15.                                                  .CTL, D:\ORACLE\DATA\GJSID\CON 
  16.                                                  TROL02.CTL, D:\ORACLE\DATA\GJS 
  17.                                                  ID\CONTROL03.CTL 
  18. SQL> 

看到了吧,這個時候,控制文件就加載到系統視圖裏了,在沒有mount之前,v$controlfile裏是沒有內容的。

打開數據庫,

SQL> alter database open

這個時候,Oracle會去數據文件頭和控制文件頭裏去檢查數據庫版本的一致性,和數據的連續性,檢查SCN - system changing number。

至此,Oracle就算是啓動完成了。如果其中有報錯的話,可以去查看在alter_<sid>.log. 在其中有比較完整的信息。

全當自己學習Oracle的筆記吧。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章