实验结论:在RAC环境中,最好修改参数sid='*' 安全可靠,因为暂时未明确知道哪些参数是默认全局修改,什么参数是默认单节点修改的,+* 靠谱,不容易出问题
在RAC环境中,修改全局参数scope=spfile生效时,尽量重启所有实例, 避免某个实例故障后,由于参数不一致导致实例无法启动的尴尬事件(不是所有,除db_files 等之外需要同时重启,别的可以rolling fashion ,避免 complete outage)
尝试启动RAC 节点1,遭遇ORA-01105,ORA-01606: ``` SQL> startup mount; ORACLE instance started.
Total System Global Area 9.4869E+10 bytes
Fixed Size 2264056 bytes
Variable Size 5.0197E+10 bytes
Database Buffers 4.4560E+10 bytes
Redo Buffers 109174784 bytes
ORA-01105: mount is incompatible with mounts by other instances
ORA-01606: parameter not identical to that of another mounted instance
数据库节点1目前状态是NOMOUNT.
2.解决过程
**错误代码说明:**
$ oerr ora 1105
01105, 00000, "mount is incompatible with mounts by other instances"
// *Cause: An attempt to mount the database discovered that another instance
// mounted a database by the same name, but the mount is not
// compatible. Additional errors are reported explaining why.
// *Action: See accompanying errors.
$ oerr ora 1606
01606, 00000, "parameter not identical to that of another mounted instance"
// *Cause: A parameter was different on two instances.
// *Action: Modify the initialization parameter and restart.
查询gc_隐含参数
set linesize 333
col name for a35
col description for a66
col value for a30
SELECT i.ksppinm name,
i.ksppdesc description,
CV.ksppstvl VALUE
FROM sys.x$ksppi i, sys.x$ksppcv CV
WHERE i.inst_id = USERENV ('Instance')
AND CV.inst_id = USERENV ('Instance')
AND i.indx = CV.indx
AND i.ksppinm LIKE '/_gc%' ESCAPE '/'
ORDER BY REPLACE (i.ksppinm, '_', '');
查询结果如下(部分相同值的参数已省略):
--节点1:
_gc_policy_time how often to make object policy decisions in minutes 0
_gc_read_mostly_flush_check if TRUE, optimize flushes for read mostly objects FALSE
_gc_read_mostly_locking if TRUE, enable read-mostly locking FALSE
--节点2:
_gc_policy_time how often to make object policy decisions in minutes 10
_gc_read_mostly_flush_check if TRUE, optimize flushes for read mostly objects FALSE
_gc_read_mostly_locking if TRUE, enable read-mostly locking TRUE
发现问题,_gc_policy_time隐藏参数,_gc_read_mostly_locking隐藏参数,2个节点值不一致。
解决方法:根据现在正常运行的节点2的值,重新设置这两个值:
alter system set "_gc_read_mostly_locking"=true scope=spfile sid='';
alter system set "_gc_policy_time"=10 scope=spfile sid='';
--正常关闭节点1:
shutdown immediate;
--正常启动节点1:
startup
实际执行过程如下:
SQL> alter system set "_gc_read_mostly_locking"=true scope=spfile sid='*';
System altered.
SQL> alter system set "_gc_policy_time"=10 scope=spfile sid='*';
System altered.
SQL> shutdown immediate;
ORA-01507: database not mounted
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 9.4869E+10 bytes
Fixed Size 2264056 bytes
Variable Size 5.1271E+10 bytes
Database Buffers 4.3487E+10 bytes
Redo Buffers 109174784 bytes
Database mounted.
Database opened.
至此RAC节点1启动成功。
本篇文档--目的:实验测试在RAC环境下,修改数据库参数与单实例相比,需要注意的地方
--举例说明,在实际生产环境下,以下参数很可能会需要修改
--在安装数据库完成后,很可能没有标准化,初始化文档,没有对以下参数进行调整
SQL> show parameter db_files
NAME VALUE
-------------------------------------------------
db_files 200
--实验测试
节点一、对此参数调整 加大至800
SQL> alter system set db_files=800 scope=spfile;
--节点二、数据库实例OPEN
--重启节点一数据库
SQL> shutdown immediate;
startup
--查看节点一的Alert日志
--从日志看,节点一的实例启动,已经成功读取db_files=800后的参数值了
Using parameter settings in server-side pfile /u01/app/oracle/product/11.2.0/db_1/dbs/initjx1.ora
System parameters with non-default values:
db_files = 800
--SQLPLUS --STARTUP 显示内容
ORACLE instance started.
Total System Global Area 484356096 bytes
Fixed Size 2229584 bytes
Variable Size 297798320 bytes
Database Buffers 176160768 bytes
Redo Buffers 8167424 bytes
ORA-01105: mount is incompatible with mounts by other instances
ORA-01174: DB_FILES is 800 buts needs to be 200 to be compatible
--报错,在RAC环境,修改全局参数,重启生效scope=spfile的参数,单纯启动一个实例是危险的,需要重启所有节点的数据库实例,来完成参数的修改
--本次解决方法:重启节点二实例,完成参数的修改
测试二、隐含参数设置
修改参数,不加sid='*'
节点一实例修改参数:
SQL> alter system set "_gc_policy_time"=10 scope=spfile;
SQL> alter system set "_gc_read_mostly_locking"=true scope=spfile;
--两个节点实例,都相互,关闭,重启RAC实例
SQL> shutdown immediate;
--节点一,先启动
startup
查询参数
SQL> show parameter "_gc_policy_time"
NAME VALUE
------------------------------
_gc_policy_time 10
SQL> show parameter "_gc_read_mostly_locking"
NAME VALUE
------------------------------
_gc_read_mostly_locking TRUE
--节点二,再启动
一切正常
测试三、对数据库参数进行sid =2 单独配置,重启测试
--数据库节点2 修改参数,指定sid自身
SQL> alter system set "_gc_read_mostly_locking"=false sid='2' scope=spfile;
SQL> startup force;
--发现未生效
--对于隐含参数--在本次测试环境中,是全局生效,而不能单独一个节点生效
--https://www.cnblogs.com/jyzhao/p/5391746.html
--参考lob 实验还原报错失败,未能配置两个节点不同的参数值
--解决方法如上,去查询验证,两个节点实例的参数-- 匹配不一致的参数,进行修改一致,然后都使用同一个参数文件启动实例就OK
--ORA-01105,ORA-01606 --如果是修改隐含参数,会报这两个错误,解决方法
set linesize 333 col name for a35 col description for a66 col value for a30 SELECT i.ksppinm name, i.ksppdesc description, CV.ksppstvl VALUE FROM sys.x$ksppi i, sys.x$ksppcv CV WHERE i.inst_id = USERENV ('Instance') AND CV.inst_id = USERENV ('Instance') AND i.indx = CV.indx AND i.ksppinm LIKE '/_gc%' ESCAPE '/' ORDER BY REPLACE (i.ksppinm, '_', '');
实验结论:在RAC环境中,最好修改参数sid='*' 安全可靠,因为暂时未明确知道哪些参数是默认全局修改,什么参数是默认单节点修改的,+* 靠谱,不容易出问题
在RAC环境中,修改全局参数scope=spfile生效时,需重启所有实例,不要偷懒,避免某个实例故障后,由于参数不一致导致实例无法启动的尴尬事件
Oracle 中有很多参数,同时也有不同设置参数的方式,比如:
会话级别(alter SESSION set ...)、系统级别(alter SYSTEM set ...)、直接修改pfile参数文件;
其中系统级别设置中 又分三种:
只在内存中生效(alter system set ... scope=MEMORY) --重启后无效
只在spfile文件中生效 (alter system set...scope=SPFILE) ---重启后才生效
内存和spfile文件同时生效(alter system set ... scope=both) ---默认方式
上面讲过了如何设置参数的方式,下面讲一下怎么查看参数的值,查看参数会涉及如下几个视图:
v$parameter & v$parameter2、v$system_parameter & v$system_parameter2、v$spparameter
V$parameter 和 V$prameter2 :
两者中显示的参数值 是 当前会话某个参数的值;
另外我们平时用的最多的 show parameter ...的查看参数值的命令对应的值就是V$parameter 中的值;
而二者的区别仅仅在于当参数有多个数值时候,V$parameter中用一行表示,不同值之间以逗号相1隔,而V$parameter2中不同值用不同行表示,举例如下:查看control_files
SQL> select name,value from v$parameter where name='control_files';
NAME
----------------
control_files
VALUE
--------------------------------------------------------------------------------
/home/oracle/oradata/cms2009/control01.ctl, /home/oracle/oradata/cms2009/control
02.ctl, /home/oracle/oradata/cms2009/control03.ctl
SQL> select name,value from v$parameter2 where name='control_files';
NAME VALUE
----------------------- ---------------------------------------------
control_files /home/oracle/oradata/cms2009/control01.ctl
control_files /home/oracle/oradata/cms2009/control02.ctl
control_files /home/oracle/oradata/cms2009/control03.ctl
如果是RAC环境,查看GV$parameter和 GV$parameter2;
v$system_parameter & v$system_parameter2:
两者中记录的参数值 是 实例中参数的值,新启动的会话都会继承此类参数的值;
而两者的区别同上V$parameter和V$parameter2的区别;
RAC环境对应GV$system_parameter和 GV$system_parameter2;
V$spparameter :
记录的参数值 是spfile文件中的值。
RAC环境对应 GV$spparameter;
另外除了上面查看参数的方式外,还有一种 查看方式比较特别:create pfile from (spfile 、memory)11g支持from memory
这种方式生成的新的pifle只显示手动设置过得参数和参数值,默认的参数不会显示,这样就能更直观的查看我们曾经显式修改过得那些参数。