- Oracle從新手到高手
- 楊繼萍
- 2829字
- 2019-12-09 14:49:00
3.1 設置初始化參數
初始化參數用于設置實例和數據庫的特征。通過設置初始化參數,不僅可以定義例程和數據庫特征,還可以定義許多其他特征和限制。例如,通過使用初始化參數,可以定義SGA尺寸、設置數據庫名稱、定義用戶和進程限制、定義控制文件、跟蹤文件和警告日志的位置等。在Oracle數據庫中,初始化參數是存儲在參數文件中的,啟動實例和打開數據庫時都必須提供相應的參數文件。
3.1.1 常用的初始化參數
Oracle提供了200多個初始化參數,并且多數初始化參數都具有默認值。使用Oracle數據庫時,只需要根據特定需求設置相應的參數即可,并且多數參數都可以保留默認值。其中,Oracle數據庫的一些常用初始化參數的具體描述,如下表所示。

3.1.2 初始化參數文件
傳統上,Oracle在啟動實例時將讀取本地的一個文本文件,并利用從中獲取的初始化參數對實例和數據庫進行設置,這個文本文件稱為“初始化參數文件”(簡稱為PFILE)。如果要對初始化參數進行修改,必須先關閉數據庫,然后在初始化參數文件中進行編輯,并重新啟動數據庫使修改生效。
從Oracle 8i開始,許多初始化參數都成了動態參數,也就是說可以在數據庫運行期間利用ALTER SYSTEM(或ALTER SESSION)語句來修改初始化參數,并且不需要重新啟動數據庫,修改后即可立即生效。但是使用ALTER SYSTEM語句對初始化參數進行的修改并不能保存在初始化參數文件中。因此,在下一次啟動數據庫時,Oracle依然會使用初始化參數文件中的參數對實例進行設置。如果要永久性地修改某個初始化參數,數據庫管理員必須通過手動方式對初始化參數文件進行編輯,這就為初始化參數的管理帶來了困難。
因此,從Oracle 9i開始提供了服務器端初始化參數文件(簡稱SPFILE)。服務器端初始化參數文件是一個二進制格式的文件,它始終存放在數據庫服務器端。這樣如果在數據庫的任何一個實例中使用ALTER SYSTEM語句對初始化參數進行修改,在默認情況下都會被永久地記錄在服務器端初始化參數文件中。這樣,當下一次啟動數據庫時,這些修改會自動繼續生效。因此,不必對初始化參數文件進行手動編輯,就能保證在數據庫運行過程中對初始化參數的修改不會丟失。
提示:
服務器端初始化參數文件是一個二進制格式文件,盡管能打開它并查看其中的內容,但是任何用戶都不應當手工對其中的內容進行編輯,否則實例將無法啟動。
在啟動數據庫時必須提供一個初始化參數文件,因為在啟動數據庫時,它將按照如下順序尋找初始化參數文件。
① 首先檢查是否使用SPFILE參數,指定了服務器端初始化參數文件。
② 然后再檢查是否使用了PFILE參數,指定了文本初始化參數文件。
③ 如果沒有使用SPFILE參數和PFILE參數,則在默認位置尋找默認名稱的服務器端初始化參數文件。
④ 如果沒有找到默認服務器端初始化參數文件,則在默認位置尋找默認名稱的文本初始化參數文件。
3.1.3 創建初始化參數文件
如果當前實例正在使用SPFILE,那么使用ALTER SYSTEM命令將無法修改某些初始化參數,如DB_NAME。為了修改這些初始化參數,必須建立PFILE,并且手工修改該PFILE文件的相應參數。可以使用CREATE PFILE命令建立文本參數文件,其語法如下:
create pfile [='pfile_name'] from spfile [='spfile_name']
其中,PFILE_NAME用于指定PFILE的文件全名;SPFILE_NAME用于指定SPFILE的文件全名,如果不指定PFILE文件名,則會在默認路徑下建立默認的PFILE;如果不指定SPFILE文件,則會使用當前實例正在使用的SPFILE文件。需要注意,只有特權用戶才能執行CREATE PFILE命令。

因為SPFILE易于管理,并且可以對其進行備份,所以Oracle建議使用SPFILE。使用PFILE修改了某些初始化參數后,為了將PFILE轉換為SPFILE,可以使用CREATE SPFILE命令建立服務器參數文件,語法如下。
create spfile [='spfile_name'] from pfile [='pfile_name']
其中,SPFILE_NAME用于指定SPFILE文件全名;PFILE_NAME用于指定PFILE文件全名,如果不指定SPFILE文件名,則會在默認路徑下建立SPFILE;如果不指定PFILE文件名,則使用默認的PFILE文件。需要注意,只有特權用戶才能執行CREATE SPFILE命令。
提示:
在執行CREATE SPFILE命令時不需要啟動實例,如果已經啟動了實例,并且實例已經使用了一個服務器端初始化參數文件,則新建的服務器端初始化參數文件不能覆蓋正在使用的那個文件。

