RAC spfile的维护

题记:在RAC环境下,由于多节点不同实例在启动时都需要依赖参数文件,所以其管理更加复杂。本节就RAC下参数文件管理进行阐述。

 

RAC下共享spfile

RAC环境下数据库在启动时,首先尝试寻找Cluster里面Database资源的Spfile配置选项。如果找不到对应的文件,那么继续按照单实例的寻找顺序在默认位置查找。

建议在RAC环境下使用共享的SPFILE,并在默认位置保留一个PFILE,里面通过SPFILE参数指向共享的SPFILE。默认在RAC安装配置完成,就自动生成了一个PFILE文件。下面是单实例和多实例的对比。

 

多实例:

[oracle@ASMTEST ~]$ cd /u01/app/oracle/product/11.2.0/db_1/dbs/
[oracle@ASMTEST dbs]$ ls
hc_oradb.dat  init.ora  initoradb.ora  lkORADB  orapworadb
[oracle@ASMTEST dbs]$ cat initoradb.ora 
SPFILE='+DATA/oradb/spfileoradb.ora'

使用ASM,在多实例下面spfile存放在ASM上面,不和pfile存放在一起,pfile里面存放的是spfile的路径。

 

单实例:

[oracle@Database2 ~]$ cd $ORACLE_HOME/dbs
[oracle@Database2 dbs]$ ls
hc_oradb.dat  init.ora  initoradba.ora  lkORADB  orapworadb  snapcf_oradb.f  spfileoradb.ora

不使用ASM,单实例下面spfile和pfile存放在一个路径下面,spfile和pfile可以通过命令相互转换

 

下面是RAC环境中一个参数文件的设置范例。

[oracle@raclinux1 ~]$ cd $ORACLE_HOME/dbs

[oracle@raclinux1 dbs]$ more initRACDB1.ora

SPFILE='+MY_DG2/RACDB/spfileRACDB.ora'

 

在此环境中,需要谨慎使用create spfile from pfile的命令,很多朋友因为草率地执行这样的操作而导致数据库故障。在ASM或RAC环境中,通常的init<sid>.ora文件中只有如上示例的一行,如果此时执行create spfile from pfile命令,则新创建的SPFILE文件将也只有这样一行信息,数据库将无法启动。

使用ASM存储参数文件:在ASM环境中,参数文件可以存储在ASM磁盘组上,而在Oracle RAC环境中,默认使用存储在ASM上的参数文件,在维护RAC环境的参数文件时要格外谨慎。

 

以下是一个测试过程,用于指导大家如何将参数文件转移到ASM存储并使之生效

(1)首先检查参数文件的位置,并通过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    --这一步和下面一步才是最核心的,将非共享的spfile创建出pfile,然后再使用pfile创建共享磁盘上面的共享的spfile。

File created. 

SQL> create spfile='+RACDB_DATA' from pfile='/oracle/product/11.2.0/db_1/dbs/initracdb11.ora';、File created.

 

 

(2)检查ASM上的参数文件。

[grid@rac1 ~]$ asmcmd

ASMCMD> ls RACDB_DATA/racdb1/spfile* 

spfileracdb1.ora

 

(3)同步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"

 

(4)通过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环境中,每一个维护操作都要相当谨慎!

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值