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

Wesley13
• 阅读 533

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

作者 | 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,不在支持非容器数据库了。

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

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

SYS@JiekeXu>SELECT NAME, CDB, CON_ID FROM V$DATABASE;

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

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

每个 CDB 包含如下内容:

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

  1. 只有一个系统容器:系统容器包括 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 经典的体系结构图看一下多租户容器数据库体系结构:

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

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

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

实例(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 建成是便会生成,而且不会随着迁移而改变。

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

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

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

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

数据字典视图:在原来的数据字典视图基础上,最外层又添加了一个 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%';

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

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

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

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

参考链接:

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

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

Oracle 软件包及补丁包免费下载及简单说明

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

Oracle 12C 最新补丁下载与安装操作指北

关于 Oracle ACFS 相关知识的简单学习

Oracle 12CR2 安装配置与基础学习

Windows 环境下安装 Oracle 19C

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

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

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

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

点亮在看,你最好看!

本文分享自微信公众号 - JiekeXu之路(JiekeXu_IT)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
Oracle 19c 之 RPM 包安装初体验(一)
!(https://oscimg.oschina.net/oscnet/73fd8642b7364f1de2863b0ceb5f35321b0.gif)作者|JiekeXu来源| JiekeXu之路(ID:JiekeXu\_IT)转载请联系授权| (微信ID:xxq1426321293)大家好,我是JiekeXu,
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
Oracle 11g SYSAUX 和 SYSTEM 表空间回收相关知识点
!(https://oscimg.oschina.net/oscnet/7154fd6b2058481695445a2a9697b616.gif)作者|JiekeXu来源| JiekeXu之路(ID:JiekeXu\_IT)转载请联系授权| (微信ID:xxq1426321293)大家好,我是JiekeXu
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Wesley13 Wesley13
2年前
Oracle 11g 临时表空间管理
!(https://oscimg.oschina.net/oscnet/0b25083732234ac49faeeae768ad90f5.gif)作者|JiekeXu来源| JiekeXu之路(ID:JiekeXu\_IT)转载请联系授权| (微信ID:xxq1426321293)大家好,我是JiekeXu
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这