一、服務器初始化參數文件概述
oracle的初始化參數文件保存了數據庫實例創建和啟動時所必須的初始化參數配置信息。
初始化參數文件損壞,數據庫無法啟動。
11g中,初始化參數有341個,分顯式和隱式兩種。
9i之前的版本,將顯式參數及其存儲在一個文本文件中,稱之為文本初始化參數文件。默認名稱為INIT<SID>.ORA。默認位置為%ORACLE_HOME%/database目錄。
11g數據庫在創建的時候,自動在%ORACLE_DATABASE%/admin/<SID>/pfile目錄。
文本初始化參數文件時本地的一個初始化參數文件,無論啟動本地數據庫還是遠程數據庫,都需要讀取本地的一個文本初始化參數文件,並使用其中的參數設置來配置數據庫實例。因此要遠程啟動數據庫,必須在遠程主機中保存一份初始化參數文件的副本。此外,文本初始化參數文件的修改必須通過管理手動進行。
由於以上原因,9i之后的數據庫中引入了服務器初始化參數文件。服務器初始化參數文件是一個保存在數據庫服務器端的二進制文件。實例會自動從服務器中讀取服務器初始化參數文件。此外,在數據中執行alter system語句對初始化參數進行了修改,在默認情況下(socope=both),都會永久的記錄在服務器初始化參數文件中。
服務器初始化參數文件是使用create spfile 語句基於已有的文本初始化參數文件創建的。在使用dbca創建數據庫時自動創建服務器初始化參數文件。服務器初始化參數文件默認名稱為SPFILE<SID>.ORA。默認位置存放於%ORACLE_HOME%/dbs目錄。
#####可以使用記事本或者寫字板等方式打開服務器初始化參數文件,並查看其中內容。但是不可以修改其中內容。否則導致文件損壞。
在執行startup語啟動數據庫時,系統按照下列順序尋找初始化參數文件:
1、檢查是否用pfile參數指定了文本初始化參數文件
2、如果沒有使用pfile參數,則在默認位置尋找默認名稱服務器初始化參數文件
3、沒有找到默認的服務器初始化參數文件,則在默認的位置尋找默認名稱的文本初始化參數文件
可以用show parameter spfile 命令或者查詢動態性能視圖v$parameter查看當前數據庫所使用的服務器初始化參數文件
二、創建服務器初始化參數文件
1、創建一個文本初始化參數文件,文件中包含顯式初始化參數,並將該文件存放在數據庫服務器上。
文本初始化參數文件創建時需要注意以下事項:
*初始化參數文件中只對需要設置的初始化參數進行設置,其他采用系統默認
*初始化參數文件只能包括賦值語句和注釋語句,注釋語句以#開頭,單行
*初始化參數文件的參數部分前后次序,參數名稱與值不區分大小寫
*如果一行設置多個參數,需要用空格隔開
*如果參數具有多個值,將這些值用括號括起來,用逗號隔開
*對於具有字符串類型值的參數,如果字符創中包含空格或者制表符,必須使用單引號或雙引號字符串引起來
2、以sysoper或者sysdba身份連接到oracle數據庫
3、利用文本初始化參數文件創建服務器初始化參數文件
create spfile=[='spfile name'] from pfile[='spfile name']|memory;
三、常用初始化參數:
processes = 150 說明: 指定可同時連接到一個 Oracle Server 上的操作系統用戶進程的最大數量。該值應允許執行所有后台進程, 如: 作業隊列 (SNP) 進程和並行執行 (Pnnn) 進程。 值范圍: 6 到根據操作系統而定的一個值。 默認值: 由 PARALLEL_MAX_SERVERS 確定
timed_statistics = TRUE 說明: 收集操作系統的計時信息, 這些信息可被用來優化數據庫和 SQL 語句。要防止因從操作系統請求時間而引起的開銷, 請將該值設置為零。將該值設置為 TRUE 對於查看長時間操作的進度也很有用。 值范圍: TRUE | FALSE 默認值: FALSE
shared_pool_size = 50331648 說明: 以字節為單位, 指定共享池的大小。共享池包含如: 共享游標, 存儲的過程, 控制結構和並行執行消息緩沖區等對象。較大的值能改善多用戶系統的性能。 值范圍:300 KB - 根據操作系統而定。 默認值: 如果是 64 位操作系統, 值為 64MB; 其他情況下, 值為 16MB。
large_pool_size = 8388608 說明 : 指定大型池的分配堆的大小, 它可被共享服務器用作會話內存, 用作並行執行的消息緩沖區以及用作 RMAN備份和恢復的磁盤 I/O 緩沖區。 值范圍: 600K (最小值); >= 20000M (最大值是根據操作系統而定的)。 默認值 : 0, 除非配置了並行執行或 DBWR_IO_SLAVES
java_pool_size = 33554432 說明: 以字節為單位, 指定 Java 存儲池的大小, 它用於存儲 Java 的方法和類定義在共享內存中的表示法, 以及在調用結束時移植到 Java 會話空間的 Java 對象。 值范圍: 根據操作系統而定。 默認值: 根據操作系統而定
control_files = d:\oracle\oradata\mydb\CONTROL01.CTL, d:\oracle\oradata\mydb\CONTROL02.CTL, d:\oracle\oradata\mydb\CONTROL03.CTL 說明: 指定一個或多個控制文件名。Oracle 建議對於不同設備或 OS 文件鏡象使用多個文件。 值范圍: 1 - 8 文件名 (帶路徑名)。
默認值: 根據操作系統而定
db_block_size = 8192 說明: 一個 Oracle 數據庫塊的大小 (字節)。該值在創建數據庫時設置, 而且此后無法更改。
值范圍: 1024 - 65536 (根據操作系統而定)。 默認值: 2048 (根據操作系統而定)
db_cache_size = 25165824 說明: 為高速緩存指定標准塊大小的緩沖區。 值范圍: 至少 16M。 默認值: 48M
compatible = 9.2.0.0.0 說明: 允許您使用一個新的發行版, 同時保證與先前版本的向后兼容性。 值范圍: 默認為當前發行版。 默認值: 由發行版確定
db_file_multiblock_read_count= 16 說明: 在涉及一個完全連續掃描的一次 I/O 操作過程中讀取的塊的最大數量。 值范圍: 根據操作系統而定。 默認值: 8
fast_start_mttr_target = 300 說明: 指定從單個數據庫例程崩潰中恢復所需的時間 (估計秒數)。FAST_START_MTTR_TARGET 將在內部被轉換為一組參數, 用於修改數據庫的操作, 從而將它的恢復時間控制在總 "恢復平均時間 (MTTR)" 中的一定范圍之內。只有具有 "快速啟動故障恢復" 功能的版本才支持此參數。 值范圍: [0, 3600]。它將計算數據緩沖區高速緩存條目數之上, 且大於最大日志中的塊數的限值。 默認值: 0
undo_management = AUTO 說明: 指定系統應使用哪種撤消空間管理模式。如果設置為 AUTO, 例程將以 SMU 模式啟動。否則將以 RBU 模式啟動。在RBU 模式下, 撤消空間會象回退段一樣在外部分配。在 SMU 模式下, 撤消空間會象撤消表空間一樣在外部分配。 值范圍: AUTO 或 MANUAL 默認值: 如果啟動第一個例程時忽略了 UNDO_MANAGEMENT 參數, 則將使用默認值 MANUAL, 並且例程將以 RBU 模式啟動。如果這不是第一個例程, 則將按其他現有例程啟動時使用的撤消模式來啟動該例程。
undo_tablespace = UNDOTBS1 說明: 撤消表空間僅用於存儲撤消信息。UNDO_TABLESPACE 僅允許在系統管理撤消 (SMU)模式下使用。例程將使用指定的撤消表空間, <undoname>。如果該表空間不存在, 或不是撤消表空間, 或正在由另一例程使用, 則例程 STARTUP 將失敗。 默認值: 每個數據庫都包含 0 個或更多的撤消表空間。在 SMU 模式下, 將為每個 ORACLE 例程分配一個 (且僅限一個) 撤消表空間。
undo_retention = 10800 說明: UNDO_RETENTION 參數用來指定要在數據庫中保留的已提交的撤消信息總量。可在例程啟動時設置該參數值。可以計算滿足撤消保留要求所需的撤消空間量: UndoSpace = RD * UPS, 其中 UndoSpace 以撤消塊數來表示, RD 用以秒為單位的 UNDO_RETENTION 來表示, UPS 以每秒撤消塊數來表示。 值范圍: 所允許的最大值為 (2 ** 32) 秒。 默認值: 30 秒。
remote_login_passwordfile= EXCLUSIVE 說明: 指定操作系統或一個文件是否檢查具有權限的用戶的口令。如果設置為 NONE, Oracle 將忽略口令文件。如果設置為EXCLUSIVE, 將使用數據庫的口令文件對每個具有權限的用戶進行驗證。如果設置為 SHARED, 多個數據庫將共享 SYS 和 INTERNAL 口令文件用戶。 值范圍:NONE | SHARED | EXCLUSIVE 默認值: NONE
db_domain = 說明: 指定數據庫名的擴展名 (例如:US.ORACLE.COM) 為使一個域中創建的數據庫名唯一, 建議指定該值。 值范圍: 由句點分隔的任何字符串, 最長可以有 128 個字符。 默認值: WORLD
instance_name = mydb 說明: 在多個例程使用相同服務名的情況下, 用來唯一地標識一個數據庫例程。INSTANCE_NAME 不應與 SID 混淆, 它實際上是對在一台主機上共享內存的各個例程的唯一標識。 值范圍: 任何字母數字字符。
默認值: 數據庫 SID
dispatchers = (PROTOCOL=TCP) (SERVICE=mydbXDB) 說明 : 為設置使用共享服務器的共享環境而設置調度程序的數量和類型。可以為該參數指定幾個選項。有關詳細信息, 請參閱“Oracle8i 管理員指南”和“Oracle Net Administrator's Guide”。這是字符串值的一個示例: '(PROTOCOL=TCP)(DISPATCHERS=3)'。 值范圍: 參數的有效指定值。 默認值 : NULL
job_queue_processes = 10 說明: 只用於復制環境。它指定每個例程的 SNP 作業隊列進程的數量 (SNP0, ... SNP9, SNPA, ... SNPZ)。要自動更新表快照或執行由 DBMS_JOB 創建的請求, 請將該參數設置為 1 或更大的值。 值范圍: 0 到 36 默認值: 0
hash_join_enabled = TRUE 說明: 如果設置為 TRUE, 優化程序將在計算最有效的聯接方法時考慮散列聯接。Oracle 建議數據倉庫應用程序應使用 TRUE值。 值范圍: TRUE | FALSE 默認值: TRUE
background_dump_dest = d:\oracle\admin\mydb\bdump 說明: 指定在 Oracle 操作過程中為后台進程 (LGWR, DBW n 等等) 寫入跟蹤文件的路徑名(目錄或磁盤)。它還定義記錄着重要事件和消息的數據庫預警文件的位置。 值范圍: 任何有效的目錄名。 默認值: ORACLE_HOME/rdbms/log (根據操作系統而定)
user_dump_dest = d:\oracle\admin\mydb\udump 說明: 為服務器將以一個用戶進程身份在其中寫入調試跟蹤文件的目錄指定路徑名。例如, 該目錄可這樣設置: NT 操作系統上的 C:/ORACLE/UTRC; UNIX 操作系統上的 /oracle/utrc; 或 VMS 操作系統上的DISK$UR3:[ORACLE.UTRC]。 值范圍: 一個有效的本地路徑名, 目錄或磁盤。 默認值: 根據操作系統而定
core_dump_dest = d:\oracle\admin\mydb\cdump 說明: 指定核心轉儲位置的目錄名 (用於 UNIX)。 值范圍: 任何有效的目錄名。 默認值: ORACLE_HOME/dbs
sort_area_size = 524288 說明: SORT_AREA_SIZE 以字節為單位, 指定排序所使用的最大內存量。排序完成后, 各行將返回, 並且內存將釋放。增大該值可以提高大型排序的效率。如果超過了該內存量, 將使用臨時磁盤段。 值范圍: 相當於 6 個數據庫塊的值 (最小值) 到操作系統確定的值 (最大值)。 默認值: 根據操作系統而定
db_name = mydb 說明: 一個數據庫標識符, 應與CREATE DATABASE 語句中指定的名稱相對應。 值范圍: 任何有效名稱最多可有 8 個字符。 默認值: 無 (但應指定)
open_cursors = 300 說明: 指定一個會話一次可以打開的游標 (環境區域) 的最大數量, 並且限制 PL/SQL 使用的 PL/SQL游標高速緩存的大小, 以避免用戶再次執行語句時重新進行語法分析。請將該值設置得足夠高, 這樣才能防止應用程序耗盡打開的游標。 值范圍: 1 - 操作系統限制值。 默認值: 64
star_transformation_enabled= FALSE 說明: 確定基於成本的查詢轉換是否將被應用到星型查詢中。如果設置為 TRUE, 優化程序將考慮將基於成本的轉換應用於星型查詢中; 如果設置為 FALSE, 將不使用任何轉換; 如果設置為 TEMP_DISABLE, 將考慮查詢轉換, 但不使用臨時表。 值范圍: TRUE | FALSE | TEMP_DISABLE 默認值: FALSE
query_rewrite_enabled = FALSE 說明: 啟用或禁用對實體化視圖的查詢重寫。一個特定實體化視圖只在如下條件下啟用: 會話參數和單獨實體化視圖均已啟用, 並且基於成本的優化已啟用。 值范圍: TRUE | FALSE 默認值: FALSE
pga_aggregate_target = 25165824 說明: 指定連接到例程的所有服務器進程的目標 PGA 總內存。請在啟用自動設置工作區之前將此參數設置為一個正數。這部分內存不駐留在SGA 中。數據庫將此參數值用作它所使用的目標 PGA 內存量。設置此參數時, 要將 SGA 從可用於 Oracle例程的系統內存總量中減去。然后可將剩余內存量分配給 pga_aggregate_target。 值范圍: 整數加字母 K, M 或 G, 以將此限值指定為千字節, 兆字節或千兆字節。最小值為 10M, 最大值為 4000G 默認值: "未指定", 表示完全禁用對工作區的自動優化。
aq_tm_processes = 1 說明: 如果大於零, 就會啟用對隊列消息的時間監視。該時間值可用於指定消息的延遲和失效屬性 (用於應用程序的開發)。 值范圍: 0 - 10
默認值: 0
四、修改初始化參數:
1、alter session set····· 回話級修改
2、alter system set·····
**動態初始化參數:修改后立即生效,作用於當前數據庫實例
**靜態初始化參數:初始化參數修改后在當前實例中不會生效,參數被保存到服務器初始化參數文件中,下次重新啟動數據庫生效
scope=spfile。只能修改服務器初始化參數文件的參數值,對於當前數據庫實例沒有影響。適用於動態參數和靜態參數的修改
scope=memory。只能修改內存中的初始化參數值。只適合於動態參數的修改,當前實例立即生效
scope=both。 修改內存中的和初始化參數文件中的。是適合動態參數文件修改
3、可用alter system resetparameter_name=parameter_value;清除某個顯式參數。清除后恢復系統默認
五、導出服務器初始化文件參數
可以使用create pfile語句將服務器初始化參數文件導出為一個文本初始化參數文件。下列情況下可以考慮導出:
1、創建服務器初始化參數文件的備份
2、為了便於診斷數據庫故障原因,需要獲取當前數據庫實例使用的所有初始化參數的設置信息。其效果等同於執行show parameter 命令或查詢動態性能視圖v$parameter
3、為了修改服務器初始化參數文件中的參數值,先將服務器初始化參數文件導出文本初始化參數文件,然后對於文本初始化參數文件中的參數進行手動修改,根據修改后的文本化參數文件,創建新的服務器初始化參數文件。
六、恢復丟失或損壞的服務器初始化參數文件
1、如果數據庫處於運行狀態,可以執行create spfile from memory 語句,根據當前內存中的初始化參數重建服務器初始化參數
2、如果有有效的文本初始化參數,可以用文本參數進行創建:create spfile from pfile 重建服務器初始化參數
3、利用服務器初始化參數文件的備份恢復丟失或損壞的服務器化參數文件
4、上述方法都不可用時,可以首先利用報警文件中顯示的初始化參數值(數據庫啟動時會使用初始化參數文件寫入報警文件) 重建文本的初始化參數文件,然后利用create spfile from pfile的方式。
