数据库版本为10.2.0.4
SYS@snow1 >select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
PL/SQL Release 10.2.0.4.0 - Production
CORE 10.2.0.4.0 Production
TNS for Linux: Version 10.2.0.4.0 - Production
NLSRTL Version 10.2.0.4.0 - Production
数据库为2个节点的RAC
SYS@snow1 >select host_name,instance_name,status from gv$instance;
HOST_NAME INSTANCE_NAME STATUS
---------- ---------------- ------------
rac1 snow1 OPEN
rac2 snow2 OPEN
当前的sga_target设置为200m
SYS@snow1 >show parameter sga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 200M
sga_target big integer 200M
查看当前的spfile配置
SYS@snow1 >create pfile='/home/oracle/pfile0' from spfile;
*号开头的参数代表全局参数,所有节点都生效。 注意这个*号的有效范围,下面将围绕这个*号做一系列的测试。
[oracle@rac1 ~]$ cat /home/oracle/pfile0 | grep sga_target
*.sga_target=209715200
全局范围修改sga大小
不指定sid的情况下默认为sid=‘*’,所有节点都生效
SYS@snow1 >alter system set sga_target=180m scope=spfile;
重启数据库
[oracle@rac1 ~]$ srvctl stop database -d snow -o immediate;
[oracle@rac1 ~]$ srvctl start database -d snow
两个节点都的sga_target都从200m改小到180m
SYS@snow1 >show parameter sga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 180M
sga_target big integer 180M
SYS@snow2 >show parameter sga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 180M
sga_target big integer 180M
导出spfile看看当前的sga_target只有全局生效的*.sga_target=188743680
SQL> create pfile='/home/oracle/pfile1.text' from spfile;
[oracle@rac1 ~]$ cat /home/oracle/pfile1.text | grep sga_target
*.sga_target=188743680
下面重新设置sga_target,并且指定sid为节点1。节点1将按照修改后的方式立即生效,不再使用*号的全局设置。
SYS@snow1 >alter system set sga_target=150m sid='snow1';
SYS@snow1 >show parameter sga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 180M
sga_target big integer 152M <==立即生效,不需要重启
alert日志中看到不指定scope参数会默认为both,也就是spfile和内存中同时生效,所以立刻能看到效果。
Fri Jan 30 11:13:16 2015
ALTER SYSTEM SET sga_target='150M' SCOPE=BOTH SID='snow1';
再次导出spfile会发现节点1出现了一个sga_target设置项,有别于之前的*
实例级别参数优先级别高于全局参数,实例启动时不再受全局参数的限制
[oracle@rac1 ~]$ cat /home/oracle/pfile1.text1 | grep sga_target
*.sga_target=188743680
snow1.sga_target=159383552
重新启动节点1,验证实例重启后使用实例级别参数。
[oracle@rac1 ~]$ srvctl stop instance -d snow -i snow1 -o immediate;
[oracle@rac1 ~]$ srvctl start instance -d snow -i snow1
SYS@snow1 >show parameter sga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 152M
sga_target big integer 152M <==snow1.sga_target=159383552
如果想要恢复之前的设置,可以使用reset参数。
SYS@snow1 >alter system reset sga_target sid='snow1';
alert日志中节选信息
Fri Jan 30 11:37:39 2015
ALTER SYSTEM RESET sga_target SCOPE=BOTH SID='snow1';
通过导出spfile验证reset效果
SYS@snow1 >create pfile='/home/oracle/pfile3.text' from spfile;
[oracle@rac1 ~]$ cat /home/oracle/pfile3.text | grep sga_target
*.sga_target=188743680
重启实例1,将重新按照*.sga_target=188743680设置分配sga
SYS@snow1 >startup force
ORACLE instance started.
Total System Global Area 188743680 bytes
Fixed Size 2082624 bytes
Variable Size 83888320 bytes
Database Buffers 96468992 bytes
Redo Buffers 6303744 bytes
Database mounted.
Database opened.
SYS@snow1 >show parameter sga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 180M
sga_target big integer 180M
总结:
RAC是多实例数据库,很多时候修改系统参数都是希望能全局生效。但是对于sid这个参数会出现使用不当的情况。比如,不该添加该参数的时候却添加了,而且指定了RAC中的某个节点名称。使得该节点和其他节点配置不一样了。再次修改全局参数的时候,会发现总有一个节点不受到控制。
有个常用但是比较笨的方法是使用create pfile from spfile导出参数文件,手工修改后在create spfile from spfile=‘/xx’的方式还原。 这个方法的缺点是步骤多,而且在11gRAC+ASM的架构下,pfile中只是一个ASM磁盘组中spfile内容的引用,很容易改出问题。
所以推荐使用reset参数来清理这些不再需要的实力级参数,高效而且优雅。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29047826/viewspace-1432093/
,如需转载,请注明出处,否则将追究法律责任。