我們知道數據庫的參數文件有spfile 和pfile。 RAC 的參數文件比較特殊。 因為默認情況下,RAC的spfile 是放在共享設備上(RAW設備或者ASM磁盤組)。而在各節點的pfile文件里只記錄了這個spfile的位置。 所以在用spfile 生成pfile 或者修改相關參數值時都需要特別注意。
如果我們直接使用: create pfile from spfile 命令穿件pfile,那么生成的pfile 文件將覆蓋原有$ORACLE_HOME/dbs 目錄下的pfile 文件。 而在之前的pfile文件里面值保留了一條指向spfile存放位置的記錄。 這樣修改之后,就會造成數據庫啟動時會因為找不到spfile文件而讀取本地的pfile文件,而不是共享設備上的spfile文件。這樣對參數管理上就會帶來麻煩,也帶來其他的隱患。
所以對於RAC,要慎用 create pfile from spfile 來創建pfile 文件, 在創建的時候,盡量指定pfile的生成位置。
先來看一下$ORACLE_HOME/dbs 下的pfile文件內容:
[oracle@rac1 bin]$ cd $ORACLE_HOME/dbs
[oracle@rac1 dbs]$ ls
ab_+ASM1.dat hc_orcl1.dat initdw.ora initorcl1.ora orapworcl orapworcl2
hc_+ASM1.dat init+ASM1.ora init.ora orapw+ASM1 orapworcl1 snapcf_orcl1.f
[oracle@rac1 dbs]$ more initorcl1.ora
SPFILE='+DATA/orcl/spfileorcl.ora' -- 本地的pfile 只有一條記錄
[oracle@rac1 dbs]$
我們現在看一下spfile 文件的內容:
[oracle@rac1 bin]$ export ORACLE_SID=orcl1
[oracle@rac1 bin]$ sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on Thu Sep 23 12:04:24 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn / as sysdba;
Connected.
SQL> show parameter spfile
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string +DATA/orcl/spfileorcl.ora -- 這里記錄spfile 位置
SQL> show parameter -- 查看所有參數
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
O7_DICTIONARY_ACCESSIBILITY boolean FALSE
active_instance_count integer
aq_tm_processes integer 0
archive_lag_target integer 0
asm_diskgroups string
asm_diskstring string
asm_power_limit integer 1
audit_file_dest string /u01/app/oracle/admin/orcl/adump
audit_sys_operations boolean FALSE
audit_syslog_level string
所有參數比較多,我們把它轉成pfile后在查看:
SQL> create pfile='/u01/dave.ora' from spfile;
File created.
打開dave.ora 文件:
[oracle@rac1 u01]$ more dave.ora
orcl2.__db_cache_size=88080384
orcl1.__db_cache_size=96468992
orcl2.__java_pool_size=4194304
orcl1.__java_pool_size=4194304
orcl2.__large_pool_size=4194304
orcl1.__large_pool_size=4194304
orcl2.__shared_pool_size=79691776
orcl1.__shared_pool_size=71303168
orcl2.__streams_pool_size=0
orcl1.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/orcl/adump'
*.background_dump_dest='/u01/app/oracle/admin/orcl/bdump'
*.cluster_database_instances=2
*.cluster_database=TRUE
*.compatible='10.2.0.1.0'
*.control_files='+DATA/orcl/controlfile/current.280.730181163','+FLASH_RECOVERY_AREA/orcl/controlfile/current.260.730181165'
*.core_dump_dest='/u01/app/oracle/admin/orcl/cdump'
*.db_block_size=8192
*.db_create_file_dest='+DATA'
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='orcl'
*.db_recovery_file_dest='+FLASH_RECOVERY_AREA'
*.db_recovery_file_dest_size=3670016000
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
orcl2.instance_number=2
orcl1.instance_number=1
*.job_queue_processes=10
orcl2.log_archive_dest_1='LOCATION=/u02/rac2_arch'
orcl1.log_archive_dest_1='LOCATION=/u02/rac1_arch'
orcl2.log_archive_dest_2='SERVICE=orcl1'
orcl1.log_archive_dest_2='service=orcl2'
*.log_archive_dest_state_2='ENABLE'
*.open_cursors=300
*.pga_aggregate_target=59768832
*.processes=150
*.remote_listener='LISTENERS_ORCL'
*.remote_login_passwordfile='exclusive'
*.sga_target=179306496
orcl1.standby_archive_dest='/u02/rac2_arch'
orcl2.standby_archive_dest='/u02/rac1_arch'
orcl2.thread=2
orcl1.thread=1
*.undo_management='AUTO'
orcl2.undo_tablespace='UNDOTBS2'
orcl1.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/u01/app/oracle/admin/orcl/udump'
從上面的結果,我們發現參數的最前面都有一個標識符:orcl1, orcl2 和 *。 這些符號是用來區分參數的。
如:
*.undo_management='AUTO' -- 所有節點通用的參數
orcl2.undo_tablespace='UNDOTBS2' -- 代表orcl2的參數
orcl1.undo_tablespace='UNDOTBS1' -- 代表orcl1 的參數
因為spfile區分實例,所以我們在修改的時候要特別注意指定實例,如果不指定,就會修改所有節點的參數。
如:
alter system set sga_target=1024M scope=spfile sid='orcl1';
alter system set sga_target=1024M scope=spfile sid='*';
注意:參數修改完成后,需要重啟才能生效。
RAC 與單實例不同的一些參數:
(1)cluster_database
一般情況下,該參數在rac各實例下應該設置為true。在一些特別情況下,比如upgrade等,需要將該參數設置成false。
(2)db_name/ db_unique_name/ instance_name
各節點db_name 需要一致,db_unique_name 也需要一致(這與standby是不同的)。而instance_name配置成各個節點的實例名稱。
(3)instance_number
該參數表示節點上實例的實例號。
(4) thread
該參數用來標示實例使用的redo線程。線程號與節點號/實例號沒有直接關聯。
(5) local_listener
該參數用來手工注冊監聽。為解決ORA-12514錯誤,可以設置該參數。
(6) remote_listener
該參數用來進行服務器端負載均衡配置。在配置RAC 負載均衡的服務端均衡時需要設置該參數。具體可以參考Blog:
Oracle RAC LoadBalance
http://blog.csdn.net/tianlesoftware/archive/2010/03/05/5347775.aspx
(7) cluster_interconnects
該參數用來指定集群中IPC通信的網絡。如果集群中有多種網絡用於高速互聯,需要配置該參數。對於多個IP地址,用冒號將其隔開。對於集群中當前使用的互聯地址,可以查詢視圖gv$cluster_interconnects或着oradebug ipc來查看。
(8) max_commit_propagation_delay
該參數用於配置SCN的產生機制。在rac下,SCN的同步有2種模式:
(1) Lamport Scheme.該模式下,由GES 管理SCN 的傳播同步,max_commit_propagation_delay 表示SCN 同步所允許的最大時間。在該模式下,全局SCN並非完全同步,這在高並發的OLTP系統中,可能會對應用造成一定的影響。
(2) Broadcast on Commit scheme. 該模式下,一旦任何一個實例上事務發布commit,都立即同步SCN到全局。
在10g R1下,該參數默認數值為700,即采用Lamport Scheme模式。而在10g R2下,該參數默認數值為0,采用Broadcast on Commit scheme模式 (設置小於700的某一值,都將采用該模式) 。采用何種方式,可以從alert.log中獲知。該參數值需要每個節點保持一致。
轉:http://blog.csdn.net/tianlesoftware/article/details/5902591