暂无图片
暂无图片
9
暂无图片
暂无图片
暂无图片

Oracle Concepts(Oracle 19c):06 Data Dictionary and Dynamic Performance Views

原创 Ryan Bai 2021-09-07
1202

数据字典概述

Oracle 数据库的一个重要部分是它的数据字典,它是一组提供有关数据库管理元数据的只读表。

数据字典包含如下信息:

  • 在数据库中每个模式对象的定义,包括列的默认值和完整性约束信息
  • 分配给模式对象的空间量及当前已使用量
  • Oracle 数据库用户的名称、 授予用户的权限和角色、和与用户相关的审计信息

数据字典是每个 Oracle 数据库数据管理的核心部分。 例如,数据库执行下列操作:

  • 访问数据字典来查找有关用户、模式对象、和存储结构的信息
  • 每次发出 DDL 语句时,修改数据字典

就像存储其他数据一样, 数据库将数据字典数据存储在表中, 用户可以使用 SQL 来查询其中的数据。 例如,用户可以运行 SELECT 语句,以确定他们的权限,在他们的模式中有哪些表, 这些表中有哪些列, 这些列上是否建有索引等。

数据字典的内容

数据字典包含基表和视图。

这些对象的定义如下:

  • 基表
    它们存储有关数据库的信息。只应该由数据库写入和读取这些表。用户很少直接访问基础表,因为他们已被规范化,且大多数数据存储为一种神秘的格式。
  • 视图
    它们通过使用联接和 WHERE 子句来简化信息,将基础表的数据解码成有用的信息(如用户或表名等) 。这些视图包含数据字典中的所有对象的名称和描述。 一些视图可以被所有数据库用户访问, 而其他一些则仅供管理员访问。

通常,数据字典视图按集合分组。在许多的情况下,一个集合由三个包含相似信息的视图,并且彼此之间通过不同的前缀来区分,如下表所示,通过查询相应的视图,您可以访问只与您相关的信息。

前缀 用户访问 内容 注意
DBA_ 数据库管理员 所有对象 一些 DBA_ 视图具有更多的列,其中包含对管理员有用的信息。
ALL_ 所有用户 用户具有访问权限的对象 包括用户所拥有的对象。这些视图服从当前已启用的角色集合。
USER_ 所有用户 用户所拥有的对象 以 USER_为前缀的视图通常不包括 OWNER 列。此列隐含为对该 USER_ 视图发出查询的用户。

不是所有的视图集都有三个视图成员。例如, 数据字典包含 DBA_LOCK 视图,但没有 ALL_LOCK 视图。

系统提供的 DICTIONARY 视图包含所有数据字典视图的名称和简短说明。 如下的对此视图的查询包含部分示例输出:

SQL> SELECT * FROM DICTIONARY 2 ORDER BY TABLE_NAME; TABLE_NAME COMMENTS ------------------------------ ---------------------------------------- ALL_ALL_TABLES Description of all object and relational tables accessible to the user ALL_APPLY Details about each apply process that dequeues from the queue visible to the current user . . .
具有 DBA_ 前缀的视图

具有 DBA_前缀的视图显示在整个数据库中的所有相关信息。 DBA_ 视图仅用于管理员。

例如,下面的查询显示数据库中的所有对象的有关信息:

SELECT OWNER, OBJECT_NAME, OBJECT_TYPE FROM DBA_OBJECTS ORDER BY OWNER, OBJECT_NAME;
具有 ALL_ 前缀的视图

具有 ALL_前缀的视图,是站在用户角度,从整体上看待数据库。

这些视图除了包括用户本身拥有的模式对象之外,还包括该用户通过公共或显式授予的特权及角色所能访问的模式对象信息。

例如,如下的查询将返回有关您有权访问的所有对象的信息:

SELECT OWNER, OBJECT_NAME, OBJECT_TYPE FROM ALL_OBJECTS ORDER BY OWNER, OBJECT_NAME;

因为 ALL_ 视图遵从当前已启用的角色集合, 查询结果取决于已启用了哪些角色,如下例所示:

SQL> SET ROLE ALL; Role set. SQL> SELECT COUNT(*) FROM ALL_OBJECTS; COUNT(*) ---------- 68295 SQL> SET ROLE NONE; Role set. SQL> SELECT COUNT(*) FROM ALL_OBJECTS; COUNT(*) ---------- 53771

应用程序开发人员在一个存储过程中使用 ALL_ 视图时应认识到的角色的影响, 默认情况下角色是未启用的。

具有 USER_ 前缀的视图

典型的数据库用户最有可能感兴趣的视图可能是那些具有 USER_ 前缀的视图。

这些视图:

  • 指的是用户在数据库中的私有环境,包括用户所创建的模式对象的元数据,对该用户的授权等等
  • 只显示与该用户相关的行,仅返回 ALL_视图中的信息的一个子集
  • 除隐含的 OWNER 列外,与其他视图具有相同的列
  • 为了方便,可能具有简洁的 PUBLIC 同义词

例如,以下查询将返回包含在你的模式中的所有对象:

SELECT OBJECT_NAME, OBJECT_TYPE FROM USER_OBJECTS ORDER BY OBJECT_NAME;
DUAL 表

