Oracle12c之 CDB数据库中数据字典架构

简介:

数据字典就是元数据的集合,比如创建的表,列,约束,触发器等等这些都是元数据,需要保存到数据库中。除此之外,Oracle自身的一些数据库对象,如目录,PL/SQL代码等等这些都是元数据,都需要存放在数据字典中。随着12c 容器数据的普及,Oracle数据字典发生了哪些变化呢,下文即是具体描述。

一、数据字典及其形成

1、数据字典

数据字典是元数据的集合,从逻辑上和物理上描述了数据库及内容,存储于SYSTEM与SYSAUX表空间内的若干段。

SYS用户拥有所有的数据字典表,数据字典基本一般以col,tab$等,这些数据字典存放在system表空间中。

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数据字典

1、基于非CDB数据库数据字典变化演示

SQL> SELECT name,
  2         DECODE (cdb,
  3                 'YES', 'Multitenant Option enabled', 4 'Regular 12c Database: ') 5 "Multitenant Option", 6 open_mode, 7 con_id 8 FROM v$database; --如查询结果所示,为非CDB数据库 NAME Multitenant Option OPEN_MODE CON_ID --------- -------------------------- -------------------- ---------- NOCDB Regular 12c Database: READ WRITE 0 --检查当前数据库数据字典是否存在T1对象 SQL> select name,owner#,ctime from obj$ where name='T1'; no rows selected --当前数据库总对象数 SQL> select count(*) from obj$; COUNT(*) ---------- 21703 --由于当前的cdb为手工创建,因此,创建一个新用户 SQL> create user leshami identified by pass 2 default tablespace users; --授权 SQL> grant dba,resource,connect to leshami; SQL> conn leshami/pass SQL> create table t1(id number,ename varchar2(20)); SQL> conn / as sysdba --可以查询到对象已经添加到数据字典 SQL> select name,owner#,ctime from obj$ where name='T1'; NAME OWNER# CTIME ---------- ---------- --------- T1 72 01-JUN-17 --相应的总数目也增加了1个 SQL> select count(*) from obj$; COUNT(*) ---------- 21704

 

2、基于CDB数据库数据字典变化演示

SQL> SELECT name,
  2         DECODE (cdb,
  3                 'YES', 'Multitenant Option enabled',
  4                 'Regular 12c Database: ')
  5            "Multitenant Option",
 6 open_mode,  7 con_id  8 FROM v$database; --此查询结果如下,即连接到了CDB数据库 NAME Multitenant Option OPEN_MODE CON_ID --------- -------------------------- -------------------- ---------- CDB1 Multitenant Option enabled READ WRITE 0 --当前CDB数据库下的容器 SQL> select name,con_id,open_mode from v$containers; NAME CON_ID OPEN_MODE ------------------- ---------- ---------- CDB$ROOT 1 READ WRITE PDB$SEED 2 READ ONLY CDB1PDB1 3 MOUNTED --在CDB容器数据字典中查看是否存在表T1,如下结果显示为无 SQL> select name,owner#,ctime from obj$ where name='T1'; no rows selected --统计当前CDB容器数据字典中obj$的总数目 SQL> select count(*) from obj$;  COUNT(*) ----------  72635 --打开pdb数据库cdb1pdb1 SQL> alter pluggable database cdb1pdb1 open; Pluggable database altered. --切换到pdb容器数据库cdb1pdb1 SQL> alter session set container=CDB1PDB1; --在PDB中查看是否存在表T1 SQL> select name,owner#,ctime from obj$ where name='T1'; no rows selected --统计PDB容器数据字典中obj$的总数目 SQL> select count(*) from obj$;  COUNT(*) ----------  72648 --开启另外一个session,使用hr账号登陆 $ sqlplus hr/hr@cdb1pdb1 --创建表对象 SQL> create table t1(id number,ename varchar2(20)); --切换到cdb数据库 SQL> conn / as sysdba SQL> select 'Leshami' Author,'http://blog.csdn.net/leshami' Blog,  2 '645746311' QQ from dual; AUTHOR BLOG QQ ------- ---------------------------- --------- Leshami http://blog.csdn.net/leshami 645746311 SQL> select name,owner#,ctime from obj$ where name='T1'; no rows selected SQL> select count(*) from obj$; --数据库对象在cdb中不存在,总数也没有增加  COUNT(*) ----------  72635 --切换到pdb数据库 SQL> alter session set container=CDB1PDB1; SQL> select name,owner#,ctime from obj$ where name='T1'; --数据字典中存在已创建的对象 NAME OWNER# CTIME --------------- ---------- --------- T1 107 01-JUN-17 SQL> select count(*) from obj$; --数据字典总数目增加1条  COUNT(*) ----------  72649

 

四、数据字典视图

