Oracle12C新特性——cdb与pdb

Oracle 12C引入了CDB与PDB的新特性,在ORACLE 12C数据库引入的多租用户环境(Multitenant Environment)中,允许一个数据库容器(CDB)承载多个可插拔数据库(PDB)。CDB全称为Container Database,中文翻译为数据库容器,PDB全称为Pluggable Database,即可插拔数据库。在ORACLE 12C之前,实例与数据库是一对一或多对一关系(RAC):即一个实例只能与一个数据库相关联,数据库可以被多个实例所加载。而实例与数据库不可能是一对多的关系。当进入ORACLE 12C后,实例与数据库可以是一对多的关系。下面是官方文档关于CDB与PDB的关系图。

其实大家如果对SQL SERVER比较熟悉的话,这种CDB与PDB是不是感觉和SQL SERVER的单实例多数据库架构是一回事呢。像PDB$SEED可以看成是master、msdb等系统数据库,PDBS可以看成用户创建的数据库。而可插拔的概念与SQL SERVER中的用户数据库的分离、附加其实就是那么一回事。看来ORACLE也“抄袭”了一把SQL SERVER的概念,只是改头换面的包装了一番。

1、CDB组件(Components of a CDB)

一个CDB数据库容器包含了下面一些组件:

ROOT组件

ROOT又叫CDB$ROOT, 存储着ORACLE提供的元数据和Common User,元数据的一个例子是ORACLE提供的PL/SQL包的源代码,Common User 是指在每个容器中都存在的用户。

SEED组件

Seed又叫PDB$SEED,这个是你创建PDBS数据库的模板,你不能在Seed中添加或修改一个对象。一个CDB中有且只能有一个Seed. 这个感念,个人感觉非常类似SQL SERVER中的model数据库。

PDBS

CDB中可以有一个或多个PDBS,PDBS向后兼容,可以像以前在数据库中那样操作PDBS,这里指大多数常规操作。

这些组件中的每一个都可以被称为一个容器。因此,ROOT(根)是一个容器,Seed(种子)是一个容器,每个PDB是一个容器。每个容器在CDB中都有一个独一无二的的ID和名称。

注意:

①:一个CDB可以包含253个PDB(去掉一个是seed还能创建252个PDB)。

②:Root,seed以及每一个PDB的数据文件是独立的。

③:一个单实例的CDB有一个redo log;RAC环境中每个实例有一个redo log。

④:只有一组后台进程,它们被ROOT和所有PDB共享。

⑤:Root的全局数据库名就是CDB的全局数据库名;PDB的全局数据库名是由PDB name和DB_DOMAIN参数共同定义的。

⑥:一个CDB使用一个SPFILE或者一个PFILE,其中为ROOT设置的参数的值可以被PDB继承。另外,也可以使用ALTER SYSTEM语句来设置PDB的参数。对参数文件执行     操作时,必须使用common user并且使用AS SYSDBA, ASSYSOPER, AS SYSBACKUP来连接数据库。要创建CDB,必须要将初始化参数ENABLE_PLUGGABLE_DATABASE的     值设置为TRUE。

⑦:所有PDB的字符集都使用CDB的字符集。

可以设置所有PDB的时区与CDB相同,也可以单独为PDB设置时区。

块大小被应用于整个CDB。

一个CDB也仅有一个控制文件(可以多路复用)。

⑧:Root与每一个PDB都有自己的SYSAUX表空间和SYSTEM表空间。可以为root和每一个PDB设置默认表空间。而默认的临时表空间对于整个CDB只有一个,但是可以为     每个PDB创建临时表空间。

⑨:撤销表空间对于CDB是唯一的。在CDB中,初始化参数UNDO_MANAGEMENT必须被设置为AUTO。当前容器为PDB时,无法通过数据字典视图查看撤销表空间,只能通     过动态性能视图。

2、PDB简介

2.1、PDB新特点的优势

》可以把多个PDB集成进一个平台。

》可以快速提供一个新的PDB或一个已有PDB的克隆。

》通过拔插技术,可以快速把存在的数据库重新部署到一个新平台上。

》多个PDB数据库补丁或升级一次完成。

》通过把单个PDB拔插到较高版本的不同CDB,可以补丁或升级一个PDB。

》从同一个CDB中众多PDB中分离出某个PDB的内容。

》分离这些PDB应用管理员的责任。

