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

Wesley13
• 阅读 313

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源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
Jacquelyn38 Jacquelyn38
1年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。 1、使用解构获取json数据let jsonData   id: 1, status: "OK", data: ['a', 'b'] ; let  id, status, data: number   jsonData; console.log(id, status, number )
blmius blmius
1年前
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:SQL Mode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。 全局s
Stella981 Stella981
1年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置 1、virsh edit centos7 找到“memory”和“vcpu”标签,将 <name>centos7</name> <uuid>2220a6d1-a36a-4fbb-8523-e078b3dfe795</uuid>
Wesley13 Wesley13
1年前
Oracle 12c 及以上版本补丁更新说明及下载方法
![](https://oscimg.oschina.net/oscnet/79a637bc6387dc87fd960f8d0f4fe67d8c6.gif) 作者 | JiekeXu 来源 | JiekeXu之路(ID: JiekeXu\_IT) 转载请联系授权 | (微信ID:xxq1426321293) > 大家好,我是 JiekeXu,
Wesley13 Wesley13
1年前
MySQL查询按照指定规则排序
1.按照指定(单个)字段排序 select * from table_name order id desc; 2.按照指定(多个)字段排序 select * from table_name order id desc,status desc; 3.按照指定字段和规则排序 selec
Wesley13 Wesley13
1年前
Oracle 11g SYSAUX 和 SYSTEM 表空间回收相关知识点
![](https://oscimg.oschina.net/oscnet/7154fd6b-2058-4816-9544-5a2a9697b616.gif) 作者 | JiekeXu 来源 | JiekeXu之路(ID: JiekeXu\_IT) 转载请联系授权 | (微信ID:xxq1426321293) > 大家好,我是 JiekeXu
Wesley13 Wesley13
1年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
#### 背景描述 # Time: 2019-01-24T00:08:14.705724+08:00 # User@Host: **[**] @ [**] Id: ** # Schema: sentrymeta Last_errno: 0 Killed: 0 # Query_time: 0.315758 Lock_
Wesley13 Wesley13
1年前
Oracle 11g 临时表空间管理
![](https://oscimg.oschina.net/oscnet/0b250837-3223-4ac4-9fae-eae768ad90f5.gif) 作者 | JiekeXu 来源 | JiekeXu之路(ID: JiekeXu\_IT) 转载请联系授权 | (微信ID:xxq1426321293) > 大家好,我是 JiekeXu
helloworld_34035044 helloworld_34035044
4个月前
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。 uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid() 或 uuid(sep)参数说明:sep 布尔值,生成的uuid中是否包含分隔符'',缺省为
3A网络 3A网络
2个月前
理解 virt、res、shr 之间的关系(linux 系统篇)
# 理解 virt、res、shr 之间的关系(linux 系统篇) **前言** 想必在 linux 上写过程序的同学都有分析进程占用多少内存的经历,或者被问到这样的问题 —— 你的程序在运行时占用了多少内存(物理内存)? 通常我们可以通过 t
3A网络 3A网络
2个月前
开发一个不需要重写成 Hive QL 的大数据 SQL 引擎
# 开发一个不需要重写成 Hive QL 的大数据 SQL 引擎 学习大数据技术的核心原理,掌握一些高效的思考和思维方式,构建自己的技术知识体系。明白了原理,有时甚至不需要学习,顺着原理就可以推导出各种实现细节。 各种知识表象看杂乱无章,若只是学习