题记:在RAC环境下,由于多节点不同实例在启动时都需要依赖参数文件,所以其管理更加复杂。本节就RAC下参数文件管理进行阐述。
RAC下共享spfile
RAC环境下数据库在启动时,首先尝试寻找Cluster里面Database资源的Spfile配置选项。如果找不到对应的文件,那么继续按照单实例的寻找顺序在默认位置查找。
建议在RAC环境下使用共享的SPFILE,并在默认位置保留一个PFILE,里面通过SPFILE参数指向共享的SPFILE。默认在RAC安装配置完成,就自动生成了一个PFILE文件。
下面是RAC环境中一个参数文件的设置范例。
[oracle@raclinux1 ~]$ cd $ORACLE_HOME/dbs
[oracle@raclinux1 dbs]$ more initRACDB1.ora
SPFILE='+MY_DG2/RACDB/spfileRACDB.ora'
在此环境中,需要谨慎使用createspfile from pfile的命令,很多朋友因为草率地执行这样的操作而导致数据库故障。在ASM或RAC环境中,通常的init<sid>.ora文件中只有如上示例的一行,如果此时执行createspfile from pfile命令,则新创建的SPFILE文件将也只有这样一行信息,数据库将无法启动。
使用ASM存储参数文件
在ASM环境中,参数文件可以存储在ASM磁盘组上,而在Oracle RAC环境中,默认使用存储在ASM上的参数文件,在维护RAC环境的参数文件时要格外谨慎。
以下是一个测试过程,用于指导大家如何将参数文件转移到ASM存储并使之生效。
首先检查参数文件的位置,并通过SPFILE创建一个PFILE文件,进而在ASM磁盘上创建SPFILE文件。
SQL> connect as sysdba
SQL> show parameter spfile
NAME TYPE VALUE
------ ------- ------------------------------
spfile string oracle/product/11.2.0/db_1/dbs/spfileracdb11.ora
SQL> create pfile from spfile
File created.
SQL> create spfile='+RACDB_DATA' from pfile='/oracle/product/11.2.0/db_1/dbs/initracdb11.ora';
File created.
检查ASM上的参数文件。
[grid@rac1 ~]$ asmcmd
ASMCMD> ls RACDB_DATA/racdb1/spfile*
spfileracdb1.ora
同步RAC两个节点上的参数文件,更改其内容,设置SPFILE参数指向ASM中的参数文件。
[oracle@rac1 dbs]$ echo "SPFILE='+RACDB_DATA/racdb1/spfileracdb1.ora'" > /oracle/product/11.2.0/db_1/dbs/initracdb11.ora
[oracle@rac1 dbs]$ ssh rac2 "echo \"SPFILE='+RACDB_DATA/racdb1/spfileracdb1.ora'\" > /oracle/product/11.2.0/db_1/dbs/initracdb12.ora"
通过srvctl修改OCR中关于参数文件的配置。
[oracle@rac1 dbs]$ srvctl modify database -d racdb1 -p+RACDB_DATA/racdb1/spfileracdb1.ora
现在通过CRS启动数据库,将不再需要dbs目录下的参数文件,可以将其移除。
[oracle@rac1 dbs]$ mv /oracle/product/11.2.0/db_1/dbs/spfileracdb11.ora oracle/product/ 11.2.0/db_1/dbs/spfileracdb11.ora_bak
[oracle@rac1 dbs]$ ssh rac2 "mv /oracle/product/11.2.0/db_1/dbs/spfileracdb12.ora /oracle/product/11.2.0/db_1/dbs/spfileracdb12.ora_bak"
在下次重新启动数据库时,新的配置将会生效。
[oracle@rac1 dbs]$ srvctl stop database -d racdb1
[oracle@rac1 dbs]$ srvctl start database -d racdb1
[oracle@rac1 dbs]$ srvctl status database -d racdb1
Instance racdb11 is running on node rac1
Instance racdb12 is running on node rac2
检查数据库,新的参数文件已经被使用和生效。
SQL> SHOW parameter spfile
NAME TYPE VALUE
------ ----------- ------------------------------
spfile string +RACDB_DATA/racdb1/spfileracdb1.ora
谨慎修改RAC参数
在RAC环境中,即使按照正常的方式修改参数,也有可能因为遭遇Bug而导致事故,所以在进行重要的环境变更前,一定要进行测试,并详细检查与变更有关的文件,确保变更不会引起错误。
在Oracle 10.1的版本中,会遇到这样的问题,在RAC环境下修改UNDO_RETENTION参数,使用如下命令:
alter system set undo_retention=18000 sid='*';
这条命令直接导致了RAC的其他节点挂起,Oracle记录了一个相关Bug,Bug号为:4220405(这个Bug在Oracle 10gR2中修正),其Workaround就是分别修改不同实例。
alter system set undo_retention=18000 sid='RAC1';
alter system set undo_retention=18000 sid='RAC2';
alter system set undo_retention=18000 sid='RAC3';
这个案例告诉我们,Bug无处不在,数据库调整应当极其谨慎,最好在测试环境中测试过再应用到生产环境。
再次重申,在RAC环境中,每一个维护操作都要相当谨慎!
RAC环境下初始化参数的查询方法
下面介绍RAC环境下初始化参数的查询方法。
一个简单的例子:
不同的查询方法得到的结果。
似乎除了看不到全局设置外,GV$PARAMETER参数和V$SPPARAMETER没有什么不同,其实不然,如果alter system set的时候只修改了spfile或者memory参数,结果就会不同。
从上面的对比可以看出,通过GV$视图访问的结果和SPFILE中包含的信息完全不同。除了上面介绍的几种视图之外,CREATE PFILE也是一个不错的选择。Oracle把SPFILE也纳入到RMAN的备份恢复策略当中,如果你配置了控制文件自动备份(AUTOBACKUP),那么Oracle会在数据库发生重大变化(如增减表空间)时自动进行控制文件及SPFILE文件的备份。
节选自《Oracle性能优化与诊断案例精选第七章》
本书汇聚云和恩墨专家智慧, 作者包含Oracle ACE总监 6人,Oracle ACE 2人和其他云和恩墨的高级技术专家等 共13人。他们掌握Oracle的最新技术和发展动向,并有多年的行业经验,在这本书中,他们将自己的成长经历,技术经验和独特的视角分享给读者,不同作者的风格、方法、经验既迥然相异,又往往不谋而合,这样的融合既可以相互映衬,又可以彼此补充。希望读者可以找到切合自己的经验的内容并以此借鉴,找到学习案例方法从而完善并成就自我。
应用软件开发:数据建模 | SQL审核和优化 | 中间件服务
电子渠道(网络销售)分析系统 | 数据治理
恩墨学院
关注Oracle账号,回复CodeSet,立即获取《Oracle性能优化与诊断案例精选》代码包,更多资源,按需自取。