本文转自:http://www.cnblogs.com/fangwenyu/archive/2011/01/06/1926774.html

问题描述

在尝试通过show parameter来查看一个参数的时候,遇到了ora-00942: table or view does not exist的错误提示,如下,

SQL> show user USER is "SCOTT"
SQL> show parameter nls_sort; ORA-00942: table or view does not exist

问题分析

乍看到这个错误,很是惊愕了一下,因为平时几乎没碰到这个问题。但是错误提示给出的信息意思很明显,show parameter的时候访问了某个不存在或者没权限访问的表或者视图。那么是哪个表或者视图呢? 因为还记得访问参数的值,可以直接访问动态新能视图v$parameter, 因此尝试访问了一下,结果也报出了同样的错误提示,

SQL> select value from v$parameter where name='nls_sort';
select value from v$parameter where name='nls_sort' * ERROR at line 1: ORA-00942: table or view does not exist

其实至此,上面的问题已经显而易见了,show parameter命令应该就是访问v$parameter。因为当前user scott没有权限访问这个视图,因此会报出table or view does not exist的错误信息。解决问题的方法也自然简单,给scott赋予相应的权限即可,

SQL> show user USER is "SYS"
SQL> grant select on v_$parameter to scott;
Grant succeeded.

现在重新尝试一下,发现问题没有了....


SQL> show user USER is "SCOTT" SQL> show parameter nls_sort;
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ nls_sort string SQL> select value from v$parameter where name='nls_sort';
VALUE -------------------------------------------------------------------------------

扩展

1。 SHOW 命令

sql*plus提供了很多SHOW命令来方便对一些设置的查看,比如show sga,这些应该也是对相应的视图的访问。关于sqlplus的SHOW命令,可以参见官方文档

2。 关于parameter 视图

Oracle 提供了几个parameter视图,如下

v$parameter / v$parameter2

v$system_parameter / v$system_parameter2

v$spparameter

其中v$parameter(2)反映的是当前session中各个参数的值,v$system_parameter(2)则是instance级别的参数的值,v$spparameter则是spfile中存储的参数的值。

v$parameter和v$parameter2的区别在于,对于那些值为多个的参数, v$parameter2会对将每个值都显示成独立的一行,而v$parameter则会将所有的值都显示在一行中。 v$system_parameter和v$system_parameter2类似。

select * from v$parameter where name='control_files'

select * from v$parameter2 where name='control_files'

新的疑问

注意到通过alter session命令更改了参数nls_sort之后,通过show parameter或者查询v$parameter却查询不到变化,如下所示...


SQL> show user USER is "SCOTT" SQL> show parameter nls_sort
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ nls_sort string SQL> alter session set nls_sort=binary_ci;
Session altered.
SQL> show parameter nls_sort
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ nls_sort string SQL> select value from v$parameter where name='nls_sort';
VALUE ---------------------------------------------------------------------------------- ----------------------------------------------------------------------------------

这个岂不怪哉,难倒对nls_sort参数的改动没有任何效果,但是经过测试发现,当前session的行为确实变成了大小写不敏感了。那么为什么这个参数值的改变没有体现在v$parameter这个视图中间呢?

无意中发现有个视图叫v$nls_parameters (注意这个视图的名字是复数形式),那么查询这个这个视图看看怎么个情况...


SQL> show user USER is "SCOTT" SQL> select * from v$nls_parameters where parameter='nls_sort';
PARAMETER VALUE ---------------------------------------------------------------- ---------------- NLS_SORT BINARY_CI
SQL>

可以看到这个参数确实是起作用的,因为我查询v$nls_parameter的时候,用的是'nls_sort' 而不是'NLS_SORT'来做查询限制条件!那么由此可以推测出通过alter session来更改NLS相关的参数的时候,改变是通过v$nls_parameters这个动态视图体现出来的。

另外还注意到几个静态视图跟NLS相关,包括NLS_DATABASE_PARAMETERS, NLS_INSTANCE_PARAMETERS, NLS_SESSION_PARAMETERS. 根据视图的名字不难推断出这几个视图分别显示的是什么内容,NLS_SESSION_PARAMETERS 和 v$nls_parameters应该反映的是同样的信息,都是当前session的NLS参数的设置情况。