DUAL 是数据字典中的一个很小的表, 数据库和用户编写的程序可以引用它, 以保证一个已知的结果。

当一个值必须只能返回一次时,DUAL 表很有用,如当前日期和时间等。所有数据库用户都可以访问 DUAL 表。

DUAL 表只有一个称为 DUMMY 的列,仅包含一个其值为 X 的行。下面的示例查询 DUAL 来执行一个算术操作:

SQL> SELECT ((3*4)+5)/3 FROM DUAL; ((3*4)+5)/3 ----------- 5.66666667

数据字典存储

数据字典基表是在任何 Oracle 数据库中创建的第一批对象。

所有数据库的数据字典表和视图都存储在 SYSTEM 表空间中。 由于当数据库打开时,SYSTEM 表空间始终处于联机状态 , 所以当数据库打开时,数据字典总是可用的。

Oracle 数据库如何使用数据字典

Oracle 数据库的 SYS 用户, 拥有数据字典中的所有基表和用户可访问视图。

在数据库运行期间,数据库读取数据字典,以确定存在模式对象,且用户对它们具有适当的访问权限。 Oracle 数据库也会不断地更新数据字典, 以反映对数据库结构、审计、授权、 和数据等所做的更改。

例如, 如果 hr 用户创建了一个名为 interns 的表, 则新行被添加到数据字典中, 以反映新的表、列、段、区、和 hr 用户在该表上的权限。这些新的信息在字典视图下一次被查询时即可见。

数据字典基表中的数据, 对于 Oracle 数据库发挥正常功能是必要的。因此,只应当由数据库写入或更改数据字典信息。 无论何时, 任何数据库用户都不应改变 SYS 模式中的表行或模式对象,因为这种行为可能会危及数据完整性。安全管理员必须严格控制这个最重要的帐户。

数据字典视图的公共同义词

Oracle 数据库为许多数据字典视图创建公共同义词,以便用户可以方便地访问它们。

安全管理员还可以为其它在系统范围内使用的模式对象创建公共同义词。用户应避免使用与公共同义词相同的名称来命名他们自己的模式对象。

Data Dictionary Cache

很多数据字典信息存在于数据字典缓存中,因为数据库需要这些信息,来不断验证用户的访问权限,并验证模式对象的状态。

解析信息通常保存在缓存中。 用于描述表及其列的 COMMENTS 列不会缓存在词典高速缓存中,但可缓存在数据库 database buffer cache 中。

其他程序与数据字典

其他 Oracle 数据库产品可能会引用现有的视图,并创建他们自己额外的数据字典表或视图。

应用程序开发人员在编写需要引用数据字典的程序时, 应该引用公共同义词而不是基表。同义词不太可能随版本变化而变化。

动态性能视图概述

在 Oracle 数据库的操作过程中,它会维护一组记录当前数据库活动的虚拟表。

这些视图是动态的,因为他们在数据库处于打开状态和在使用过程中会不断更新。这些视图有时也称为 V$ 视图,因为它们的名字以 V$ 起始。

动态性能视图包含如下所示的信息:

  • 系统和会话参数
  • 内存使用和分配
  • 文件状态(包括 RMAN 备份文件)
  • 工作和任务的进度
  • SQL 运行
  • 统计和度量

动态性能视图有以下主要用途:

  • Oracle 企业管理器使用这些视图,来获取有关数据库的信息
  • 理员可以使用这些视图,用于性能监控和调试。

动态性能视图的内容

由于动态性能视图不能被数据库管理员更改或删除,有时它们也称为固定视图。但是,数据库管理员可以在表上执行查询和创建视图,并将这些视图的访问权限授予其他用户。

SYS 拥有其名称以 V_$ 开头的动态性能表。 动态性能视图基于这些表创建,然后在视图上创建以 V$作为前缀的公共同义词。例如, V$DATAFILE 视图包含有关数据文件的信息。 V$FIXED_TABLE 视图包含有关所有动态性能表和视图的信息。

对几乎所有的 V$ 视图,都存在一个相应的 GV$ 视图。在 Oracle 真正应用集群 (Oracle RAC)中,查询 GV$ 视图会从所有合适的数据库实例中检索其 V$ 视图信息。

使用数据库配置助手(DBCA)创建数据库时, Oracle 会自动创建数据字典。 Oracle 数据库将自动运行 catalog.sql 脚本,其中包含用于动态性能视图的视图和公共同义词的定义。您必须运行 catalog.sql 以创建这些视图和同义词。

动态性能视图的存储

动态性能视图基于从数据库内存结构生成的虚拟表。

这些视图不是存储在数据库中的常规表。由于数据是动态更新的,所以不能保证视图的读一致性。

因为动态性能视图并不是真正的表,其数据取决于数据库和实例的状态。例如,当数据库已启动但未装入时,您可以查询 V$INSTANCE 和 V$BGPROCESS。但是,直到数据库已装入时,您才能查询 V$DATAFILE。

数据库对象的元数据

DBMS_METADATA 软件包提供了用于提取数据库对象的完整定义的接口。

定义可以按 XML 或 SQL DDL 来表示。 它提供了两种样式的接口: 一个灵活的、 复杂的用于编程控制的接口, 和一个简化的用于特定查询的接口。

最后修改时间:2024-04-16 09:21:43
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论