Oracle 12c多租户特性详解:PDB 的出与入 InAndOut

将 Non-PDB 插入 CDB

在12c中,可以将一个非 CDB(也即NON-CDB)插入到 CDB 中,这个过程需要在只读模式下进行。

以下测试首先启动一个常规的 Non-CDB 数据库:

这个数据库中已经预先建立了一个数据库用户,并且有一个测试表:

在12c中,新增加的包 DBMS_PDB 可以用于进行迁移:

在 OPEN 模式下执行 DESCRIBE 操作会出现错误,提示该操作只能在只读模式下进行:

以下启动数据库到只读模式:

执行 DBMS _PDB.DESCRIBE 过程,然后关闭数据库:

这个步骤在 $ORACLE_HOME/dbs 目录下生成了一个 XML 文件,用于描述需要迁移的数据文件,其主要内容如下:

在 CDB 中执行 PLUG,就可以将这个 NON-CDB 插入到 CDB 中,指定 COPY 参数,将文件复制到 CDB 的相应目录下,如果已经复制到特定目录,则可以指定 NOCOPY 选项,就无需再复制一次。这也是对以前版本中传输表空间技术的增强:

以下列表中可以看到,新的 PDB 数据库已经被插入到 CDB 中:

插入成功之后可以连接到数据库进行数据验证:

UNPLUG 数据库

通过 UNPLUG 命令可以拔出一个 PDB:

以上命令生成一个 XML 文件,缺省存储于 $ORACLE_HOME/dbs目录下:

也可以在以上命令中指定目录,这样 XML 文件就可以存储于特定位置:

XML 文件包含了数据文件的描述信息,用于转移数据库。UNPLUG 后 PDB 的状态被变更为MOUNTED,数据库被关闭:

已经 UNPLUG 的数据库不能在当前数据库中直接打开:

通过如下命令在当前数据库中删除一个已经 UNPLUG 的数据库:

如果要集联删除所有的数据文件,则可以将 keep datafiles 指令换成 including datafiles.

CDB 的视图与原理

随着 CDB、PDB 的引入一系列的视图对应引入 ,用于数据库信息的查询和展现。

如在 CDB 层面的用户信息查询,可以通过新的视图 CDB_USERS 进行,通过这个视图可以直观的看到一个用户在哪些容器中存在:

查询临时文件可以通过视图 CDB_TEMP_FILES 进行:

对于常规的 DBA 类视图,在 CDB 中都具有对应的视图。下表列出了与常用数据库视图相对应的一些 CDB 视图:

在数据库的创建脚本中,还可以找到最核心的底层表 container$ 的创建语句,该底层表用于记录各容器的信息,通过该表与其他对象的关联,CDB 的内容可以被隔离和识别出来:

通过数据库创建的核心脚本 - cdcore.sql ,可以找到部分视图的创建方式,如以下脚本记录了 DBA_PDBS 视图的创建方式,正是通过 container$ 和 obj$ 的关联过滤出容器对象的:

对于 PDB 的常规视图创建,另外一个核心脚本是 -catcdbviews.sql,在这个脚本中创建了一个 PackageCDBView,通过这个程序包,根据现有的 DBA 视图批量创建 CDB 所需要的内部视图、同义词并进行授权:

接下来的包体中定义了详细的操作步骤,其中最核心的是根据数据字典视图批量的创建 CDB 所需要的视图:

最终执行转换成类似如下的一个系列 SQL:

了解了这些内部过程,我们就可以对 CDB 的各类视图结构有各大致的了解。

PDB 为云计算而生

在 Oracle 数据库中,PDB 新特性的引入,被称为是为云计算而生的新技术,在云数据库平台上,需要将不同用户的对象、权限等信息彻底分割开来,原有的 Schema 方式并不适合,而 PDB 完全满足隔离与迁移的需要,彻底简化了云数据库平台的管理和维护。

我们先来看一看在 Oracle 11g 版本之上的 Oracle 云数据库平台,下图包含了销售方式,Oracle 公司通过存储空间不同来进行收费区分,销售单位只能为1个 Schema,这是 Oracle Database 11g 版本的特性决定的,如果一个企业能否随意创建 Schema,则数据库会变得异常混乱,而 PDB 模式通过隔离可以彻底解决这一问题。

目前开放的云数据库平台,可以通过申请获得试用的账户。在获得了数据库账户之后,可以通过 Oracle Application Express 进行在线的应用开发和发布,后台的数据对象可以通过 APEX 内嵌的管理功能进行维护:

在 Oracle SQL Developer 工具中,已经集成了“Cloud Connection”模块用于云端的数据库管理:

虽然目前 Oracle 的云数据库看起来还相当简单,但是不论如何,云数据库的时代已经慢慢走来。

原文发布于微信公众号 - 数据和云(OraNews)

原文发表时间:2016-07-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏转载gongluck的CSDN博客

FFmpeg菜鸡互啄#第4篇#音频解码

解码过程 音频解码跟上一篇的视频解码过程是一样的:打开输入文件,查找音频流,打开解码器,循环读帧解码帧,关闭解码器,关闭输入文件。 Code #define _...

3026
来自专栏北京马哥教育

LVM创建实例及相关注释

LVM创建 pv—>vg—->lv—->快照 创建前准备了四块1g硬盘分别为:sdb sdc sdd sde,并分别给四块盘划分了1G的空间,并指定了分区系统类...

26512
来自专栏Python中文社区

基于Sanic的微服务基础架构

介绍 使用python做web开发面临的一个最大的问题就是性能,在解决C10K问题上显的有点吃力。有些异步框架Tornado、Twisted、Gevent 等就...

7536
来自专栏草根专栏

Entity Framework Core 2.0 入门

LearnEf.Console依赖LearnEf.Domains和LearnEf.Data:

70714
来自专栏deepcc

linux中nodejs后台运行工具forever

2718
来自专栏大魏分享(微信公众号:david-share)

怎样一个金箍圈(Pipeline),让至尊宝(Openshift)完成了到孙悟空(DevOps)的蜕变

但说出这句话,和实现Devops全工具链落地之间的差距,与造出原子弹和E=MC2公式的差距,实不逞多让。

812
来自专栏程序猿

SQLmap命令的介绍

SQLmap这个工具的使用。(结尾有彩蛋) URL---> 判断注入的参数, 判断是使用的那种SQL注入 识别出那种数据库 根据用户的选择,读出数据 五种注入模...

2773
来自专栏张善友的专栏

使用asp.net 2.0的CreateUserwizard控件如何向自己的数据表中添加数据

在我们的应用系统中,asp.net 2.0的用户表中的数据往往不能满足我们的需求,还需要增加更多的数据,一种可能的解决方案是使用Profile,更普遍的方案可能...

19410
来自专栏FreeBuf

Fuzz自动化Bypass软WAF姿势

0×00 前言 在我刚接触安全这块时候遇到注入有WAF的网站时候无从下手,寻找各种有关绕过waf的文章,在网页浏览器上使用SQL语句为了绕过WAF变了个法加了些...

48710
来自专栏从零学习云计算

openshift/origin工作记录(1)——S2I镜像定制(基于SVN)

上周的工作内容是迁移微服务管控平台到openshift集群上。定制了基于git的S2I,走通了从gitlab拉取代码、打包、部署等一系列流程,成功迁移并向部门...

4741

扫码关注云+社区