av $视图与其等效的dba_有什么区别?


Answers:


13

最简单的想法是:

  • DBA_ / USER_ / ALL_ 视图基于数据字典构建-如果未安装和打开数据库,则视图不可用。

  • V$ 视图倾向于针对实例运行,因此,如果未安装数据库,或者未安装和打开数据库,则视视图的性质而定。

使用您的示例:

  • V$TABLESPACE是的视图X$KCCTS,它是内部存储器结构。
  • DBA_TABLESPACES 是数据字典表上的视图 SYS.TS$

3

除了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 $视图的闪回查询将返回一个错误,而不是默默地不起作用,因为这个陷阱可能会在相当长的一段时间内未被注意到。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.