如何根据v$parameter查询Oracle隐含参数
2016-04-17 00:05
429 查看
Oracle的隐含参数在Oracle的官方文档中是不会出现的,这些参数主要是Oracle内部用于控制某些功能的开关,或者就像今天eygle讲的,Oracle牛逼之处就是可能几年前开发的一个功能就放到当时的版本中,让你“试用”,但你却不知道,如果碰巧因为遇见了这个问题的bug,Oracle会告诉你可以使用这个参数关掉,等用户“试用”了几年之后,相对来说稳定了,Oracle发布新版本,说推出了一个新功能,且稳定运行了N年…
那么如何知道某个隐含参数是何含义、全称是什么、默认值是什么?这里至少有两种方法是之前eygle和secooler大师在书中或课堂上介绍过的,记录于此,便于查询。
方法一:通过vfixedviewdefinition视图得到视图定义。我们知道查询常规参数可以使用select∗fromvfixed_view_definition视图得到视图定义。
我们知道查询常规参数可以使用select * from vparameter,那么v$parameter是如何定义的?
看到其来自于这个GV$PARAMETER视图,继续查:
可以看出其来自于两个X内部表X内部表XKSPPI和X$KSPPCV的查询结果,网上搜了一些介绍:
引自http://blog.csdn.net/cupid1102/article/details/50427308
X$KSPPCV用以记录当前的设置的值,及是否使用了缺省值等信息
ADDR RAW(4) –内存地址
INDX NUMBER –序号,从0开始
INST_ID NUMBER
KSPPINM VARCHAR2(64) –参数名称
KSPPITY NUMBER
KSPPDESC VARCHAR2(64) –描述
X$KSPPI则是一个基础表,用于记录参数名、参数说明等简单的信息。
ADDR RAW(4) –内存地址
INDX NUMBER –序号,从0开始
INST_ID NUMBER –instance number
KSPPSTVL VARCHAR2(512) –当前值
KSPPSTDF VARCHAR2(9) –缺省值
KSPPSTVF NUMBER –标志字段,用来说明(‘Modified’or ‘System Modified’ or
is_adjusted)
KSPPSTCMNT VARCHAR2(255) –comment
根据需求,可以调整下上述SQL语句,检索隐含参数名称、当前值、描述等几个关键信息,可以用like查询精确找出某个特殊的隐含参数,例如这输入了_partition开头的隐含参数名称:
查询结果如下,有两个_partition开头的隐含参数:
方法二:使用trace查看执行计划。
首先设置set autot trace,然后执行:
可以看见这条SQL底层是使用了两个X$内部表的全表扫描,这两个表就是上述方法一种介绍的内部表。再看谓词部分,有一些过滤查询条件,是使用NOT LIKE过滤了”_”开头的ksppinm参数名称,即过滤了隐含参数,根据方法一中介绍的表字段定义,可以拼接出自己想要的查询语句,查询出隐含参数和非隐含参数。
网上还有人通过改造,可以让show parameter命令显示出隐含参数,原理基本都是这些,有些技巧性的东西如果有兴趣找时间可以学习一下。
总结:
对于视图等封装结构,可以通过执行计划,找出其基表,为探究其深入的原理提供了手段方法。
那么如何知道某个隐含参数是何含义、全称是什么、默认值是什么?这里至少有两种方法是之前eygle和secooler大师在书中或课堂上介绍过的,记录于此,便于查询。
方法一:通过vfixedviewdefinition视图得到视图定义。我们知道查询常规参数可以使用select∗fromvfixed_view_definition视图得到视图定义。
我们知道查询常规参数可以使用select * from vparameter,那么v$parameter是如何定义的?
看到其来自于这个GV$PARAMETER视图,继续查:
可以看出其来自于两个X内部表X内部表XKSPPI和X$KSPPCV的查询结果,网上搜了一些介绍:
引自http://blog.csdn.net/cupid1102/article/details/50427308
X$KSPPCV用以记录当前的设置的值,及是否使用了缺省值等信息
ADDR RAW(4) –内存地址
INDX NUMBER –序号,从0开始
INST_ID NUMBER
KSPPINM VARCHAR2(64) –参数名称
KSPPITY NUMBER
KSPPDESC VARCHAR2(64) –描述
X$KSPPI则是一个基础表,用于记录参数名、参数说明等简单的信息。
ADDR RAW(4) –内存地址
INDX NUMBER –序号,从0开始
INST_ID NUMBER –instance number
KSPPSTVL VARCHAR2(512) –当前值
KSPPSTDF VARCHAR2(9) –缺省值
KSPPSTVF NUMBER –标志字段,用来说明(‘Modified’or ‘System Modified’ or
is_adjusted)
KSPPSTCMNT VARCHAR2(255) –comment
根据需求,可以调整下上述SQL语句,检索隐含参数名称、当前值、描述等几个关键信息,可以用like查询精确找出某个特殊的隐含参数,例如这输入了_partition开头的隐含参数名称:
查询结果如下,有两个_partition开头的隐含参数:
方法二:使用trace查看执行计划。
首先设置set autot trace,然后执行:
可以看见这条SQL底层是使用了两个X$内部表的全表扫描,这两个表就是上述方法一种介绍的内部表。再看谓词部分,有一些过滤查询条件,是使用NOT LIKE过滤了”_”开头的ksppinm参数名称,即过滤了隐含参数,根据方法一中介绍的表字段定义,可以拼接出自己想要的查询语句,查询出隐含参数和非隐含参数。
网上还有人通过改造,可以让show parameter命令显示出隐含参数,原理基本都是这些,有些技巧性的东西如果有兴趣找时间可以学习一下。
总结:
对于视图等封装结构,可以通过执行计划,找出其基表,为探究其深入的原理提供了手段方法。
相关文章推荐
- Oracle单行函数之字符函数
- Oracle 11g RAC INS-06006 Passwordless SSH connectivity not set up between the following node(s)
- Oracle--DML、DDL、DCL
- 64位win7安装oracle_10g
- Optimizing Oracle RAC
- Oracle数据库--实用操作(6)触发器
- Oracle报错,ORA-28001: 口令已经失效 解决方法
- Oracle报错,ORA-28001: 口令已经失效 解决方法
- Oracle学习笔记(十八)——维护数据的完整性
- 解决Oracle11g空表无法导出的问题
- oracle 数据库,A 表有 10 条记录,以下查询可以查出几条? select * from A where rownum > 5
- Oracle学习笔记(十七)——管理表空间和数据文件
- Oracle 数据库存储过程
- oracle timestamp与字符串转换
- oracle centos 静默安装
- python3.4连接和读取oracle数据表
- oracle学习 第三章 常用的SQL*PLUS命令 ——01
- .net(C#)访问Oracle数据库的几种免安装组件的对比
- PowerDesigner 连接oracle数据库
- oracle用户默认表空间