首页 > 数据库 >如何根据v$parameter查询Oracle隐含参数

如何根据v$parameter查询Oracle隐含参数

时间:2023-06-19 13:00:44浏览次数:40  
标签:NUMBER 查询 VARCHAR2 参数 Oracle 隐含 parameter


Oracle的隐含参数在Oracle的官方文档中是不会出现的,这些参数主要是Oracle内部用于控制某些功能的开关,或者就像今天eygle讲的,Oracle牛逼之处就是可能几年前开发的一个功能就放到当时的版本中,让你“试用”,但你却不知道,如果碰巧因为遇见了这个问题的bug,Oracle会告诉你可以使用这个参数关掉,等用户“试用”了几年之后,相对来说稳定了,Oracle发布新版本,说推出了一个新功能,且稳定运行了N年…

那么如何知道某个隐含参数是何含义、全称是什么、默认值是什么?这里至少有两种方法是之前eygle和secooler大师在书中或课堂上介绍过的,记录于此,便于查询。

方法一:通过vfixedviewdefinition视图得到视图定义。我们知道查询常规参数可以使用select∗fromvparameter,那么v$parameter是如何定义的?

如何根据v$parameter查询Oracle隐含参数_SQL

看到其来自于这个GV$PARAMETER视图,继续查:

如何根据v$parameter查询Oracle隐含参数_SQL_02

可以看出其来自于两个X内部表XKSPPI和X$KSPPCV的查询结果,网上搜了一些介绍:
引自javascript:void(0)

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开头的隐含参数名称:

如何根据v$parameter查询Oracle隐含参数_字段_03

查询结果如下,有两个_partition开头的隐含参数:

如何根据v$parameter查询Oracle隐含参数_执行计划_04

方法二:使用trace查看执行计划。

首先设置set autot trace,然后执行:

如何根据v$parameter查询Oracle隐含参数_字段_05

可以看见这条SQL底层是使用了两个X$内部表的全表扫描,这两个表就是上述方法一种介绍的内部表。再看谓词部分,有一些过滤查询条件,是使用NOT LIKE过滤了”_”开头的ksppinm参数名称,即过滤了隐含参数,根据方法一中介绍的表字段定义,可以拼接出自己想要的查询语句,查询出隐含参数和非隐含参数。

网上还有人通过改造,可以让show parameter命令显示出隐含参数,原理基本都是这些,有些技巧性的东西如果有兴趣找时间可以学习一下。

总结
对于视图等封装结构,可以通过执行计划,找出其基表,为探究其深入的原理提供了手段方法。


标签:NUMBER,查询,VARCHAR2,参数,Oracle,隐含,parameter
From: https://blog.51cto.com/u_13950417/6512510

相关文章

  • 关于ASP.NET.CORE中的Failed to read parameter "string param" from the request bod
    先上报错信息Microsoft.AspNetCore.Http.BadHttpRequestException:Failedtoreadparameter"stringparam"fromtherequestbodyasJSON.--->System.Text.Json.JsonException:'s'isaninvalidstartofavalue.Path:$|LineNumber:0|By......
  • Oracle的体系结构图万花筒
    虽然现在Oracle的版本频繁更新,但万变不离其宗,学习Oracle最重要的一张图就是Oracle体系结构图,由他延展开来的知识可谓是相当丰富,要是能讲清楚这张图,可以说你和大师很近了。这是来自杨大师公众号的一篇文章,汇总了各版本,Oracle高清体系结构图,《【图示篇】_Oracle10g,11g,12c,18c结构......
  • 非Oracle Linux下安装Oracle 19c
    《Oracle19c之RPM安装》介绍了在OracleLinux平台下安装Oracle19c的过程,其实无论是19c,还是11g,用OracleLinux会为你省不少的事情,毕竟同为Oracle产品,从推广角度看,肯定会相对其他平台提供更多的便利性,例如提前预安装了需要的Package,设置了信号量,创建了各种账号、路径和权限。这次采......
  • OpenJDK和Oracle JDK有什么区别和联系?
    《Linux7安装Oracle11g打怪经历》的安装过程中,启动图形界面,需要指定jre路径,当时使用yuminstalljdk安装的,并不能解决问题,查看版本才知道他是OpenJDK,最终使用OracleJDK,才解决的问题,那OpenJDK和OracleJDK究竟有什么区别?OpenJDKJava最早由SUN公司(SunMicrosystems,发起于美国斯坦......
  • Linux 7安装Oracle 11g打怪经历
    最近接到个需求,要将一套开发环境中Linux6平台的Oracle11g,迁移到两套Linux7平台,原以为很简单,但过程中,确实历经坎坷,就像过山车一般,解决这个问题,又碰到下一个。软件信息RedHatLinux7.5Oracle11.2.0.4坑坑坑1.软链接为了安装路径的标准和简便,可以使用软链接,语法如下,ln-s【目标......
  • 非Oracle Linux下Oracle 19c CDB数据库安装
    《非OracleLinux下安装Oracle19c》我们安装了non-cdb的19c数据库,通过这个脚本,还可以搭建cdb的数据库。1.修改安装脚本cp/etc/init.d/oracledb_ORCLCDB-19c/etc/init.d/oracledb_pdbisal-19c其中要改几处,ORACLE_SID改成新的,LISTENER_NAME改成新的,CREATE_AS_CDB之前我写的false,......
  • Oracle优化器对谓词顺序处理的一个场景
    最近听了个讲座,其中介绍到了Oracle的谓词,原始版本的例子,如下所示,从数据上能看到,c1='3'的时候,c2的值是个字符串类型的数字,SQL>createtabletest(c1char(1),c2varchar2(1));Tablecreated.SQL>insertintotestvalues('1','A');1rowcreated.SQL>insertintotes......
  • Windows调试Oracle数据库问题的一些手段
    最近需要在Windows的跳板机上访问远程的Oracle数据库进行调试。Windows中只有个精简版OracleClient,以及PLSQLDeveloper客户端。如果用惯了Linux,再用Windows,确实不知所措。但这就是个从生疏到熟练的事儿,最近看的一本书中描述得很恰当,Themosteffectivewaytodealwithaworry......
  • 《Oracle Concept》第三章 - 4
    背景:按照《OracleConecpt》的结构一起了解Oracle数据库,这是学习Oracle从入门到精通的基础。本文主题:第三章《IndexesandIndex-OrganizedTables》-OverviewofIndexes。B树索引B树索引,是平衡树的缩写,他是数据库索引中最常用的一种类型。一个B树索引是一种将数值有序划分到不......
  • template - function parameter - type
    #include<iostream>#include<thread>#include<array>#include<functional>template<autofunc,std::size_tI>structparam_type;template<typenameRet,typename...Args,Ret(*func)(Args...),std::size_tI>struct......