共计 2194 个字符,预计需要花费 6 分钟才能阅读完成。
这篇文章给大家介绍 Oracle12c 中 CDB 数据库中数据字典架构是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
数据字典就是元数据的集合,比如创建的表,列,约束,触发器等等这些都是元数据,需要保存到数据库中。除此之外,Oracle 自身的一些数据库对象,如目录,PL/SQL 代码等等这些都是元数据,都需要存放在数据字典中。随着 12c 容器数据的普及,Oracle 数据字典发生了哪些变化呢,下文即是具体描述。
一、数据字典及其形成
1、数据字典
数据字典是元数据的集合,从逻辑上和物理上描述了数据库及内容,存储于 SYSTEM 与 SYSAUX 表空间内的若干段。
SYS 用户拥有所有的数据字典表,数据字典基本一般以
2、数据字典的形成
在数据库创建阶段创建,在使用阶段维护和更新
无法通过 DML 操作来修改,只能通过相关的命令修改系统,来达到间接修改数据字典。
3、数据字典包括的内容
数据库对象的定义信息
用户定义信息
PL/SQL 代码
用户创建的其他对象等
关于数据字典详细介绍可以参考:Oracle 数据字典和数据字典视图
二、CDB 数据库中数据字典架构
1、数据字典存放方式的变更
在 Oracle 12c 之前的数据库版本,系统数据字典和用户数据字典采取了混合存放的处理方式。
在 Oracle 12c CDB 数据库中采取分离存放的方式,及各个 PDB 数据字典独立存放。
从用户和应用程序的角度来看,CDB 中每个容器中的数据字典是分开的,因为它将在非 CDB 中。
2、非 CDB 混用数据字典情形示意图
在新创建的不包含用户数据的非 CDB 中,数据字典仅包含系统元数据。
例如,TAB$ 表包含仅描述 Oracle 提供的表的行,例如 TRIGGER$ 和 SERVICE$。
随着用户数据库对象添加到数据库,则用户添加的这些对象信息被混合存放到了系统数据字典(即 Oracle 提供的数据对象字典)
如下图描绘了二个基础数据字典表
左边图示中黑色条表示描述系统数据字典的行,绿色条的表示用户对象产生的行相间到数据字典表
3、CDB 分离数据字典情形示意图
在 CDB 中,数据字典元数据在根和 PDB 之间分割。
在下图中,表 emp 和 dept 位于 PDB 中。该用户数据的数据字典也驻留在 PDB 中。因此,TAB$PDB 中的表具有 emp 表的行和表 dept 的行。
那对于 Oracle 提供的系统对象 (系统级别数据字典) 要如何访问呢,Oracle 通过内部指针的方式来实现。
如下图显示 PDB 中的数据字典包含指向根中数据字典的指针。在内部,Oracle 提供的对象(如数据字典表定义和 PL / SQL 包)仅在根中表示。
这种架构实现了 CDB 内的两个主要目标:
???? 减少重复
???????? 例如,DBMS_ADVISORCDB 不是将 PL / SQL 包的源代码存储在每个 PDB 中,而是将其存储在 CDB$ROOT 其中,从而节省了磁盘空间。
???? 易于数据库升级
???????? 如果数据字典表的定义存在于每个 PDB 中,并且如果定义在新版本中更改,则每个 PDB 将需要单独升级以捕获更改。在根中存储表定义只有一次消除了这个问题。
4、元数据和数据链接
CDB 使用内部链接机制来分离数据字典信息。
具体来说,Oracle 数据库使用以下自动管理的指针:
元数据链接
??Oracle 数据库仅在 CDB 根目录中存储有关字典对象的元数据。例如,数据字典视图下的 OBJ$ 字典表的列定义 DBA_OBJECTS 仅存在于根目录中。如前一图示,OBJ$ 在每个 PDB 表使用称为内部机构的元数据链接指向存储在根定义的 OBJ$。
?? 该数据对应于元数据链路驻留在其 PDB,而不是在根。例如,如果您在 hrpdb 上的表 mytable 中添加行,然后将行存储在 PDB 数据文件。PDB 和根中的数据字典视图包含不同的行。描述表 mytable 的一个新行被添加到 hrpdb 的 OBJ$,但是不存在于 CDB 根目录中的 OBJ$。因此,查询 DBA_OBJECTS 在 CDB 根和 DBA_OBJECTS 在 hrdpb 显示出不同的结果。
数据链接
?? 注意:
??Oracle 数据库 12 c 版本 1(12.1.0.2)中的数据链接称为对象链接。
?? 在某些情况下,Oracle 数据库将一个对象的数据(不仅仅是元数据)存储在应用程序根目录中。应用程序 PDB 使用称为数据链接的内部机制来引用应用程序根目录中的对象。创建数据链接的应用程序 PDB 还存储数据链接描述。数据链接继承其所涉及的对象的数据类型。
扩展数据链接
?? 扩展数据链路是数据链路和元数据链路的混合。像数据链接一样,扩展数据链接引用应用程序根目录中的对象。然而,扩展数据链路也引用 PDB 中的相应对象。像元数据链接一样,应用程序 PDB 中的对象从应用程序根目录中的相应对象继承元数据。
?? 在应用程序根目录中查询时,扩展的数据链接对象仅从应用程序根目录中获取行。然而,当在应用程序 PDB 中查询时,扩展的数据链接对象从应用程序根和应用程序 PDB 中获取行。
Oracle 数据库自动创建和管理元数据和数据链接 CDB$ROOT。用户无法添加,修改或删除这些链接。
三、数据字典视图
在启用 CDB 之后,数据字典相关视图也有一些变化,主要是增加了 CDB 相关的视图。如下图所示:
关于 Oracle12c 中 CDB 数据库中数据字典架构是怎样的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。