[转]Oracle 12c多租户特性详解:PDB 的创建、克隆与维护
转自:http://chuansong.me/n/443660447865
PDB 的创建和访问
在使用 dbca 建库时,创建数据库之前,可以保存一下创建脚本,分析其具体执行过程。以自定义方式创建名称为julia的数据库为例,其主要脚本 julia.sql 中包含如下脚本调用:
在第一个脚本 CreateDB.sql 中的末尾部分包含了 Pluggable Database 的变化,这段命令启用了插接式数据库,并且初始化了种子 PDB,存储目录位于数据库目录下的 pdbseed 子目录。
注意以下语句,种子数据库的文件都来自于当前创建的 CDB 数据库,这些文件被复制到 PDBSEED 目录下,这也是创建 PDB 的第一种方式:
当然我们也可以通过模板方式创建 PDBSEED,此时文件将来自于软件包中的 pdbseed.tar.gz 压缩包。相应的,创建脚本也会有所不同,在模板方式下增加了一个 plugDatabase.sql 脚本,包含以下主要内容:
脚本中的 null 目录最终会被替换为实际目录,其执行过程就是解压缩拷贝文件。
在使用自定义方式创建数据库时,观察脚本的执行过程,可以看到种子数据库的 SYSTEM 和 SYSAUX 表空间初始大小完全一致:
以下查询显示当前的 PDB$SEED 种子数据库以只读方式打开:
接下来以这个种子数据库为模版,创建第一个 PDB,首先设置一个创建目录:
然后通过如下命令创建 PDB:
查询一下,显示当前新创建的数据库状态为 Mount:
使用如下语句打开 PDB:
当打开 PDB 之后,在日志中可以看到如下一行:
数据库在 PDB 打开后,自动增加一个服务名,注册到监听器,然后就可以接受外部的连接请求了。
在测试环境中,配置了以下本地网络服务名:
接下来就可以通过如下方式连接到 PDB 数据库,可以查看归属于 PDB 的数据文件:
也可以查询数据库中的用户,可以看到 EYGLE 用户已经被建立:
接下来就可以通过 EYGLE 这个 PDB 数据库用户连接访问这个数据库,通过如下方式连接:
也可以通过 SYS 用户连接 PDB,如下使用 EZCONNECT 方式连接到数据库,查询 v$datafile 视图,可以看到当前 PDB 有三个数据文件,其中 UNDO 表空间共享的全局数据文件,其余两个为 SYSTEM 和 SYSAUX 表空间文件:
查询 v$tempfile 视图,可以看到 PDB 的独立临时文件:
控制文件属于共享范畴,在 PDB 级别查询可见:
在 DBA 等高级权限的用户下,可以通过 ALTER 命令进行会话级别的容器切换,访问不同容器下的对象:
注意,如果 PDB 的服务名没有自动添加,可以通过手工配置实现:
在完成测试之后,通过以下命令可以删除一个 PDB:
由现有 PDB 创建新的 PDB
除了通过种子 PDB 创建新的空 PDB 之外,还可以通过一个现有的用户PDB克隆创建新的 PDB 数据库。以下详细记录一个 PDB 的创建与访问过程。
创建 PDB 的源需要置于只读模式:
随后可以打开这个新创建的 PDB:
检查数据库的告警日志文件,可以看到,新创建的数据库,其服务名已经被自动添加到数据库的服务名配置中:
检查数据库监听器,可以看到 PDB 都已经被监听器监听服务:
在12c 的建库过程中,引入了 Perl 脚本的调用方式,以下是在创建过程中跟踪到的脚本调用,在数据库创建的日志中也可以观察这种方式:
这个过程完成之后,会在告警日志文件中记录如下信息:
在 tnsnames.ora 文件中,增加相应的配置,就可以通过服务名连接数据库了,以下是两个 PDB 的本地网络服务名配置:
对于 PDB 的一些更改操作不能在 CDB 级别进行,CDB 级操作会提示不能在 PDB 之外执行,如以下更改 GLOBAL_NAME 的操作:
连接到 PDB 以 RESTRICTED 模式可以进行这些修改:
PDB 的使用与维护
在 PDB 创建完成之后,可以通过 SYSDBA 连接到 PDB,执行维护操作,这和常规的 Non-CDB 数据库没有差别,在 PDB 中,只要具备足够的权限,可以创建表空间、数据文件、用户和数据对象等。
以下通过 SYS 用户连接到一个名为 ENMO 的 PDB 数据库:
在 PDB 中执行用户及表空间创建命令:
执行用户管理,分配空间、更改默认表空间等:
通过指定用户连接,可以创建数据对象,以下测试以 SCOTT 用户脚本为例创建:
查看这些信息:
这些信息在 CDB 级别的数据库中是不可见的:
跨数据库的数据访问,需要通过 DB Link 进行,如以下测试范例:
种子数据库的隐藏和保护
在数据库创建的最后过程,可以在告警日志中观察到,数据库最后调整了文件号的顺序,如下日志显示,原有2号文件和4号文件被删除,并增加了7号和8号文件:
检查底层 file$ 字典表,确实可以发现文件号2和文件号4 已经被删除:
而通过 v$datafile 视图可以查询到来自控制文件的信息,2号和4号文件是 PDBSEED 中的两个文件:
从数据字典中隐藏了文件号,就彻底屏蔽了对于种子数据库的操作,该 PDB 就只能以只读的方式打开。
在日志中可以看到,数据库创建完成之前,pdb$seed 可以被打开和关闭,但是创建完成,删除文件号之后,则被保护了起来:
在数据库启动过程中,如尝试 Offline 的操作,就会收到2号文件不存在的提示(虽然在 v$datafile 中可以看到这个文件):
CDB 与 PDB 的起停管理
首先 PDB 的访问依赖于 CDB,必须启动 CDB 之后,才能够对 PDB 进行操作。当 CDB 打开访问时,PDB 处于 Mount 状态,需要进一步的操作打开 PDB。下图描述了在 PDB 的模式下,数据库的启动过程和步骤:
接下来通过测试来验证一下这个过程。以下首先启动 CDB 到 NOMOUNT 状态,可以看到 v$pdbs 视图是不能访问任何 PDB 信息的:
当 MOUNT 数据库之后,PDB 随之被 MOUNT,以下查询显示当前数据库中包含三个 PDB,一个种子库,两个用户库:
在 CDB 打开之前,PDB 不能够执行 Open 操作:
当 CDB 打开之后,可以看到种子库被以只读方式打开,其他用户 PDB 数据库未自动打开:
可以通过独立的 PDB 命令,执行数据库 OPEN 操作,可以通过 ALL 关键字同时打开或关闭所有 PDB:
如果需要在数据库启动之后,自动打开全部的 PDB 数据库,可以创建一个触发器,用于在数据库开启后自动执行数据库读写打开:
[转]Oracle 12c多租户特性详解:PDB 的创建、克隆与维护的更多相关文章
- oracle 12C的新特性-CDB和PDB
1.前言 CDB与PDB是Oracle 12C引入的新特性,在ORACLE 12C数据库引入的多租用户环境(Multitenant Environment)中,允许一个数据库容器(CDB)承载多个可插 ...
- Oracle Database 12c Release 2安装详解
第1章 Oracle Database 12c Release 2安装详解 1.1 下载方法 oracle官网https://www.oracle.com 1)打开官方网站,找到下载连接 2)选择更多 ...
- oracle中的dual表详解
oracle中的dual表详解 1.DUAL表的用途 Dual 是 Oracle中的一个实际存在的表,任何用户均可读取,常用在没有目标表的Select语句块中 --查看当前连接用户 SQL> s ...
- Oracle 12c多租户架构浅析
Oracle数据库12c的一大创新即是其采用的多租户架构.对于多租户这项新功能,业内的评价褒贬不一.有的声音认为,这项功能的用处不是特别大,但在某些场景或特定的环境下,多租户依然有它的用处.其最大的用 ...
- C#中的 特性 详解(转载)
本篇幅转载于:http://www.cnblogs.com/rohelm/archive/2012/04/19/2456088.html C#中特性详解 特性提供了功能强大的方法,用于将元数据或声明信 ...
- iOS开发——高级特性&Runtime运行时特性详解
Runtime运行时特性详解 本文详细整理了 Cocoa 的 Runtime 系统的知识,它使得 Objective-C 如虎添翼,具备了灵活的动态特性,使这门古老的语言焕发生机.主要内容如下: 引言 ...
- ES6,ES2105核心功能一览,js新特性详解
ES6,ES2105核心功能一览,js新特性详解 过去几年 JavaScript 发生了很大的变化.ES6(ECMAScript 6.ES2105)是 JavaScript 语言的新标准,2015 年 ...
- 《Android群英传》读书笔记 (5) 第十一章 搭建云端服务器 + 第十二章 Android 5.X新特性详解 + 第十三章 Android实例提高
第十一章 搭建云端服务器 该章主要介绍了移动后端服务的概念以及Bmob的使用,比较简单,所以略过不总结. 第十三章 Android实例提高 该章主要介绍了拼图游戏和2048的小项目实例,主要是代码,所 ...
- oracle数据库exp/imp命令详解
转自http://wenku.baidu.com/link?url=uD_egkkh7JtUYJaRV8YM6K8CLBT6gPJS4UlSy5WKhz46D9bnychTPdgJGd7y6UxYtB ...
随机推荐
- .NET 基础一步步一幕幕[out、ref、params]
out.ref.params out: 如果你在一个方法中,返回多个相同类型的值的时候,可以考虑返回一个数组. 但是,如果返回多个不同类型的值的时候,返回数组就不行了,那么这个时候, 我们可以考虑使用 ...
- 被逼着写的jquery工作日管理日历插件
因为工作原因,在我刚进入新公司之后,立马要求让我做一个jquery的插件demo.我的天,我面试的可是.net工程师啊.虽然以前接触过js,jquery,但也只是接触过一丢丢啊,没办法,只好硬着头皮上 ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(53)-工作流设计-我的批阅
系列目录 前言:由于工作原因工作流一直没时间更新,虽然没有更新,但是批阅和申请差不多,改变一下数据的状态字段就行,有几个园友已经率先完成了 说句实话,一个工作流用文章表达很难,我起初以为这是一个很简单 ...
- Android学习路线
第一阶段:Java面向对象编程 1.Java基本数据类型与表达式,分支循环. 2.String和StringBuffer的使用.正则表达式. 3.面向对象的抽象,封装,继承,多态,类与对象,对象初始化 ...
- [C#] 走进异步编程的世界 - 在 GUI 中执行异步操作
走进异步编程的世界 - 在 GUI 中执行异步操作 [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5877042.html 序 这是继<开始接 ...
- 浅析MySQL复制
MySQL的复制是基于binlog来实现的. 流程如下 涉及到三个线程,主库的DUMP线程,从库的IO线程和SQL线程. 1. 主库将所有操作都记录到binlog中.当复制开启时,主库的DUMP线程根 ...
- ES6环境搭建及react-router学习
一.起因 ES6新纳入了很多振奋人心的新特性,真的很让人忍不住去尝试一下.不过,由于现在大部分的浏览器对ES6的支持程度都不是很好.所以如果想要放心地使用一些新特性,还需要用一些工具,将ES6或者ES ...
- windows环境tomcat8配置Solr5.5.1
前言 前前后后接触Solr有一个多月了,想趁着学习Solr顺便把java拾起来.我分别用4.X和5.X版本在windows环境下用jetty的方式.tomcat部署的方式自己搭建了一把.其中从4.x到 ...
- ASP.NET Core 中文文档 第二章 指南(4.2)添加 Controller
原文:Adding a controller 翻译:娄宇(Lyrics) 校对:刘怡(AlexLEWIS).何镇汐.夏申斌.孟帅洋(书缘) Model-View-Controller (MVC) 架构 ...
- angular2 问题请教
angular2 通过http服务进行对后端api的远程调用? 我简单的尝试了一下,发现了几个问题,记录一下,以方便查找问题. angular2 http服务的跨域问题?跨域本身就是一个很复杂的问题, ...