啟動實例時,既可以使用PFILE,也可以使用SPFILE。當實例處于運行狀態時,如果要確定實例使用的參數文件類型,首先應以特權用戶登錄,然后顯示初始化參數SPFILE的值。例如:

如果VALUE存在返回值,則表示實例正在使用SPFILE;如果VALUE沒有任何返回結果,則表示實例正在使用PFILE。
3.1.4 顯示和設置初始化參數文件
為了在SQL*Plus中顯示初始化參數,可以使用SHOW PARAMETER命令。該命令會顯示初始化參數的名稱、類型和參數值。
為了顯示所有初始化參數的位置,可以直接執行SHOW PARAMETER命令。例如:

SHOW PARAMETER命令也可以顯示特定的初始化參數。為了顯示特定初始化參數的名稱、類型和參數值,可以在SHOW PARAMETER命令后指定參數名。例如:

當使用SHOW PARAMETER命令顯示初始化參數信息時,只能顯示參數名、類型和參數值,為了取得初始化參數的詳細信息,應該查詢動態性能視圖V$PARAMETER。例如:

ISSES_MODIFIABLE用于標識初始化參數是否可以使用ALTER SESSION命令進行修改,當取值為TRUE時表示可以修改;取值為FALSE則表示不可以修改。iSSYS_MODIFIABLE用于標識初始化參數是否可以使用ALTER SYSTEM命令進行修改,取值IMMEDIATE時表示可以直接修改;取值為DEFERRED時表示需要使用帶有DEFERRED的選項進行修改;取值為FALSE時表示不能進行修改。ISMODIFIED用于標識該初始化參數是否已經被修改,取值為MODIFIED時表示使用ALTER SESSION進行了修改;SYSTEM_MOD表示使用ALTER SYSTEM命令進行了修改;FALSE表示未進行修改。
靜態參數是指只能通過修改參數文件而改變的初始化參數:動態參數是指在數據庫運行時可以使用ALTER SESSION或ALTER SYSTEM命令動態改變的初始化參數。下面的命令將顯示系統的靜態參數。

動態參數是指在數據庫運行過程中,可以動態修改的初始化參數。修改動態參數可以使用ALTER SESSION命令,也可以使用ALTER SYSTEM命令。這兩者之間的區別:ALTER SESSION是對會話的設置,會話結束后就失效了;ALTER SYSTEM修改的是數據庫系統的配置,是全局性質。
在使用ALTER SYSTEM語句時,可以在SET子句中通過SCOPE選項來設置ALTER SYSTEM語句的影響范圍。所謂“影響范圍”,也就是ALTER SYSTEM語句對參數的修改是僅對當前實例有效的,還是永久有效的。
SCOPE選項的取值如下:
※ scope=memory:對參數的修改僅記錄在內存中。對于動態初始化參數,更改將立即生效,并且由于修改不會記錄在服務器端初始化參數文件中,在下次啟動數據庫時,仍然會使用修改前的參數設置。對于靜態參數,則不能使用該選項。
※ scope=spfile:對參數的修改僅記錄在服務器端初始化參數文件中。該選項同時適用于動態參數與靜態參數。修改后的參數只有在下一次啟動數據庫時,更改后才會生效。
※ scope=both:對參數的修改將同時記錄在內存和服務器端初始化參數文件中。對于動態初始化參數,在更改后將立即生效,并且在下一次啟動數據庫時,將使用修改后的參數設置。對于靜態參數,則不能使用這個選項值。在執行ALTER SYSTEM命令時,Oracle默認將SCOPE選項設置為BOTH。
提示:
在修改靜態初始化參數時,只能將SCOPE選項設置為SPFILE。
在修改動態初始化參數時,還可以指定DEFERRED關鍵字,這樣對參數所做的修改將延遲到新的會話產生時才生效。如果數據庫沒有使用服務器端初始化參數文件,在ALTER SYSTEM語句中將SCOPE選項設置為SPFILE或BOTH將會產生錯誤。
例如,利用下面的語句,對動態初始化參數LOG_CHECKPOINT_INTERVAL進行修改,修改結果不僅在當前實例中有效,而且還將記錄在服務器端初始化參數文件中。
SQL> alter system set log_checkpoint_interval=50; 系統已更改。
如果要修改靜態參數,則必須將SCOPE選項設置為SPFILE。例如,修改靜態初始化參數DB_FILES。

- 軟件安全技術
- Getting Started with Gulp(Second Edition)
- The Android Game Developer's Handbook
- iOS開發實戰:從零基礎到App Store上架
- PostgreSQL 11從入門到精通(視頻教學版)
- 21天學通C++(第6版)
- Visualforce Developer’s guide
- 實戰Python網絡爬蟲
- Python機器學習開發實戰
- 計算機系統解密:從理解計算機到編寫高效代碼
- Android開發權威指南(第二版)
- C++ Data Structures and Algorithm Design Principles
- Learning C# by Developing Games with Unity 3D Beginner's Guide
- 瘋狂Java講義精粹
- 代碼揭秘