2.2、PDB新特点的功能

》在一个CDB中,你可以拥有很多PDB。

》PDB和12.1之前版本的普通数据库是向后兼容的。

》PDB对应用是透明的——你不需要改变客户端代码或数据库对象。

》RAC中每个实例作为一个整体打开CDB(因此CDB和其中的PDB数据库版本都是相同的)。

》会话仅仅看到它自己连接的那个PDB。

》你可以从一个CDB拔出一个PDB,然后插入另一个CDB。

》你可以在同一个CDB或不同CDB间克隆PDB。

》资源管理器随着PDB的功能得以扩展。

》通过SQL语句实现了实体PDB的操作(创建,拔出,插入,克隆,清除,设置打开模式)。

》当连接到所谓的“根”(root)时,CDB管理员来执行这些操作。

》所有的PDB能被一次备份,但可以分别单独恢复。

2.3、PDB的详解

》每个PDB有自己的私有数据字典用于用户创建的数据库对象;另一方面,CDB作为一个整体也包含Oracle提供系统的数据字典,其中,每个数据字典定义自己的命名空间。换句话说,有全局数据字典(CDB级)和本地数据字典(PDB级)。

》有新的分开的数据字典架构,该架构允许一个PDB被快速从一个CDB拔出并插入一个不同的CDB。

》每个PDB只能看到oracle提供系统的只读定义。

》有全局数据库参数,也有本地数据库参数。PDB参数仅仅属于特定的PDB,并且拔出后,PDB参数也将保持不变。

》数据库用户可以是全局的(CDB)或本地的(PDB)。SYS和SYSTEM用户一开始就在两级DB中存在。如果你在CDB中创建了一个新用户,那么你在PDB中也能看到这个用户。在PDB中创建的用户只能在该PDB中使用。

》临时表空间可以是全局或本地的。

》Redo日志和Undo表空间都是全局的(CDB级)。

》Data Guard在CDB级作为一个整体发挥作用;RMAN调度的备份也作为一个整体在CDB级完成;任何时候,你可以只备份一个PDB。

》应用连接PDB时,不需做代码修改;系统管理员可以连接CDB;连接串中的服务名确定目标PDB。

》PDB允许更加清晰的声明定义一个应用;一个PDB对同一个CDB里的其他PDB一无所知;每个PDB是个密闭的容器。这保证了新层面DB的独立和安全。

3、日常操作:

3.1、查看当前的容器

SQL> show con_name;

CON_NAME

------------------------------

CDB$ROOT

------或:

SQL> select Sys_Context('Userenv', 'Con_Name') "current Container" from dual;

current Container

--------------------------------------------------------------------------------

CDB$ROOT

3.2、查看CDB中的PDB信息:

SQL>  select con_id, dbid, guid, name , open_mode from v$pdbs;

CON_ID       DBID GUID                             NAME                           OPEN_MODE

---------- ---------- -------------------------------- ------------------------------ ----------

2  427872663 439BFCB2A2EE1BE7E055000000000001 PDB$SEED                       READ ONLY

3 1891424478 439C5B1174C121B7E055000000000001 FEIGE                          READ WRITE  ---feige就是一个PDB

3.3、创建一个新的PDB:

SQL> create pluggable database test_pdb admin user admin identified by admin;

SQL> alter pluggable database test_pdb open;    ----将test_pdb 打开

SQL> select con_id,dbid,con_uid,guid,name,open_mode,create_scn,total_size,block_size from v$pdbs;   ---查看pdb的状态

CON_ID       DBID    CON_UID GUID                             NAME                           OPEN_MODE  CREATE_SCN TOTAL_SIZE BLOCK_SIZE

---------- ---------- ---------- -------------------------------- ------------------------------ ---------- ---------- ---------- ----------

2  427872663  427872663 439BFCB2A2EE1BE7E055000000000001 PDB$SEED                       READ ONLY     1594401  838860800       8192

3 1891424478 1891424478 439C5B1174C121B7E055000000000001 FEIGE                          READ WRITE    1753608  865075200       8192

4 2998508999 2998508999 53F376E8715628BCE055000000000001 TEST_PDB                       READ WRITE    1757024  859832320       8192

(“admin user”子句是必须的,在扩展格式,给新用户赋予了权限和角色,该用户仅在admin内可以创建新会话。在创建完可插拔数据库后,新的PDB处于MOUNTED模式)

