oracle中的数据字典table和数据字典视图有什么区别?
What is the difference between data dictionary table and data dictionary views in oracle?
我正在搜索数据字典表,我最终进入了这个描述 "Tables Data Dictionary Views" 的页面。
https://docs.oracle.com/cd/B28359_01/server.111/b28310/tables014.htm#ADMIN01508
那么数据字典视图和数据字典表
有什么区别
请以简单的方式回答,因为我是 oracle 的新手,我正在使用 oracle 11g。
我只想知道差异是否存在。
与所有 table 和视图一样,数据字典视图是从数据字典 table 中呈现数据的不同方式。字典表是字典数据的主要来源。同一个table可能支持多个观点。视图(在查询时即时计算,它们未存储在数据库中)可能会呈现来自同一 table 的不同数据,例如基于查询数据的用户。
以DBA_TABLES、ALL_TABLES和USER_TABLES 浏览量为例。他们从一个存储的字典中提取 table;但是,它们有不同的列、不同的 WHERE 子句 - 以呈现不同的行集 - ALL_TABLES 和 USER_TABLES 将根据用户身份呈现不同的数据。
字典视图还可以在单个结果集中(通过连接等)或处理后的数据(例如聚合)中呈现来自多个字典表的数据——与视图在数据库中的一般使用方式没有区别, "data dictionary" 观看次数与它们没有特殊联系。
编辑
我从来没有好奇地检查 DBA_TABLES
视图的定义。不难找到。读到这里,我意识到我上面说的一件事是不正确的。 DBA_TABLES
本身不是基于单一的基础字典 table;相反,它是连接其他几个 table 和视图(它们本身可能具有重要定义)的结果。这是 Oracle 12.2.0.1 中 DBA_TABLES
的视图定义的 FROM
部分:
...
from sys.user$ u, sys.ts$ ts, sys.seg$ s, sys.obj$ co, sys.tab$ t,
sys."_CURRENT_EDITION_OBJ" o,
sys.obj$ cx, sys.user$ cu, x$ksppcv ksppcv, x$ksppi ksppi,
sys.deferred_stg$ ds, sys.imsvc$ svc
-- where
...
三种数据字典视图的区别在于结果集。
USER_TABLES 显示您当前连接到的架构中的表。
ALL_TABLES 显示您当前连接的用户可以访问的表。此视图有一个附加列 OWNER,以显示拥有架构。
DBA_TABLES 显示数据库中的表。此视图有一个附加列 OWNER,以显示拥有架构。仅限高级用户,例如具有 DBA 角色或 SELECT ANY DICTIONARY 权限的用户。
您发布的 link 会将您带到标题为 "Table Data Dictionary Views" 的页面。
该页面上列出的所有内容都是 视图,而不是 table。例如,该页面上列出的 DBA_COL_COMMENTS
是一个视图。 DBA_TABLES
是一种观点。
在此特定页面上,所有条目都是数据字典视图关于您数据库中的 table。这就是页面标题为 "table data dictionary views" 的原因。还有另一个类似的页面,标题为 "Undo Data Dictionary Views",其中列出了有关数据库中撤消的所有数据字典视图。另一个页面,"Cluster Data Dictionary Views" 列出了关于您数据库中集群的所有数据字典视图。
真正的 "data dictionary table",这不是您的 link 显示的内容,类似于 SYS.OBJ$
。这是一个 table,用于在您的数据库中存储有关 objects 的信息。它是 DBA_OBJECTS
数据字典视图的主要数据源之一。数据字典 table 是 low-level 和神秘的(大部分)。数据字典视图更加友好且易于解释。
另外,为了完整起见,还有"fixed data dictionary tables",这超出了你的提问范围。
我正在搜索数据字典表,我最终进入了这个描述 "Tables Data Dictionary Views" 的页面。
https://docs.oracle.com/cd/B28359_01/server.111/b28310/tables014.htm#ADMIN01508
那么数据字典视图和数据字典表
有什么区别请以简单的方式回答,因为我是 oracle 的新手,我正在使用 oracle 11g。 我只想知道差异是否存在。
与所有 table 和视图一样,数据字典视图是从数据字典 table 中呈现数据的不同方式。字典表是字典数据的主要来源。同一个table可能支持多个观点。视图(在查询时即时计算,它们未存储在数据库中)可能会呈现来自同一 table 的不同数据,例如基于查询数据的用户。
以DBA_TABLES、ALL_TABLES和USER_TABLES 浏览量为例。他们从一个存储的字典中提取 table;但是,它们有不同的列、不同的 WHERE 子句 - 以呈现不同的行集 - ALL_TABLES 和 USER_TABLES 将根据用户身份呈现不同的数据。
字典视图还可以在单个结果集中(通过连接等)或处理后的数据(例如聚合)中呈现来自多个字典表的数据——与视图在数据库中的一般使用方式没有区别, "data dictionary" 观看次数与它们没有特殊联系。
编辑
我从来没有好奇地检查 DBA_TABLES
视图的定义。不难找到。读到这里,我意识到我上面说的一件事是不正确的。 DBA_TABLES
本身不是基于单一的基础字典 table;相反,它是连接其他几个 table 和视图(它们本身可能具有重要定义)的结果。这是 Oracle 12.2.0.1 中 DBA_TABLES
的视图定义的 FROM
部分:
...
from sys.user$ u, sys.ts$ ts, sys.seg$ s, sys.obj$ co, sys.tab$ t,
sys."_CURRENT_EDITION_OBJ" o,
sys.obj$ cx, sys.user$ cu, x$ksppcv ksppcv, x$ksppi ksppi,
sys.deferred_stg$ ds, sys.imsvc$ svc
-- where
...
三种数据字典视图的区别在于结果集。
USER_TABLES 显示您当前连接到的架构中的表。
ALL_TABLES 显示您当前连接的用户可以访问的表。此视图有一个附加列 OWNER,以显示拥有架构。
DBA_TABLES 显示数据库中的表。此视图有一个附加列 OWNER,以显示拥有架构。仅限高级用户,例如具有 DBA 角色或 SELECT ANY DICTIONARY 权限的用户。
您发布的 link 会将您带到标题为 "Table Data Dictionary Views" 的页面。
该页面上列出的所有内容都是 视图,而不是 table。例如,该页面上列出的 DBA_COL_COMMENTS
是一个视图。 DBA_TABLES
是一种观点。
在此特定页面上,所有条目都是数据字典视图关于您数据库中的 table。这就是页面标题为 "table data dictionary views" 的原因。还有另一个类似的页面,标题为 "Undo Data Dictionary Views",其中列出了有关数据库中撤消的所有数据字典视图。另一个页面,"Cluster Data Dictionary Views" 列出了关于您数据库中集群的所有数据字典视图。
真正的 "data dictionary table",这不是您的 link 显示的内容,类似于 SYS.OBJ$
。这是一个 table,用于在您的数据库中存储有关 objects 的信息。它是 DBA_OBJECTS
数据字典视图的主要数据源之一。数据字典 table 是 low-level 和神秘的(大部分)。数据字典视图更加友好且易于解释。
另外,为了完整起见,还有"fixed data dictionary tables",这超出了你的提问范围。