可以通过查看查询计划的方式来看一下这些视图究竟是建立在哪些表上的,如下...

(1) NLS_DATABASE_PARAMETERS


SQL> set autotrace traceonly explain SQL> select * from nls_database_parameters;
Execution Plan ---------------------------------------------------------- Plan hash value: 415205717
---------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ---------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 28 | 2 (0)| 00:00:01 | |* 1 | TABLE ACCESS FULL| PROPS$ | 1 | 28 | 2 (0)| 00:00:01 | ---------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - filter("NAME" LIKE 'NLS%')
SQL>

可以看到NLS_DATABASE_PARAMETERS是建立在表数据字典表PROP$之上的,从中只取出NLS相关的参数。

(2) NLS_INSTANCE_PARAMETERS & v$parameter


SQL> select * from nls_instance_parameters;
Execution Plan ---------------------------------------------------------- Plan hash value: 1128103955
------------------------------------------------------------------------------ | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ------------------------------------------------------------------------------ | 0 | SELECT STATEMENT | | 1 | 358 | 1 (100)| 00:00:01 | |* 1 | HASH JOIN | | 1 | 358 | 1 (100)| 00:00:01 | |* 2 | FIXED TABLE FULL| X$KSPPI | 1 | 68 | 0 (0)| 00:00:01 | | 3 | FIXED TABLE FULL| X$KSPPCV | 100 | 29000 | 0 (0)| 00:00:01 | ------------------------------------------------------------------------------ Predicate Information (identified by operation id): --------------------------------------------------- 1 - access("X"."INDX"="Y"."INDX") filter(TRANSLATE("KSPPINM",'_','#') NOT LIKE '#%' OR "KSPPSTDF"='FALSE' OR BITAND("KSPPSTVF",5)>0) 2 - filter("KSPPINM" LIKE 'nls%' AND "X"."INST_ID"=USERENV('INSTANCE') AND TRANSLATE("KSPPINM",'_','#') NOT LIKE '##%')
SQL> select * from v$parameter;
Execution Plan ---------------------------------------------------------- Plan hash value: 1128103955
------------------------------------------------------------------------------ | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ------------------------------------------------------------------------------ | 0 | SELECT STATEMENT | | 1 | 926 | 1 (100)| 00:00:01 | |* 1 | HASH JOIN | | 1 | 926 | 1 (100)| 00:00:01 | |* 2 | FIXED TABLE FULL| X$KSPPI | 1 | 249 | 0 (0)| 00:00:01 | | 3 | FIXED TABLE FULL| X$KSPPCV | 100 | 67700 | 0 (0)| 00:00:01 | ------------------------------------------------------------------------------ Predicate Information (identified by operation id): --------------------------------------------------- 1 - access("X"."INDX"="Y"."INDX") filter(TRANSLATE("KSPPINM",'_','#') NOT LIKE '#%' OR "KSPPSTDF"='FALSE' OR BITAND("KSPPSTVF",5)>0) 2 - filter("X"."INST_ID"=USERENV('INSTANCE') AND TRANSLATE("KSPPINM",'_','#') NOT LIKE '##%')
SQL>

可以看到NLS_INSTANCE_PARAMETERS和v$parameter都建立在内部表X$KSPPI和X$KSPPCV之上。唯一的区别在于NLS_INSTANCE_PARAMETERS多了一个限制条件"KSPPINM" LIKE 'nls%'

(3) NLS_SESSION_PARAMETERS & v$nls_parameters


SQL> select * from nls_session_parameters;
Execution Plan ---------------------------------------------------------- Plan hash value: 1805486652
------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 81 | 0 (0)| 00:00:01 | |* 1 | FIXED TABLE FULL| X$NLS_PARAMETERS | 1 | 81 | 0 (0)| 00:00:01 | ------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - filter("PARAMETER"<>'NLS_CHARACTERSET' AND "PARAMETER"<>'NLS_NCHAR_CHARACTERSET' AND "PARAMETER"<>'NLS_SPECIAL_CHARS' AND "INST_ID"=USERENV('INSTANCE'))
SQL> select * from v$nls_parameters;
Execution Plan ---------------------------------------------------------- Plan hash value: 1805486652
------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 81 | 0 (0)| 00:00:01 | |* 1 | FIXED TABLE FULL| X$NLS_PARAMETERS | 1 | 81 | 0 (0)| 00:00:01 | ------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - filter("PARAMETER"<>'NLS_SPECIAL_CHARS' AND "INST_ID"=USERENV('INSTANCE'))
SQL>