在启用CDB之后,数据字典相关视图也有一些变化,主要是增加了CDB相关的视图。如下图所示: 
这里写图片描述

转:http://blog.csdn.net/leshami/article/details/72833564



本文转自 张冲andy 博客园博客,原文链接:  http://www.cnblogs.com/andy6/p/7527786.html ,如需转载请自行联系原作者

相关文章
|
1月前
|
存储 人工智能 Cloud Native
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
在9月20日2024云栖大会上,阿里云智能集团副总裁,数据库产品事业部负责人,ACM、CCF、IEEE会士(Fellow)李飞飞发表《从数据到智能:Data+AI驱动的云原生数据库》主题演讲。他表示,数据是生成式AI的核心资产,大模型时代的数据管理系统需具备多模处理和实时分析能力。阿里云瑶池将数据+AI全面融合,构建一站式多模数据管理平台,以数据驱动决策与创新,为用户提供像“搭积木”一样易用、好用、高可用的使用体验。
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
|
24天前
|
存储 监控 数据处理
flink 向doris 数据库写入数据时出现背压如何排查?
本文介绍了如何确定和解决Flink任务向Doris数据库写入数据时遇到的背压问题。首先通过Flink Web UI和性能指标监控识别背压,然后从Doris数据库性能、网络连接稳定性、Flink任务数据处理逻辑及资源配置等方面排查原因,并通过分析相关日志进一步定位问题。
155 61
|
1月前
|
存储 SQL Apache
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
Apache Doris 是一个基于 MPP 架构的高性能实时分析数据库,以其极高的速度和易用性著称。它支持高并发点查询和复杂分析场景,适用于报表分析、即席查询、数据仓库和数据湖查询加速等。最新发布的 2.0.2 版本在性能、稳定性和多租户支持方面有显著提升。社区活跃,已广泛应用于电商、广告、用户行为分析等领域。
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
|
1月前
|
缓存 关系型数据库 MySQL
高并发架构系列:数据库主从同步的 3 种方案
本文详解高并发场景下数据库主从同步的三种解决方案:数据主从同步、数据库半同步复制、数据库中间件同步和缓存记录写key同步,旨在帮助解决数据一致性问题。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
高并发架构系列:数据库主从同步的 3 种方案
|
1月前
|
SQL 关系型数据库 数据库
国产数据实战之docker部署MyWebSQL数据库管理工具
【10月更文挑战第23天】国产数据实战之docker部署MyWebSQL数据库管理工具
131 4
国产数据实战之docker部署MyWebSQL数据库管理工具
|
22天前
|
关系型数据库 MySQL 数据库
GBase 数据库如何像MYSQL一样存放多行数据
GBase 数据库如何像MYSQL一样存放多行数据
|
1月前
|
存储 NoSQL 分布式数据库
微服务架构下的数据库设计与优化策略####
本文深入探讨了在微服务架构下,如何进行高效的数据库设计与优化,以确保系统的可扩展性、低延迟与高并发处理能力。不同于传统单一数据库模式,微服务架构要求更细粒度的服务划分,这对数据库设计提出了新的挑战。本文将从数据库分片、复制、事务管理及性能调优等方面阐述最佳实践,旨在为开发者提供一套系统性的解决方案框架。 ####
|
1月前
|
存储 Oracle NoSQL
【赵渝强老师】Oracle的体系架构
Oracle数据库的核心在于其体系架构,主要包括数据库与实例、存储结构、进程结构和内存结构。数据库由物理文件组成,实例则是内存和进程的组合。存储结构分为逻辑和物理两部分,进程结构涉及多个后台进程如SMON、PMON、DBWn等,内存结构则包含SGA和PGA。掌握这些知识有助于更好地管理和优化Oracle数据库。
|
1月前
|
消息中间件 数据库 云计算
微服务架构下的数据库事务管理策略####
在微服务架构中,传统的单体应用被拆分为多个独立的服务单元,每个服务维护自己的数据库实例。这种设计提高了系统的可扩展性和灵活性,但同时也带来了分布式环境下事务管理的复杂性。本文探讨了微服务架构下数据库事务的挑战,并深入分析了几种主流的事务管理策略,包括Saga模式、两阶段提交(2PC)以及基于消息的最终一致性方案,旨在为开发者提供一套适应不同业务场景的事务处理框架。 ####
|
1月前
|
关系型数据库 分布式数据库 数据库
云栖大会|从数据到决策:AI时代数据库如何实现高效数据管理?
在2024云栖大会「海量数据的高效存储与管理」专场,阿里云瑶池讲师团携手AMD、FunPlus、太美医疗科技、中石化、平安科技以及小赢科技、迅雷集团的资深技术专家深入分享了阿里云在OLTP方向的最新技术进展和行业最佳实践。

推荐镜像

更多