
通常oracle参数文件优先级别都比较清楚,spfilesid.ora>spfile.ora>initsid.ora>init.ora,
那么参数设置的优先级别又是怎么样的?
问题:
在rac环境下,修改参数,可以指定sid='*',也可以指定sid='sid',那么在spfile参数文件中,对同一个参数,sid='*'和sid='sid'记录不同的值,重启实例后,哪个值会优先生效呢。
结论:
例如一套两节点RAC,dbname为cjcdb,实例1和2分别是cjcdb1和cjcdb2,初始设置归档路径如下:
SQL> alter system set log_archive_dest_1='location=+ARCH/arch1' sid='cjcdb1';SQL> alter system set log_archive_dest_1='location=+ARCH/arch2' sid='cjcdb2';
后来由于某种原因,需要更改归档目录,将实例1和实例2归档路径都统一设置为+ARCH/arch目录,
执行如下命令:
SQL> alter system set log_archive_dest_1='location=+ARCH/arch' sid='*';
此时内存和spfile参数文件中的log_archive_dest_1参数都已经修改为+ARCH/arch,
当前归档目录也变成了+ARCH/arch目录,
此时参数文件sfile中记录log_archive_dest_1参数的值有三个,分别是:
SID NAME TYPE VALUE-------- ----------------------------- ----------- ----------------------------* log_archive_dest_1 string location=+ARCH/archcjcdb1 log_archive_dest_1 string location=+ARCH/arch1cjcdb2 log_archive_dest_1 string location=+ARCH/arch2
那么如果重启实例后,log_archive_dest_1值会变回原+ARCH/arch1和+ARCH/arch2值。
即,重启后sid='实例名'参数优先级高于sid='*';
实验过程如下:
一:配置数据库归档路径
[grid@vmrh74db02 ~]$ asmcmdASMCMD> cd ARCHASMCMD> mkdir arch1ASMCMD> mkdir arch2SQL> alter system set log_archive_dest_1='location=+ARCH/arch1' sid='cjcdb1';SQL> alter system set log_archive_dest_1='location=+ARCH/arch2' sid='cjcdb2';SQL> archive log list;Database log mode Archive ModeAutomatic archival EnabledArchive destination +ARCH/arch1Oldest online log sequence 533Next log sequence to archive 534Current log sequence 534SQL> show parameter log_archive_dest_1NAME TYPE VALUE------------------------------------ ----------- ------------------------------log_archive_dest_1 string location=+ARCH/arch1SQL> show spparameter log_archive_dest_1SID NAME TYPE VALUE-------- ----------------------------- ----------- ----------------------------cjcdb1 log_archive_dest_1 string location=+ARCH/arch1cjcdb2 log_archive_dest_1 string location=+ARCH/arch2
二:修改归档路径
SQL> alter system set log_archive_dest_1='location=+ARCH/arch' sid='*';System altered.
三:查看参数信息
实例1和实例2当前归档路径已经修改成+ARCH/arch。
SQL> archive log list;Database log mode Archive ModeAutomatic archival EnabledArchive destination +ARCH/archOldest online log sequence 534Next log sequence to archive 535Current log sequence 535SQL> show parameter log_archive_dest_1NAME TYPE VALUE------------------------------------ ----------- ------------------------------log_archive_dest_1 string location=+ARCH/arch
此时spfile存在三个值。
SQL> show spparameter log_archive_dest_1SID NAME TYPE VALUE-------- ----------------------------- ----------- ----------------------------* log_archive_dest_1 string location=+ARCH/archcjcdb1 log_archive_dest_1 string location=+ARCH/arch1cjcdb2 log_archive_dest_1 string location=+ARCH/arch2
四:重启实例
SQL> shutdown immediateDatabase closed.Database dismounted.ORACLE instance shut down.SQL> startupORACLE instance started.Total System Global Area 3724607488 bytesFixed Size 2258760 bytesVariable Size 1006635192 bytesDatabase Buffers 2701131776 bytesRedo Buffers 14581760 bytesDatabase mounted.Database opened.
五:查看当前归档目录
重启实例后,归档路径又变回原来的路径,之前sid='*'级别的修改没有生效。
SQL> archive log list;Database log mode Archive ModeAutomatic archival EnabledArchive destination +ARCH/arch1Oldest online log sequence 535Next log sequence to archive 536Current log sequence 536SQL> show parameter log_archive_dest_1NAME TYPE VALUE------------------------------------ ----------- ------------------------------log_archive_dest_1 string location=+ARCH/arch1SQL> show spparameter log_archive_dest_1SID NAME TYPE VALUE-------- ----------------------------- ----------- ----------------------------* log_archive_dest_1 string location=+ARCH/archcjcdb1 log_archive_dest_1 string location=+ARCH/arch1cjcdb2 log_archive_dest_1 string location=+ARCH/arch2
六:可能存在的问题
可以考虑如下场景,生产环境下一开始rac实例的归档目录分别在各自服务器本地文件系统上,例如/arch1和/arch2。
后来出于某种原因,创建了单独的归档ASM磁盘组,将归档目录改到了ASM磁盘组下,
后来的某一天,又因为某种原因,重启了数据库实例,此时归档路径又会被重置成原本地文件系统目录,此时如果没有注意到归档路径发生了改变,可能会引发归档空间不足或数据库挂起等情况。
七:解决方案
在RAC环境下修改参数时,例如log_archive_dest_1,需要查看下当前spfile下此参数的值是否唯一,
如果不唯一,在修改时,需要将sid='*'和sid='sid'同时修改,例如:
查看当前spfile记录的log_archive_dest_1值:
SQL> show spparameter log_archive_dest_1SID NAME TYPE VALUE-------- ----------------------------- ----------- ----------------------------cjcdb1 log_archive_dest_1 string location=+ARCH/arch1cjcdb2 log_archive_dest_1 string location=+ARCH/arch2
修改归档路径到+ARCH/arch路径下
alter system set log_archive_dest_1='location=+ARCH/arch' sid='*';alter system set log_archive_dest_1='location=+ARCH/arch' sid='cjcdb1';alter system set log_archive_dest_1='location=+ARCH/arch' sid='cjcdb2';
###chenjuchao 2021-02-06 16:50###