可以看到nls_session_parameters和v$nls_parameters都建立在内部表X$NLS_PARAMETERS之上,但是nls_session_parameters比v$nls_parameters少两个参数NLS_CHARACTERSET 和 LS_NCHAR_CHARACTERSET


SQL> select * from v$nls_parameters   2  minus   3  select * from nls_session_parameters;
PARAMETER VALUE ---------------------------------------------------------------- --------------- NLS_CHARACTERSET WE8MSWIN1252 NLS_NCHAR_CHARACTERSET AL16UTF16

因此查询nls相关的session级别的参数设置,不要查询v$parameter(nls_instance_parameters), 要查询v$nls_parameters(nls_session_parameters)


SQL> select * from nls_instance_parameters;
PARAMETER VALUE ------------------------------ ---------------------------------------- NLS_LANGUAGE AMERICAN NLS_TERRITORY AMERICA NLS_SORT NLS_DATE_LANGUAGE NLS_DATE_FORMAT NLS_CURRENCY NLS_NUMERIC_CHARACTERS NLS_ISO_CURRENCY NLS_CALENDAR NLS_TIME_FORMAT NLS_TIMESTAMP_FORMAT NLS_TIME_TZ_FORMAT NLS_TIMESTAMP_TZ_FORMAT NLS_DUAL_CURRENCY NLS_COMP NLS_LENGTH_SEMANTICS BYTE NLS_NCHAR_CONV_EXCP FALSE
17 rows selected.
SQL> select * from nls_session_parameters;
PARAMETER VALUE ------------------------------ ---------------------------------------- NLS_LANGUAGE AMERICAN NLS_TERRITORY AMERICA NLS_CURRENCY $ NLS_ISO_CURRENCY AMERICA NLS_NUMERIC_CHARACTERS ., NLS_CALENDAR GREGORIAN NLS_DATE_FORMAT DD-MON-RR NLS_DATE_LANGUAGE AMERICAN NLS_SORT BINARY_CI NLS_TIME_FORMAT hh24:mi:ss NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR NLS_DUAL_CURRENCY $ NLS_COMP ANSI NLS_LENGTH_SEMANTICS BYTE NLS_NCHAR_CONV_EXCP FALSE
17 rows selected.

[转]Show parameter & Table Not exists的更多相关文章

  1. 用apache-cxf生成webservice客户端的时候报错Parameter: shead already exists for method

    版本apache-cxf-3.1.0 命令如下:wsdl2java -p com.wz.interfaces -d ./src -client ./ws/xxx.wsdl 报错如下: WSDLToJa ...

  2. magento -- 解决magento错误:ERROR: Base table or view already exists: 1050 Table ... already exists

    相信有更新magento或者,备份转移magento站点的时候可能会碰到类似这样的错误提示: Base table or view already exists: 1050 Table ... alr ...

  3. DAX/PowerBI系列 - 参数表(Parameter Table)

    DAX/PowerBI系列 - 参数表(Parameter Table) 难度: ★☆☆☆☆(1星) 适用范围: ★★★★☆(4星) 概况: 这个模式比较简单灵活,而且很实用.所用的DAX语句也比较简 ...

  4. (玩起来)DAX/PowerBI系列 - 参数表(Parameter Table) - 多时间段数值对比

    盆友们,边看文章边玩,请耐心等待PowerBI load出来~~~~ (7.8秒钟) DAX/PowerBI系列 - 参数表(Parameter Table) - 多时间段数值对比 难度: ★☆☆☆☆ ...

  5. DAX/PowerBI系列 - 参数表(Parameter Table) 度量值模板

    DAX/PowerBI系列 - 参数表(Parameter Table) 度量值模板 难度: ★★☆☆☆(2星) 适用范围: ★★★☆☆(3星) 概况: 当你有多个度量值都需要计算YTD,MoM,而又 ...

  6. DAX/PowerBI系列 - 参数表(Parameter Table) - 大客户分析(Top N)

    DAX/PowerBI系列 - 参数表(Parameter Table) - 大客户分析(Top N) 难度: ★☆☆☆☆(1星) 适用范围: ★★★☆☆(3星) 概况:此文为DAX/PowerBI系 ...

  7. hbase源码分析:ERROR: Table already exists问题诊断

    问题描述: 重新安装了测试环境的hadoop,所以之前hbase所建的表数据都丢失了,但是zookeeper没有动.在hbase shell中list的时候,看不到之前建的表,但是create tes ...

  8. NameNode格式化后HBase创建新表提示旧表已存在:table already exists

    1.问题出现: 在格式化NameNode后,集群上安装的OpenTSDB的表(存在hbase中)都没有了,重新运行OpenTSDB预创建表步骤报错显示table already exists 2.原因 ...

  9. Mysql 创建表时错误:Tablespace for table `tablexx` exists. Please DISCARD the tablespace before IMPORT.

    在本地的一个数据库创建表时意外的出现了以下错误,说是表已经存在了 但通过desc 查看表信息时又说表不存在 在本地系统搜索表名却发现一个.ibd文件[InnoDB File] 在删除了该.ibd文件文 ...