3.4、克隆一个pdb

SQL> create pluggable database test2_pdb from test_pdb;   ---test_pdb必须是打开的,才可以被打开

SQL> alter pluggable database test2_pdb open;   ---然后打开这个pdb

3.5、切换到PDB,或切换到CDB

SQL> alter session set container=test_pdb;  ---切换到pdb中

SQL> alter session set container=cdb$root;  ---切换到CDB中

3.6、关闭一个pdb和关闭所有的pdb

SQL> alter pluggable database test_pdb close;   ---关闭test_pdb这个pdb数据库

SQL> alter pluggable database all close;    ---关闭数据库中所有的pdb

3.7、插拔一个pdb数据库

SQL> alter pluggable database feige close;    ---先将feige这个pdb关闭

SQL> alter pluggable database feige unplug into '/opt/oracle/oradata/feige.xml';

(feige.xml:文件确定数据文件的名字和全路径等信息。这些信息在插入操作时会用到。注意:PDB还是其从中拔出的CDB的一部分,只是现在状态变为了拔出(UNPLUGGED)而已。)

SQL> drop pluggable database feige keep datafiles;  ----在当前的容器中删除这个pdb

----如果在这个服务器上,有两个容器,则进入另一个容器,插入这个pdb

exec DBMS_PDB.Check_Plug_Compatibility(PDB_Descr_File=>'/opt/oracle/oradata/feige.xml');  --查看pdb和这个容器是否兼容,如果报错说明不兼容

----开始插入pdb,(using关键字后必须跟上PDB描述的绝对路径,即,先前拔出操作时产生的.XML文件)

create pluggable database feige  using '/opt/oracle/oradata/feige.xml'  move file_name_convert = ('/cdb1/', '/cdb2/');

----最后打开这个pdb

alter pluggable database feige open;

3.8、连接pdb数据库:

连接pdb其实和连接正常的单实例数据库是一样的,连接注册的服务名即可,可以通过下面的方式:

①:使用监听注册的服务名连接,如下:

[oracle@localhost ~]$ lsnrctl status    ---通过这个命令查找注册的服务名

[oracle@localhost ~]$ sqlplus system/oracle@192.168.2.100:1521/feige      ---这样连接到PDB数据库

②:通过tnsnames配置文件连接,如下:

feige =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = feige)

)

)

[oracle@localhost admin]$ sqlplus system/oracle@feige      ----使用这种方式连接

---至此,cdb与pdb就先总结到这里,一些基础的知识和操作都有介绍

本文转自一个笨小孩51CTO博客,原文链接:http://blog.51cto.com/fengfeng688/1946278

,如需转载请自行联系原作者

文章

SQL · Oracle · 关系型数据库 · 数据库 · 容器 · 网络协议 · 调度 · 安全 · 数据格式 · XML

2017-11-16

