1、pfile和spfile
Oracle中的參數文件是一個包含一系列參數以及參數對應值的操作系統文件。它們是在數據庫實例啟動時候加載的,決定了數據庫的物理 結構、內存、數據庫的限制及系統大量的默認值、數據庫的各種物理屬性、指定數據庫控制文件名和路徑等信息,是進行數據庫設計和性能調優的重要文件。可以分為兩種類型:
pfile: 初始化參數文件(Initialization Parameters Files),Oracle 9i之前,ORACLE一直采用pfile方式存儲初始化參數,pfile 默認的名稱為“init+例程名.ora”文件路徑:/data/app/oracle/product/12.1.0/dbhome_1/dbs,這是一個文本文件,可以用任何文本編輯工具打開。
spfile:服務器參數文件(Server Parameter Files),從Oracle 9i開始,Oracle引入了Spfile文件,spfile 默認的名稱為“spfile+例程名.ora”文件路徑:/data/app/oracle/product/12.1.0/dbhome_1/dbs 以二進制文本形式存在,不能用vi編輯器對其中參數進行修改,只能通過SQL命令在線修改。
從操作系統上可以看到這兩者的區別,初始化參數文件為ASCII文本文件,Spfile為數據文件。
[oracle@xqzt ~]$ cd /data/app/oracle/product/12.1.0/dbhome_1/dbs/ [oracle@xqzt dbs]$ ls hc_orcl.dat init.ora lkORCL orapworcl spfileorcl.ora [oracle@xqzt dbs]$ file init.ora init.ora: ASCII English text [oracle@xqzt dbs]$ file spfileorcl.ora spfileorcl.ora: data [oracle@xqzt dbs]$
2、使用spfile的好處
1、spfile改正了pfile管理混亂的問題,在多結點的環境里,pfile會有多個image,啟動時候需要跟蹤最新的image。這是個煩瑣的過程。用spfile以后,所有參數改變都寫到spfile里面(只要定義scope=spfile或both),參數配置有個權威的來源。
2、9i以前一般都是要備份pfile后再來做參數的修改,而且pfile的修改必須重啟實例才能生效。非常的不方便;在9i以后的spfile就可以同通過命令修改指定的參數了,而且有很多參數都不用重啟數據庫,能夠在線生效,這個在線生效的參數會隨着數據庫的版本增高而增加。如果參數修改有問題數據庫起不來了可以在 nomount狀態下創建成pfile再修改回來即可。)
3、如何查看Spfile與pfile的目錄位置?
方法一:
SQL> SELECT NAME, VALUE, DISPLAY_VALUE FROM V$PARAMETER WHERE NAME ='spfile'; NAME -------------------------------------------------------------------------------- VALUE -------------------------------------------------------------------------------- DISPLAY_VALUE -------------------------------------------------------------------------------- spfile /data/app/oracle/product/12.1.0/dbhome_1/dbs/spfileorcl.ora /data/app/oracle/product/12.1.0/dbhome_1/dbs/spfileorcl.ora
方法二: Show parameter spfile
4、判斷Oracle啟動時使用spfile還是pfile?
1、 通過v$spparameter視圖
使用spfile啟動數據庫,我們可以看到查詢出來的結果是spfile
SQL> select decode(count(*),1,'spfile','pfile') from v$spparameter where rownum=1 and isspecified ='TRUE'; DECODE ------ spfile
2、 通過查看spfile、pfile參數
系統當前為從spfile啟動,在查看show parameter pfile和show parameter spfile 都能看到spfile參數文件的路徑。
關閉數據庫,從pfile啟動,startup pfile='/data/app/oracle/product/12.1.0/dbhome_1/dbs/initorcl.ora'; 再次執行上述的兩個語句
我們在這里可以很明顯的發現,使用pfile啟動的數據庫,我們無論是查看show parameter pfile還是show parameter spfile 都無法看到pfile參數文件的路徑。
5、pfile和spfile的互相創建
create spfile[='xxxxx'] from pfile[='xxxx'];
create pfile[='xxxxx'] from spfile[='xxxx'];
SQL> create pfile from spfile ; File created. SQL>
通過spfile創建pfile文件(此時會在$ORACLE_HOME/dbs目錄下生成pfile:initorcl.ora),當然你也可以指定參數文件的位置。
[oracle@xqzt dbs]$ pwd /data/app/oracle/product/12.1.0/dbhome_1/dbs [oracle@xqzt dbs]$ ls hc_orcl.dat lkORCL spfileorcl.ora init.ora initorcl.ora orapworcl
6、使用pfile/spfile 啟動數據庫
1、startup 啟動次序 spfile優先於pfile。查找文件的順序是 spfileSID.ora-〉spfile.ora-〉initSID.ora-〉init.ora(spfile優先於pfile)。
2、startup pfile='文件目錄' 使用pfile啟動,則需指定完整路徑,或刪除spfile.
SQL> startup pfile='/data/app/oracle/product/12.1.0/dbhome_1/dbs/initorcl.ora'; ORACLE instance started. Total System Global Area 2466250752 bytes Fixed Size 2927384 bytes Variable Size 1426064616 bytes Database Buffers 1023410176 bytes Redo Buffers 13848576 bytes Database mounted. Database opened. SQL>
3、 如果在數據庫的$ORACLE_HOME/dbs/目錄下既有spfile又有pfile,使用spfile啟動數據庫,不需要指定參數文件路徑(因為數據庫會優先選擇spfile啟動),
4、 如果參數文件不在$ORACLE_HOME/dbs/目錄下,無論是通過spfile或pfile啟動均需要指定完整路徑。
7、spfile參數的三種scope:
1. scope=spfile: 對參數的修改記錄在服務器初始化參數文件中,修改后的參數在下次啟動DB時生效。適用於動態和靜態初始化參數。
2. scope=memory: 對參數的修改記錄在內存中,對於動態初始化參數的修改立即生效。在重啟DB后會丟失,會復原為修改前的參數值。
3. scope=both: 對參數的修改會同時記錄在服務器參數文件和內存中,對於動態參數立即生效,對靜態參數不能用這個選項
參數類型 |
spfile |
memory |
both |
靜態參數 |
可以,重啟服務器生效 |
不可以 |
不可以 |
動態參數 |
可以,重啟服務器生效 |
可以,立即生效,重啟服務失效 |
可以,立即生效,重啟服務器仍然有效果 |
如果使用了服務器參數文件,則在執行alter system語句時,scope=both是default的選項。
如果沒有使用服務器參數文件,而在執行alter system語句時指定scope=spfile|both都會出錯。
8、修改參數例子
scope=both: 對於動態參數立即生效
SQL> show parameter pga; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ pga_aggregate_limit big integer 2G pga_aggregate_target big integer 500M SQL> alter system set pga_aggregate_target = 600m scope=both; System altered. SQL> show parameter pga; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ pga_aggregate_limit big integer 2G pga_aggregate_target big integer 600M
對靜態參數不能使用scope=both
SQL> alter system set processes = 100 scope=both; alter system set processes = 100 scope=both * ERROR at line 1: ORA-02095: specified initialization parameter cannot be modified SQL>
靜態參數 scope=spfile 修改完后重啟數據庫能生效
SQL> show parameter processes NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ aq_tm_processes integer 1 db_writer_processes integer 1 gcs_server_processes integer 0 global_txn_processes integer 1 job_queue_processes integer 1000 log_archive_max_processes integer 4 processes integer 300 SQL> alter system set processes = 100 scope=spfile; System altered. SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> startup ORACLE instance started. Total System Global Area 2466250752 bytes Fixed Size 2927384 bytes Variable Size 1358955752 bytes Database Buffers 1090519040 bytes Redo Buffers 13848576 bytes Database mounted. Database opened. SQL> show parameter processes NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ aq_tm_processes integer 1 db_writer_processes integer 1 gcs_server_processes integer 0 global_txn_processes integer 1 job_queue_processes integer 1000 log_archive_max_processes integer 4 processes integer 100
scope=memory 對於動態參數,可以實現立即生效,下次啟動失效。
SQL> alter system set pga_aggregate_target = 600m scope=memory; System altered. SQL>
如果使用的是pfile,則無法通過命令進行修改,會報ORA-02095或32001錯誤。
SQL> startup pfile='/data/app/oracle/product/12.1.0/dbhome_1/dbs/initorcl.ora'; ORACLE instance started. Total System Global Area 2466250752 bytes Fixed Size 2927384 bytes Variable Size 1426064616 bytes Database Buffers 1023410176 bytes Redo Buffers 13848576 bytes Database mounted. Database opened. SQL> alter system set processes = 100; alter system set processes = 100 * ERROR at line 1: ORA-02095: specified initialization parameter cannot be modified SQL> alter system set processes = 100 scope=spfile; alter system set processes = 100 scope=spfile * ERROR at line 1: ORA-32001: write to SPFILE requested but no SPFILE is in use SQL> alter system set processes = 100 scope=both; alter system set processes = 100 scope=both * ERROR at line 1: ORA-02095: specified initialization parameter cannot be modified SQL> alter system set processes = 100 scope=memory; alter system set processes = 100 scope=memory * ERROR at line 1: ORA-02095: specified initialization parameter cannot be modified
9、參數列表:
參數:
# Cache and I/O 高速緩存和 I/O
###########################################
db_block_size=8192 指定數據塊大小為8KB
db_cache_size=33554432 指定數據緩沖區為32MB,該值越大,可以減少對數據庫文件的I/O次數,提高效率
db_file_multiblock_read_count=16
###########################################
# Cursors and Library Cache 游標和庫高速緩存
###########################################
open_cursors=300 指定一個會話一次可以打開的游標的最大數量為300,應將該值設置得足夠高,這樣才能防止應用程序耗盡打開的游標
###########################################
# Database Identification 數據庫標識
###########################################
db_domain="" 數據庫域名為mynet,加上數據庫名稱db_name構成全局數據庫名稱
db_name=cicro 數據庫名稱為myoracle
###########################################
# Diagnostics and Statistics 診斷和統計
###########################################
background_dump_dest=/opt/oracle/admin/cicro/bdump 后台進程跟蹤文件目錄
core_dump_dest=/opt/oracle/admin/cicro/cdump 核心轉儲跟蹤文件目錄
timed_statistics=TRUE 收集操作系統的計時信息,這些信息可被用來優化數據庫和 SQL 語句
user_dump_dest=/opt/oracle/admin/cicro/udump 用戶進程跟蹤文件目錄
###########################################
# File Configuration
control_files=("/opt/oracle/oradata/cicro/control01.ctl", "/opt/oracle/oradata/cicro/control02.ctl",
"/opt/oracle/oradata/cicro/control03.ctl") 指定控制文件的路徑及文件名
###########################################
###########################################
# Instance Identification 網絡注冊
###########################################
instance_name=test 例程名稱為test
###########################################
# Job Queues
###########################################
job_queue_processes=10
###########################################
# MTS 多線程服務器配置標識,在Oracle 9i里稱為共享服務器配置
###########################################
dispatchers="(PROTOCOL=TCP) (SERVICE=testXDB)" 多線程服務器配置
###########################################
# Miscellaneous 其他
###########################################
aq_tm_processes=1
compatible=9.2.0.0.0 兼容版本9.2.0
###########################################
# Optimizer
###########################################
hash_join_enabled=TRUE
query_rewrite_enabled=FALSE
star_transformation_enabled=FALSE
db_name=cicro
###########################################
###########################################
# Pools 池
###########################################
java_pool_size=83886080 指定Java存儲池的大小為32MB,用於存儲 Java 的方法、類定義和Java對象。
large_pool_size=16777216 指定大型池的大小為1MB, 用於共享服務器的會話內存、並行執行的消息緩沖區以及RMAN備份和恢復的磁盤 I/O 緩沖區。
shared_pool_size=83886080 指定共享池的大小為32MB,用於存儲共享游標、存儲的過程、控制結構和並行執行消息緩沖區等對象。較大的值能改善多用戶系統的性能.
###########################################
# Processes and Sessions 進程和會話
###########################################
processes=150 指定可同時連接到一個Oracle Server上的操作系統用戶進程的最大數量為150
###########################################
# Redo Log and Recovery 重做日志和恢復
###########################################
fast_start_mttr_target=300 指定從單個數據庫例程崩潰中恢復所需的時間為300秒
###########################################
# Security and Auditing 安全與驗證
###########################################
remote_login_passwordfile=EXCLUSIVE 指定操作系統或口令文件是否具有檢查用戶口令的權限。設置為EXCLUSIVE, 將使用數據庫的口令文件對每個具有權限的用戶進.
###########################################
# Sort, Hash Joins, Bitmap Indexes 排序, 散列聯接, 位圖索引
###########################################
pga_aggregate_target=25165824
sort_area_size=524288 指定排序區使用的最大內存量為512KB。排序完成后, 各行將返回, 並且內存將釋放。增大該值可以提高大型排序的效率。
###########################################
# System Managed Undo and Rollback Segments 系統管理的撤消和回退段
###########################################
undo_management=AUTO 指定系統使用的撤消空間管理方式為SMU 方式,在SMU方式下, 撤消空間會像撤消表空間一樣在外部分配.
undo_retention=10800
undo_tablespace=UNDOTBS1 指定回滾表空間為UNDOTBS
參考
http://www.itpub.net/thread-1608401-1-1.html