Oracle 12c多租户特性详解:PDB 的创建、克隆与维护

简介:

640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy
(题图来自Oracle VP , Sally Piao的摄影佳作,感谢摄影师授权)

编辑手记:这一节我们将介绍多租户中PDB的创建、克隆与维护,以及种子数据库的内部保护,这篇文章来自<深入解析Oracle>一书的摘录。


PDB 的创建和访问

在使用 dbca 建库时,创建数据库之前,可以保存一下创建脚本,分析其具体执行过程。以自定义方式创建名称为julia的数据库为例,其主要脚本 julia.sql 中包含如下脚本调用:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


在第一个脚本 CreateDB.sql 中的末尾部分包含了 Pluggable Database 的变化,这段命令启用了插接式数据库,并且初始化了种子 PDB,存储目录位于数据库目录下的 pdbseed 子目录。


注意以下语句,种子数据库的文件都来自于当前创建的 CDB 数据库,这些文件被复制到 PDBSEED 目录下,这也是创建 PDB 的第一种方式:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


当然我们也可以通过模板方式创建 PDBSEED,此时文件将来自于软件包中的 pdbseed.tar.gz 压缩包。相应的,创建脚本也会有所不同,在模板方式下增加了一个 plugDatabase.sql 脚本,包含以下主要内容:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


脚本中的 null 目录最终会被替换为实际目录,其执行过程就是解压缩拷贝文件。

 

在使用自定义方式创建数据库时,观察脚本的执行过程,可以看到种子数据库的 SYSTEM 和 SYSAUX 表空间初始大小完全一致:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


以下查询显示当前的 PDB$SEED 种子数据库以只读方式打开:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


接下来以这个种子数据库为模版,创建第一个 PDB,首先设置一个创建目录:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


然后通过如下命令创建 PDB:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


查询一下,显示当前新创建的数据库状态为 Mount:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


使用如下语句打开 PDB:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


当打开 PDB 之后,在日志中可以看到如下一行:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


数据库在 PDB 打开后,自动增加一个服务名,注册到监听器,然后就可以接受外部的连接请求了。

 

在测试环境中,配置了以下本地网络服务名:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


接下来就可以通过如下方式连接到 PDB 数据库,可以查看归属于 PDB 的数据文件:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


也可以查询数据库中的用户,可以看到 EYGLE 用户已经被建立:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


接下来就可以通过 EYGLE 这个 PDB 数据库用户连接访问这个数据库,通过如下方式连接:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


也可以通过 SYS 用户连接 PDB,如下使用 EZCONNECT 方式连接到数据库,查询 v$datafile 视图,可以看到当前 PDB 有三个数据文件,其中 UNDO 表空间共享的全局数据文件,其余两个为 SYSTEM 和 SYSAUX 表空间文件:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


查询 v$tempfile 视图,可以看到 PDB 的独立临时文件:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


控制文件属于共享范畴,在 PDB 级别查询可见:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


在 DBA 等高级权限的用户下,可以通过 ALTER 命令进行会话级别的容器切换,访问不同容器下的对象:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


注意,如果 PDB 的服务名没有自动添加,可以通过手工配置实现:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


在完成测试之后,通过以下命令可以删除一个 PDB:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


由现有 PDB 创建新的 PDB

 

除了通过种子 PDB 创建新的空 PDB 之外,还可以通过一个现有的用户PDB克隆创建新的 PDB 数据库。以下详细记录一个 PDB 的创建与访问过程。

 

创建 PDB 的源需要置于只读模式:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


随后可以打开这个新创建的 PDB:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


检查数据库的告警日志文件,可以看到,新创建的数据库,其服务名已经被自动添加到数据库的服务名配置中:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


检查数据库监听器,可以看到 PDB 都已经被监听器监听服务:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


在12c 的建库过程中,引入了 Perl 脚本的调用方式,以下是在创建过程中跟踪到的脚本调用,在数据库创建的日志中也可以观察这种方式:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


这个过程完成之后,会在告警日志文件中记录如下信息:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


在 tnsnames.ora 文件中,增加相应的配置,就可以通过服务名连接数据库了,以下是两个 PDB 的本地网络服务名配置:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


对于 PDB 的一些更改操作不能在 CDB 级别进行,CDB 级操作会提示不能在 PDB 之外执行,如以下更改 GLOBAL_NAME 的操作:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


连接到 PDB 以 RESTRICTED 模式可以进行这些修改:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


PDB 的使用与维护


在 PDB 创建完成之后,可以通过 SYSDBA 连接到 PDB,执行维护操作,这和常规的 Non-CDB 数据库没有差别,在 PDB 中,只要具备足够的权限,可以创建表空间、数据文件、用户和数据对象等。


以下通过 SYS 用户连接到一个名为 ENMO 的 PDB 数据库:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

在 PDB 中执行用户及表空间创建命令:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


执行用户管理,分配空间、更改默认表空间等:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


通过指定用户连接,可以创建数据对象,以下测试以 SCOTT 用户脚本为例创建:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


查看这些信息:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


这些信息在 CDB 级别的数据库中是不可见的:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


跨数据库的数据访问,需要通过 DB Link 进行,如以下测试范例:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