mysql数据库可以放pdb文件吗_pdb数据库文件的搜索结果-阿里云开发者社区相关推荐

  1. 存储过程mysql into select into_mysql 存储过程select into select into select的搜索结果-阿里云开发者社区...

    对一个MySQL存储过程的优化 在编写MySQL存储过程的过程中,我们会时不时地需要对某些存储过程进行优化,其目的是确保代码的可读性.正确性及运行性能.本文以作者实际工作为背景,介绍了对某一个MySQ ...

  2. mysql导出入数据库报错_mysql数据库导出导入数据库的搜索结果-阿里云开发者社区...

    mysql 数据库导入\导出(总结备忘) 数据库的基本导入\导出的命令 是 mysqldump 和 source 在linux下直接用命令行操作就可以 在windows下 一般情况下有两种方法一个也是 ...

  3. mysql slave是什么_创建slave的搜索结果-阿里云开发者社区

    Rainbond部署Mysql主从集群应用说明 Mysql主从同步原理 1)在Slave 服务器上执行sart slave命令开启主从复制开关,开始进行主从复制. 2)此时,Slave服务器的IO线程 ...

  4. oss导出数据为空时怎么处理_sql数据库导出空库的搜索结果-阿里云开发者社区...

    mysql 数据库导入\导出(总结备忘) 数据库的基本导入\导出的命令 是 mysqldump 和 source 在linux下直接用命令行操作就可以 在windows下 一般情况下有两种方法一个也是 ...

  5. 如何看pg数据库版本号_pg版本是什么-和pg版本相关的问题-阿里云开发者社区

    关于 pg版本的搜索结果 问题 DMS for PG 的版本 还停留在 1.7.0,发布日期是 2018-1-10,一年多了没有发布新版本了,DMS for PG 有没有更新计划? DMS for P ...

  6. python读取mssql文件_python 读取mssql数据库中文的搜索结果-阿里云开发者社区

    sphinx 配置文件全解析 sphinx的配置文件是在配置的时候最容易出错的了: 我们先要明白几个概念: source:数据源,数据是从什么地方来的. index:索引,当有数据源之后,从数据源处构 ...

  7. mysql inserted表_数据库inserted的搜索结果-阿里云开发者社区

    SQL 2000中的触发器使用 触发器是数据库应用中的重用工具,它的应用很广泛,这几天写一个化学数据统计方面的软件,需要根据采样,自动计算方差,在这里,我使用了触发器. 下面我摘录了SQL Serve ...

  8. cmake mysql 参数_MySQL cmake编译时这些参数是什么意思?-问答-阿里云开发者社区-阿里云...

    一般用到的参数# -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ #安装路径 # -DMYSQL_DATADIR=/usr/local/mysql/data \ # ...

  9. mysql unix_timestamp now() dfdfd f_数据库函数lpad的搜索结果-阿里云开发者社区

    我的MYSQL学习心得(六) 原文:我的MYSQL学习心得(六) 我的MYSQL学习心得(六) 我的MYSQL学习心得(一) 我的MYSQL学习心得(二) 我的MYSQL学习心得(三) 我的MYSQL ...

  10. mysql 5.1版本无innodb trx_MySQL 5.7: Innodb 事务子系统优化-阿里云开发者社区

    MySQL5.7 : Innodb 事务子系统优化 之前写了篇博客介绍了Percona Server对Read View的优化,顺带简单提到了MySQL5.7的事务子系统优化,详细见http://my ...

最新文章

  1. 10 行 Python 代码自动清理电脑重复文件,解放双手!
  2. 4行代码搞定iframe高度自动变化,完美兼容(转)
  3. asp.net中page对象生命周期和各事件执行顺序
  4. Android从零开始(第三篇)MVP架构搭建
  5. editplus 配置 golang 开发调试环境
  6. R.java文件介绍
  7. 建筑公司木地板WordPress企业网站模板
  8. Github:视觉问答最新资源汇总
  9. [转]形态学操作:膨胀与腐蚀
  10. hihoCoder 1378 网络流二·最大流最小割定理 (网络流学习#2 记录)
  11. js中的 toUpperCase()中开头的u和c一定要大些
  12. B - 吉哥系列故事——完美队形II HDU - 4513 (马拉车)
  13. java 输入流详解_java输入输出流详解
  14. 用Scratch制作手游的角色方向虚拟控制器/虚拟摇杆的方法+源码
  15. android获取手机短信记录,Android开发获取短信的内容并截取短信
  16. 阳春三月来几个python基础吧
  17. java pv uv_什么是pv和uv?
  18. 中水处理设备可提高水资源利用率说明
  19. 电商订单模块的订单表与订单商品表关系,1个订单对应多个商品的页面布局,el表达式去掉重复的数据。
  20. 开发智力的好东西~~~给孩子玩

热门文章

  1. linux打开dwg文件怎么打开方式,dwg文件扩展名,dwg文件怎么打开?
  2. 微波雷达存在感应模组,智能微波感应开关,多普勒雷达原理应用
  3. ios12xen html插件,iOS 12.4 越狱后实用插件推荐(二)
  4. Java中的JPA是什么意思?
  5. PHREEQC建模及典型案例解析与高阶拓展应用【反向“编译”、“玩转”后处理技术、GibbsStudio和PhreePlo方法】
  6. 会员积分消费系统 php,会员消费管理系统充值营销系统会员积分消费系统.net源码...
  7. 电商系统如何搭建会员体系/会员制玩法?
  8. nginx配置解决跨域问题
  9. bootice添加黑苹果引导_手把手教你安装黑苹果之U盘安装篇
  10. 【四足机器人--控制器统筹controlFSM(复杂度2)】HFSM四足机器人步态运行有限状态机fsm_manager代码解析【包括FSM_control、FSM_statelist两层】