2020年8月25日 星期二

4.5 Oracle 參數檔

在啟動 Oracle 資料庫的時候,第一件事情就是先去讀取 Oracle 參數檔裡面的設定,因此在使用 Oracle 資料庫之前必須先了解參數檔。


Oracle 的參數檔可分為 pfile 以及 spfile 兩種,pfile 是文字模式,可以使用文字編輯器(例如 vi, notepad…etc) 來編輯裡面的內容;而 spfile 則是 binary 模式,不可使用文字編輯器進行修改,要修改spfile裡面的內容只能透過資料庫裏面的 alter system set 指令來進行修改。早在Oracle 8i 之前只有pfile一種參數檔,到了Oracle 9i 首次推出spfile格式,直到現在spfile一直是Oracle主要使用的參數檔格式。從Oracle 9i 開始出現了RAC架構,需要一個可以讓多個server共享且可以存放在raw device 的參數檔,因此推出了spfile。


參數檔的位置在Unix系統上預設為 $ORACLE_HOME/dbs 底下,而Windows系統則在 $ORACLE_HOME/database底下。參數檔的檔名格式是固定的,如果不依照指定的格式命名,則資料庫預設不會去讀取這個參數檔,pfile的格式為init<SID>.ora,spfile的格式為spfile<SID>.ora。pfile的存放位置無法更改,資料庫啟動時會去預設的 $ORACLE_HOME/dbs底下讀取pfile,若不想使用預設路徑,則在資料庫啟動的時候可以使用參數 pfile= 來指定 pfile的位置;spfile的路徑則可以更改,只需在init<SID>.ora裡面設定 spfile= 來指定spfile的位置即可,資料庫在啟動時會先去找到 init<SID>.ora,然後從裡面讀取到spfile的位置,再去指定的路徑讀取spfile。若是 RAC 系統,更是可以使用 srvctl modify database –d <db_name> -spfile <spfile location>,將spfile的訊息直接記錄在CRS上面。


既然Oracle有兩種參數檔,那麼資料庫在啟動時就可以選擇使用pfile或是spfile來做啟動,那麼要如何知道此時資料庫使用的是pfile還是spfile ?


透過sqlplus 查詢參數 spfile:


SQL> show parameter spfile;


如果是使用spfile開啟資料庫的,那麼此時參數就會顯示出spfile的路徑:


如果是使用pfile,那麼此時參數顯示為空:


由於spfile只能透過sqlplus使用命令來更改參數,有的時候為了方便起見還是會想要使用文字編輯器來修改參數,因此有了 spfile 與 pfile 之間互相轉換的機制,我們可以將 spfile 轉換為 pfile,然後用文字編輯器修改參數,修改完成後再將pfile轉換回spfile。


將spfile轉換為pfile必須使用sqlplus執行下列指令:

SQL> create pfile from spfile;

     (抓取預設路徑的 spfile 轉換 pfile 產生在預設位置)

SQL> create pfile=’/tmp/initorcl.ora’ from spfile;

     (抓取預設路徑的 spfile 轉換 pfile 到指定的位置)

SQL> create pfile=’/tmp/initorcl.ora’ from spfile=’/tmp/spfileorcl.ora’;

     (指定 pfile 與 spfile 的位置)


同樣的將 pfile 轉換為 spfile 只需要把命令反過來下就可以了:

SQL> create spfile from pfile;

     (抓取預設路徑的 pfile 轉換 spfile 產生在預設位置)

SQL> create spfile=’/tmp/spfileorcl.ora’ from pfile;

     (抓取預設路徑的 pfile 轉換 spfile 到指定的位置)

SQL> create spfile=’/tmp/spfileorcl.ora’ from spfile=’/tmp/initorcl.ora’;

     (指定 spfile 與 pfile 的位置)


執行 pfile 與 spfile 轉換的時候不需要 sqlplus 到一個存在並且 open 的 db 來執行,即便是 Connected to an idle instance. (意即 DB 不存在或沒開啟) 也可以執行這個轉換。


會將pfile與spfile執行轉換的情境大多是在測試參數異動的影響,為了不影響spfile的內容,會先將其轉變為pfile並更改參數,然後先用此pfile開啟資料庫驗證參數的正確性與影響,確認完畢後再將參數更新回spfile。


而另一種情境則是參數修改不當導致DB無法使用spfile開啟,例如修改SGA過大導致DB無法開啟,因為DB無法開啟所以也無法使用 alter system set 的命令來更正spfile的內容,此時就需要將spfile轉換為pfile,然後使用文字編輯器將pfile裡面錯誤的參數進行修正,修正完畢後再轉換回spfile。


參數檔是Oracle資料庫的基礎,在使用資料庫之前必須先熟悉參數檔。

沒有留言:

張貼留言