种子数据库的隐藏和保护

 

在数据库创建的最后过程,可以在告警日志中观察到,数据库最后调整了文件号的顺序,如下日志显示,原有2号文件和4号文件被删除,并增加了7号和8号文件:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

检查底层 file$ 字典表,确实可以发现文件号2和文件号4 已经被删除:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


而通过 v$datafile 视图可以查询到来自控制文件的信息,2号和4号文件是 PDBSEED 中的两个文件:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


从数据字典中隐藏了文件号,就彻底屏蔽了对于种子数据库的操作,该 PDB 就只能以只读的方式打开。

 

在日志中可以看到,数据库创建完成之前,pdb$seed 可以被打开和关闭,但是创建完成,删除文件号之后,则被保护了起来:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


在数据库启动过程中,如尝试 Offline 的操作,就会收到2号文件不存在的提示(虽然在 v$datafile 中可以看到这个文件):


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


CDB 与 PDB 的起停管理

 

首先 PDB 的访问依赖于 CDB,必须启动 CDB 之后,才能够对 PDB 进行操作。当 CDB 打开访问时,PDB 处于 Mount 状态,需要进一步的操作打开 PDB。下图描述了在 PDB 的模式下,数据库的启动过程和步骤:

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

接下来通过测试来验证一下这个过程。以下首先启动 CDB 到 NOMOUNT 状态,可以看到 v$pdbs 视图是不能访问任何 PDB 信息的:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


当 MOUNT 数据库之后,PDB 随之被 MOUNT,以下查询显示当前数据库中包含三个 PDB,一个种子库,两个用户库:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


在 CDB 打开之前,PDB 不能够执行 Open 操作:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


当 CDB 打开之后,可以看到种子库被以只读方式打开,其他用户 PDB 数据库未自动打开:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


可以通过独立的 PDB 命令,执行数据库 OPEN 操作,可以通过 ALL 关键字同时打开或关闭所有 PDB:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


如果需要在数据库启动之后,自动打开全部的 PDB 数据库,可以创建一个触发器,用于在数据库开启后自动执行数据库读写打开:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


文章转自数据和云公众号,原文链接
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
6月前
|
Oracle 关系型数据库 数据库
百度搜索:蓝易云【docker部署并配置oracle12c的cdb和pdb教程!】
以上是使用Docker部署和配置Oracle 12c CDB和PDB的简要教程。请注意,这只是一个概述,并且可能需要根据你的实际情况进行适当的调整和配置。建议参考Oracle官方文档和相关资源,以获得更详细和全面的指导。
104 2
|
7天前
|
存储 NoSQL Oracle
Oracle 12c的内存列存储:数据的“闪电侠”
【4月更文挑战第19天】Oracle 12c的内存列存储以超高速度革新数据处理,结合列存储与内存技术,实现快速查询与压缩。它支持向量化查询和并行处理,提升效率,但需合理配置以平衡系统资源。作为数据管理员,应善用此功能,适应业务需求和技术发展。
|
7天前
|
存储 Oracle 关系型数据库
Oracle 12c的多重索引:数据的“多维导航仪”
【4月更文挑战第19天】Oracle 12c的多重索引提升数据查询效率,如同多维导航仪。在同一表上创建针对不同列的多个索引,加速检索过程。虽然过多索引会增加存储和维护成本,但合理选择和使用索引策略,结合位图、函数索引等高级特性,能优化查询,应对复杂场景。数据管理员应善用这些工具,根据需求进行索引管理,支持企业数据分析。
|
7天前
|
存储 Oracle 数据管理
Oracle 12c的自动数据优化(ADO)与热图:数据管理的“瘦身”与“透视”艺术
【4月更文挑战第19天】Oracle 12c的ADO和热图技术革新数据管理。ADO智能清理无用数据,优化存储,提升查询速度,实现数据&quot;瘦身&quot;;热图则以直观的视觉表示展示数据分布和状态,助力识别性能瓶颈,犹如数据的&quot;透视&quot;工具。这两项技术结合,强化数据管理,为企业业务发展保驾护航。
|
7天前
|
Oracle 安全 数据管理
Oracle 12c多租户架构:数据管理的“摩天大楼”
【4月更文挑战第19天】Oracle 12c的多租户架构允许多个独立数据库环境在同一实例中共享资源,提高效率,降低成本。该架构保证了数据隔离和安全性,同时提供灵活性和可扩展性,简化管理任务。通过理解其原理和管理方法,我们可以充分利用这一架构,为企业数据管理和业务发展提供强大支持。
|
1月前
|
Oracle 关系型数据库 数据库
|
7月前
|
Oracle 关系型数据库
Oracle 11g和12c的主要区别
Oracle 11g和12c的主要区别
|
15天前
|
SQL Oracle 关系型数据库
【Oracle】玩转Oracle数据库(一):装上去,飞起来!
【Oracle】玩转Oracle数据库(一):装上去,飞起来!
56 7
|
1月前
|
Oracle 关系型数据库 数据库
|
1月前
|
Oracle 关系型数据库 数据库
Oracle数据库基本概念理解(3)
Oracle数据库基本概念理解(3)
18 2

推荐镜像

更多