前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Oracle 19c 之 RPM 包安装初体验 CDB(二)

Oracle 19c 之 RPM 包安装初体验 CDB(二)

作者头像
JiekeXu之路
发布2020-06-28 16:19:23
8650
发布2020-06-28 16:19:23
举报
文章被收录于专栏:JiekeXu之路

作者 | JiekeXu

来源 | JiekeXu之路(ID: JiekeXu_IT)

转载请联系授权 | (微信ID:xxq1426321293)

大家好,我是 JiekeXu,很高兴又和大家见面了,今天分享下 Oracle 19c 初体验之多租户是个啥。本文首发于微信公众号【JiekeXu之路】,欢迎点击上方蓝字关注我吧!

容器(container)是多租户体系结构中的数据或元数据的逻辑集合。CDB(containerdatabase)容器数据库在图形化创建实例时若勾选了“创建为容器数据库(C)”则会出现容器数据库称之为CDB,否则称之为 Non-CDB,如之前的 11g 数据库就称之为非容器数据库 Non-CDB,那么 PDB(Pluggable Database )在 CDB 下被称作可插拔数据库。19c 还可以选择创建为非容器数据库 Non-CDB,但 20c 以后则强制使用 CDB,不在支持非容器数据库了。

当然也可以使用 SQLplus连接到数据库查看是否为容器数据库,当 V$DATABASE.CDB 列为 YES 也可以说明为容器数据库,也可以使用 show pdbs 查看,如果出现多行则说明为容器数据库。

代码语言:javascript
复制
SYS@JiekeXu>SELECT NAME, CDB, CON_ID FROM V$DATABASE;

NAME            CDB           CON_ID
------------------------ ----------
JIEKEXU         YES                0
SYS@JiekeXu> sho pdbs

    CON_ID CON_NAME                       OPEN MODE RESTRICTED
---------------------------------------- ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 JIEKEXUPDB                     READ WRITE NO
         4 JIEKEXUPDB1                    READ WRITE NO

从Oracle 19c 开始,Oracle 的许可也发生了改变,用户可以创建 3 个 PDB 而不需要购物多租户的许可,3 个以上才需要购买多租户的许可,所以鼓励大家升级到 19c ,免费而且长期支持这里就不在多说了,下图中给出关于 CDB 容器数据库的官方结构图。

每个 CDB 包含如下内容:

1)有一个 CDB$ROOT (也简称为根容器):CDB$ROOT 是所有 PDB 所属的模式、模式对象和非模式对象的集合。根存储 oracle 提供的元数据和普通用户。元数据的一个例子是 oracle 提供的 PL/SQL 包的源代码。公共用户是每个容器中都知道的数据库用户。根容器命名为CDB$ROOT.

2) 只有一个系统容器:系统容器包括 CDB$ROOT 和 CDB 中的所有 PDB。因此,系统容器是CDB 本身的逻辑容器。

3)零个或多个应用程序容器:应用程序容器仅由一个 application root 和插入到这个根的 PDB 组成。系统容器包含 CDB 根目录和CDB中的所有 PDB,而应用程序容器只包含插入到应用程序根目录中的PDB。application root 属于 CDB 根,不属于其他容器。

4)零个或多个用户创建的 PDB:PDB 包含特定功能集所需的数据和代码。例如,PDB 可以支持特定的应用程序,例如人力资源或销售应用程序。在创建 CDB 时不存在 PDB。您可以根据业务需求添加 PDB 。一个 PDB 确切地属于零个或一个应用程序容器。如果一个 PDB 属于一个应用程序容器,那么它就是一个应用程序 PDB。例如,cust1_pdb 和 cust2_pdb 应用程序 PDB 可能属于 saas_sales_ac 应用程序容器,在这种情况下,它们不属于任何其他应用程序容器。application seed 应用程序种子是一个可选的应用程序 PDB,充当用户创建的 PDB 模板,使您能够快速创建新的应用程序 PDB。

5)一个种子 PDB

种子 PDB 是系统提供的模板,CDB 可以使用它创建新的 PDB。种子 PDB 被命名为 PDB$SEED。不能在 PDB$SEED 中添加或修改对象,PDB$SEED 默认情况下是只读模式的 PDB。

下面我们类比 11g 经典的体系结构图看一下多租户容器数据库体系结构:

数据库服务器 = 实例 + 多租户容器数据库

实例(instance) = 内存 + 后台进程

数据库(database) = 数据文件 + 控制文件+ 重做日志文件

如上图所示,在多租户架构下,单个 DB 共享后台进程,内存,以及重做日志文件,控制文件以及位于根容器的元数据,undo 表空间在 12.2 以后的版本中实现本地管理,位于各自的 PDB 中。那么,对于像参数文件,密码文件,告警日志等均有一份,因为实例只有一个,PDB位于数据库中可以是多个,12.2 以后的版本中可以有 4096 个。

在多租户架构中,每个 PDB 使用很少的内存,控制文件和日志文件公用的,那么只有数据文件是位于 PDB 自己特定的目录下。如下图,在新装的 19.6 的 RAC 结构下,只有一个 PDB,通过 v$containers 视图查看到每个 PDB 的名字以及单独的 DBID,还有 CON_ID、CON_UID、GUID。多租户架构西安通过 CON_ID 来识别 PDB,根容器为 1,种子 PDB 为 2,其他PDB 依次往后排,那么 CON_UID是干嘛的呢?CON_ID 不能够唯一标识一个 PDB,当 PDB 迁移,移动时是不会改变的,故需要 CON_UID 来唯一标识一个 PDB。另外这里的 GUID 是一组 32 字节的 hash 值,PDB 建成是便会生成,而且不会随着迁移而改变。

这里通过查询 cdb_data_files 视图查询数据文件所在位置,如下图,发现出现了一串字母数字组成的目录结构,这个是由于 Oracle 使用 OMF 管理,使用 GUID 来作为目录结构唯一标识一个 PDB 。而当使用 dba_data_files 视图来查看数据文件时只查看到当前容器即CDB$ROOT 中的数据文件,使用 cdb_data_files 时才看到了所有的数据文件。为啥呢?

数据字典视图:在原来的数据字典视图基础上,最外层又添加了一个 CDB_XXX 类的视图,即 CDB_XXX > DBA_XXX > ALL_XXX > USERS_XXX。CDB_XXX 可以查看数据库中所有的对象,而 DBA_XXX 可查看 PDB 内的所有对象。

select view_name from dba_views where view_name like 'CDB%';

select table_name from dict where table_name like 'DBA%';

最后说一下公共用户和本地用户,顾名思义在 CDB中的用户便可以称为公共用户,以 C## 或者 c## 开头,所有PDB 均可查看到;本地用户只能是单独 PDB 可查看。

好了,今天就到先这里了,那么,对于容器数据库的切换,连接以及通过多种方式创建 PDB 我们后面再说吧,小伙伴们再见了。写作不易,此文如果对你有帮助,请支持“在看”与转发,您的支持便是我不断写作的最大的动力,让我们一起努力做更好的自己!

参考链接:

https://docs.oracle.com/en/database/oracle/oracle-database/19/multi/introduction-to-the-multitenant-architecture.html#GUID-FC2EB562-ED31-49EF-8707-C766B6FE66B8

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JiekeXu之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档