[转]Show parameter & Table Not exists

本文转自: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.

 

兹又尝试一下,发现题目没了….

 

 

图片 1😉

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 ——————————————————————————-

图片 2😉

 

 

扩展

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却查询不顶转,如下所示…

 

 

图片 3😉

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 ———————————————————————————- ———————————————————————————-

图片 4😉

 

 

本条岂不怪哉,难倒对nls_sort参数的改动无任何成效,但是通过测试发现,当前session的一言一行真变成了大大小小写不灵敏了。那么为什么这个参数值的反没有体现在v$parameter这个视图中间为?

不知不觉中窥见发只视图叫v$nls_parameters
(注意这视图的讳是复数形式),那么查询者是视图看看怎么个情况…

 

图片 5😉

SQL> show user USER is “SCOTT” SQL> select * from
v$nls_parameters where parameter=’nls_sort’;
PARAMETER VALUE —————————————————————-
—————- NLS_SORT BINARY_CI
SQL>

图片 6😉

 

好看来这参数确实是打作用的,因为我询问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

 

图片 7😉

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>

图片 8😉

 

 

足见见NLS_DATABASE_PARAMETERS是成立于表数据字典表PROP$之上的,从中只取出NLS相关的参数。

 

(2) NLS_INSTANCE_PARAMETERS & v$parameter

 

图片 9😉

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

相关文章