sqlplus / as sysdba
grant select on v$tablespace to user1;
SQL Error: ORA-02030: can only select from fixed tables/views
select table_name from dba_synonyms where synonym_name = 'V$TABLESPACE';
TABLE_NAME
-------------
V_$TABLESPACE
grant select on V_$TABLESPACE to user1;
grant succeeded.
想到它的最简单方法是:
DBA_ / USER_ / ALL_
视图建立在数据字典上 - 如果数据库未安装和打开,它们将不可用。V$
视图倾向于针对实例运行,因此如果数据库未安装或未安装和打开,则可能可用,具体取决于视图的性质。使用您的示例:
V$TABLESPACE
是一个关于 的视图X$KCCTS
,它是一个内部存储器结构。DBA_TABLESPACES
是数据字典表的视图SYS.TS$
除了 Adam Musch 列出的差异之外,dba_ 视图和 v$ 视图之间还有一些差异值得一提,因为如果您不知道这些差异,它们是潜在的陷阱:
1) 大多数(但不是全部)v$ 视图在技术上根本不是视图,而是 v_$ 视图的同义词。这是一个重要的区别,因为您不能授予/撤销对同义词的权限:
2) 您可以针对 dba_ 视图运行闪回查询。但是,针对 v$ 视图运行闪回查询会返回当前数据(有关使用 Oracle 闪回技术的 12.1 文档):
正如 Adam Musch 所指出的,v$ 视图直接针对实例运行,而 dba_ 视图针对数据字典运行。一旦你理解了这一点,为什么会有这个限制是有道理的。尽管如此,我真的希望对 v$ 视图的闪回查询会返回一个错误,而不是静默地不起作用,因为这个陷阱可能会在很长一段时间内被忽视......