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

杨廷琨(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 视图来获取

原文发布于微信公众号 - 数据和云(OraNews)

原文发表时间:2016-04-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏我的博客

NodeJS操作Mysql示例

//config.js module.exports={ mysql:{ host:'localhost', port:3306, user:...

4548
来自专栏dalaoyang

SpringBoot整合Mybatis

介绍一下SpringBoot整合mybatis,数据库选用的是mysql。 首先创建数据库 CREATE DATABASE test; 建表以及插入初始数据(s...

3346
来自专栏xingoo, 一个梦想做发明家的程序员

Log4j官方文档翻译(九、输出到数据库)

log4j提供了org.apache.log4j.JDBCAppender对象,可以把日志输出到特定的数据库。 常用的属性: bufferSize 设置buff...

1827
来自专栏数据和云

返璞归真:RAC环境下不同实例的参数文件选择与设置

? 杨廷琨(yangtingkun) 云和恩墨 CTO 高级咨询顾问,Oracle ACE 总监,ITPUB Oracle 数据库管理版版主 参数文件是Or...

3188
来自专栏白驹过隙

MySQL - MySQL++在c++11环境下接口设计

975
来自专栏性能与架构

体验 Mysql 操作 JSON 文档

新版 Mysql 中加入了对 JSON Document 的支持,可以创建 JSON 类型的字段,并有一套函数支持对JSON的查询、修改等操作,下面就实际体验一...

3173
来自专栏JAVA后端开发

结合swagger,实现shiro权限资源的导入功能

做shiro权限控制时,shiro的权限RequiresPermissions都写在Controller的方法内,如果做动态的权限管理时,每个shiro的权限资...

1224
来自专栏飞扬的花生

合并两个结构完全相同的DataTable

两个结构一模一样的DataTable如何合并? 例子:使用Winform进行演示,表2的数据为固定的,表1的数据可以动态添加,通过合并按钮合并表1和表2的数据到...

1675
来自专栏白驹过隙

MySQL - MySQL++在c++11环境下接口设计

33510
来自专栏芋道源码1024

数据库[分库分表]中间件 Sharding-JDBC 源码分析 —— SQL 解析(四)之插入SQL

本文主要基于 Sharding-JDBC 1.5.0 正式版 1. 概述 2. InsertStatement 3. #parse() 3.1 #parseI...

3537

扫码关注云+社区