[转]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

相关文章