随机推荐

  1. vs2015+opencv3.3.1 +Eigen 3.3.4 c++实现 薄膜插值 泊松图像编辑(v=0||Δf=0)

    #include "core/core.hpp" #include "highgui/highgui.hpp" #include "imgproc/i ...

  2. day5学python 基础+装饰器内容

    基础+装饰器内容 递归特性# 1.必须有一个明确的结束条件# 2.每次进入更深一层递归时,问题规模相比上次递归应有所减少# 3.递归效率不高 def run(n): print(n) if int(n ...

  3. winform列标题高度无法改变

    datagridview行为里把ColumnHeadersHeightSizeMode属性设置为EnableResizing 但好像会导致横向滚动条从底部跑到了中间,还不知道这个BUG的原因,将Col ...

  4. C# Winform下一个热插拔的MIS/MRP/ERP框架12(数据处理基类)

    作为ERP等数据应用程序,数据库的处理是重中之重. 在框架中,我封装了一个数据库的基类,在每个模组启动或窗体启动过程中,实例化一个基类即可调用CRUD操作(create 添加read读取 update ...

  5. Python中实现简单的插件框架

    在系统设计中,经常我们希望设计一套插件机制,在不修改程序主体情况下,动态去加载附能. 我设想的插件系统: 1.通过类来实现 2.自动查找和导入 我们假设需要实现一个简单的插件系统,插件可以接收一个参数 ...

  6. loj2289 [THUWC 2017]在美妙的数学王国中畅游(LCT+Taylor展开)

    link 题目大意: 你需要维护一个树 每个点都有个sin(ax+b)或exp(ax+b)或ax+b 你需要维护一些操作:连边.删边.修改某个点的初等函数.询问某条树链上所有函数带入某个值后权值和或不 ...

  7. mysql的唯一索引UNIQUE

    创建唯一索引的目的不是为了提高访问速度,而只是为了避免数据出现重复.唯一索引可以有多个但索引列的值必须唯一,索引列的值允许有空值.如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的 ...

  8. AttributeError: module 'yagmail' has no attribute 'SMTP',关于使用yagmail发邮件报错的解决方法

    想用yagmail,发送自动化测试结果邮件,发现运行的时候报错.最后发现是自己的脚本名称用的yagmail.py,更改成另一个就好,换了my_yagmail.py 再运行OK啦!!!!

  9. C#图片处理3种高级应用(高缩略图清晰度、图片剪裁、图片水印)

    利用C#图片处理的一些基本和高级应用,解决了显示排版时想让相片缩略图列表非常统一.整齐.和美观,每张缩略图大小固定为120 x 90且不拉伸变形,用户头像让缩略图比原图更清晰,上传的图片下加一个半透明 ...

  10. Fast Matrix Operations UVA - 11992 线段树

    题意翻译 有一个r行c列的全0矩阵,有以下三种操作. 1 X1 Y1 X2 Y2 v 子矩阵(X1,Y1,X2,Y2)的元素加v 2 X1 Y1 X2 Y2 v 子矩阵(X1,Y1,X2,Y2)的元素 ...