Answers:
最简单的想法是:
DBA_ / USER_ / ALL_
视图基于数据字典构建-如果未安装和打开数据库,则视图不可用。
V$
视图倾向于针对实例运行,因此,如果未安装数据库,或者未安装和打开数据库,则视视图的性质而定。
使用您的示例:
V$TABLESPACE
是的视图X$KCCTS
,它是内部存储器结构。 DBA_TABLESPACES
是数据字典表上的视图 SYS.TS$
除了Adam Musch列出的差异之外,值得一提的是dba_视图和v $视图之间还有一些差异,因为如果您不了解这些差异,它们是潜在的陷阱:
1)大多数(但不是全部)v $视图在技术上根本不是视图,而是v_ $视图的同义词。这是一个重要的区别,因为您不能授予/撤销对同义词的权限:
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.
2)您可以对dba_视图运行闪回查询。但是,对v $视图运行闪回查询将返回当前数据(有关使用Oracle闪回技术的12.1文档):
您无法从动态效果(V $)视图中检索过去的数据。在这种视图上的查询返回当前数据。
您可以在静态数据字典视图中对过去的数据执行查询,例如* _TABLES。
正如Adam Musch指出的那样,v $视图直接针对实例运行,而dba_视图针对数据字典运行。一旦您了解了这一点,便可以理解为什么存在此限制。尽管如此,我真的希望针对v $视图的闪回查询将返回一个错误,而不是默默地不起作用,因为这个陷阱可能会在相当长的一段时间内未被注意到。