暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

返璞归真:Oracle实例级别和会话级别的参数设置辨析

杨廷琨 2016-04-16
710


杨廷琨(yangtingkun)

云和恩墨 CTO

高级咨询顾问,Oracle ACE 总监,ITPUB Oracle 数据库管理版版主

参数文件是Oracle数据库文件中级别最低,也是最基本的文件,但是也是数据库实例启动第一个涉及的文件。如果参数文件缺失或者某些参数设置错误,数据库就无法启动。


Oracle实例级别和会话级别的参数有时候容易混淆,必须清晰的明确这两者的差别,才能在种种变更中成竹在胸。我们来看看V$PARAMETER 和 V$SYSTEM_PARAMETER 视图的区别。


一般在查询初始化参数的时候都习惯性的使用 SHOW PARAMETER,也就是查询 V$PARAMETER 视图。但是有些时候查询V$PARAMETER视图得到的结果并不准确


我们通过query_rewrite_enabled这个参数来做一个验证。

SQL> show parameter query_rewrite_enabled

NAME                                 TYPE        VALUE
------------------------------------ ----------- --------------------
query_rewrite_enabled                string      TRUE
SQL> select name, value
 2  from v$parameter
 3  where name = 'query_rewrite_enabled';

NAME                                     VALUE
---------------------------------------- ----------------------------
query_rewrite_enabled                    TRUE

SQL> select name, value
 2  from v$system_parameter
 3  where name = 'query_rewrite_enabled';

NAME                                     VALUE
---------------------------------------- ----------------------------
query_rewrite_enabled                    TRUE


这时候如果在会话级修改 query_rewrite_enabled 这个初始化参数:

SQL> alter session set query_rewrite_enabled = false;

会话已更改。

SQL> show parameter query_rewrite_enabled

NAME                                 TYPE        VALUE
------------------------------------ ----------- -------------------
query_rewrite_enabled                string      FALSE
SQL> select name, value
 2  from v$parameter
 3  where name = 'query_rewrite_enabled';

NAME                                     VALUE
---------------------------------------- ---------------------------
query_rewrite_enabled                    FALSE

SQL> select name, value
 2  from v$system_parameter
 3  where name = 'query_rewrite_enabled';

NAME                                     VALUE
---------------------------------------- ---------------------------
query_rewrite_enabled                    TRUE


可以看到,show parameter 和查询 v$parameter 视图的结果都是 FALSE,而刚才做的修改只是会话级,并没有修改系统的初始化参数。


我们应该形成的知识常识:V$PARAMETER 视图反映的是初始化参数在当前会话中生效的值,而 V$SYSTEM_PARAMETER 反映的才是实例级上的初始化参数。


再来看看延迟参数修改的情况:

SQL> select name, value
 2  from v$parameter
 3  where name = 'recyclebin';

NAME                                     VALUE
---------------------------------------- ------------------------------------
recyclebin                               on

SQL> select name, value
 2  from v$system_parameter
 3  where name = 'recyclebin';

NAME                                     VALUE
---------------------------------------- ------------------------------------
recyclebin                               on

SQL> alter system set recyclebin = off deferred scope = memory;

系统已更改。

SQL> select name, value
 2  from v$parameter
 3  where name = 'recyclebin';

NAME                                     VALUE
---------------------------------------- ------------------------------------
recyclebin                               on

SQL> select name, value
 2  from v$system_parameter
 3  where name = 'recyclebin';

NAME                                     VALUE
---------------------------------------- ------------------------------------
recyclebin                               OFF


结果和前面的恰好反过来,v$parameter 视图中的结果没有发生变化,而 v$system_parameter 视图的结果变成了 OFF。

这是因为延迟修改对数据库中当前存在的会话不生效,因此反映当前会话情况的 v$parameter 视图结果不变,而对于系统而言,初始化参数已经改变,而且所有新建会话的参数也会改变,所以 v$system_parameter 视图的结果发生了改变。

SQL> CONN YANGTK/YANGTK@YTK111
已连接。
SQL> select name, value
 2  from v$parameter
 3  where name = 'recyclebin';

NAME                                     VALUE
---------------------------------------- ---------------------------
recyclebin                               OFF

SQL> select name, value
 2  from v$system_parameter
 3  where name = 'recyclebin';

NAME                                     VALUE
---------------------------------------- ---------------------------
recyclebin                               OFF


根据这两个例子可以获得的常识是:利用 V$PARAMETER 视图获取系统的启动初始化参数是不准确的,应该从 V$SYSTEM_PARAMETER 视图来获取



如何加入"云和恩墨大讲堂"微信群

搜索 盖国强(Eygle) :eeygle,或者扫描下面二维码,备注:云和恩墨大讲堂,即可入群。每周与千人共享免费技术分享,与讲师在线讨论。

近期文章

诗和远方:云和恩墨大讲堂期刊第四期

删繁就简-云和恩墨的一道面试题解析

用SQL解一道数学题:Gauss和Poincare

新年贺礼:云和恩墨大讲堂期刊发行

2015 Oracle 十大热门文章精选

Oracle 12c ASM 防火防盗新特性揭秘

DBA入门之路:学习与进阶之经验谈

DBA入门之路:关于日常工作的建议

资源下载

(帐号:OraNews)回复关键字获取最新学习资源

2016YHEMSZ ,云和恩墨大讲堂2016深圳交流会PPT;

2016GOPSZ ,2016深圳全球运维大会PPT;

DBALife ,"DBA的一天"精品海报大图;

12cArch ,“Oracle 12c体系结构”精品海报大图;

DBA01 ,《Oracle DBA手记》第一本图书下载;

YunHe “云和恩墨大讲堂”案例文档下载地址;



最后修改时间:2020-05-08 00:01:28
文章转载自杨廷琨,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论