12C中CDB和PDB的一些概念
1.通过名称和ID来识别容器
一个集成的CDB中,可以包含多个容器,他们可以通过名称和数字,也就是con_id来进行识别.在12c版本中,所有用来显示一个实例中包含哪些对象的v$视图,都添加了一列,用来显示CON_ID,以便标记对象属于哪个PDB.
CDB本身是一个容器,其容器CON_ID为0,被标记为CON_ID=0的对象,都是 CDB级别的对象,并且不会关联到其它的容器.
在任意CDB环境中,第一个容器都是根容器,名为CDB$ROOT,并且CON_ID=1,其它所有的容器都是PDB
在任意CDB中的第一个PDB容器,都是种子容器,名为PDB$SEED,因为他的CDB中的第二个容器,所以CON_ID=2
在CON_ID>2的容器就是用户PDB
在PDB中查询dba_pdbs中,CON_UID和DBID一致,表示当前PDB的唯一ID
而在V$DATABASE中查询的DBID是CDB$ROOT的唯一ID,和以前的概念一致.
2.容器列表
视图DBA_PDBS列出了所有的PDB及其状态:
PDB_ID PDB_NAME STATUS DBID CON_ID
---------- ------------------------------ ---------- ---------- ----------
2 PDB$SEED NORMAL 3575060827 2
对于PDB而言,当刚创建时,其状态为NEW,并且在第一次将其以读/写方式打开时,其状态调整为NORMAL,因为在第一次打开PDB的时候,需要进行一些相关操作.状态为UNUSABLE表明该PDB创建失败,并且唯一允许的操作是将其删除.
状态为UNPLUGGED,表明该PDB将会被传输到其它的CDB,而在源CDB上,唯一能做的操作就是将该PDB删除.
SQL> l
1* select con_id,name,open_mode,open_time from v$pdbs
SQL> /
CON_ID NAME OPEN_MODE OPEN_TIME
---------- ------------------------------ ---------- ---------------------------------------------------------------------------
2 PDB$SEED READ ONLY 21-JUN-19 10.31.47.849 AM +08:00
在非PDB中,MOUNTED状态表明当前的控制文件已经被读取,但是数据文件还没有被实例打开.可以使用show pdbs来查看当前的PDB状态,如果正处于根容器中,还可以显示所有的PDB:
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3.通过CON_ID和DBID来识别容器
CON_ID来标识容器,但是当PDB移动的时候,CON_ID就会变化,因此使用CON_UID来唯一标识PDB.
4.连接到容器
使用show con_id和show con_name来查看当前连接的pdb
SQL> show con_id
CON_ID
------------------------------
1
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
可以使用alter session命令来切换容器,例如:
SQL> alter session set container=brent;
Session altered.
PDB的隔离性:
在pdb中只能访问到当前PDB的数据.不同PDB之间的操作是相互独立的.你可以使用alter session set container=XX;来在PDB之间进行切换.
但是注意当在一个PDB上进行事务的时候,如果没有提交或者回滚,在不能在另一个PDB上开启事务.
如果你想使用PDB,CDB的特性,则需要使用12c的客户端,否则在执行切换PDB的时候会产生错误.
注意:
不同的PDB可以使用自己的system,sysaux,undo,temp,users表空间(推荐这么做),但是使用共有的redo日志,控制文件和参数文件.
如果想在切换不同的pdb的时候执行不同的参数,可以在PDB中创建BEFORE SET CONTAINER或者AFTER SET CONTAINER触发器.
5.容器中的字典
当你处在PDB中时候,pdb中包含了所有你想从数据库中看到的内容.当你在一个PDB中进行数据字典查询的时候,与你在其它非CDB环境中的一样.DBA_和V$视图都是当前PDB下的.
当你处在CDB的时候,就可以看CDB_视图,这些视图是所有容器DBA_视图的union all结果.这是一个CDB管理员使用的方法,从而查看所有对象.
对于CDB$ROOT用户,v$视图将会显示所有的容器内的信息.例如v$session中con_id标识了此会话当前属于哪个PDB.
6.参数文件
对于所有的容器,spfile是公用的,spfile持有的该实例的相关参数,并为整个CDB进行属性设置.
有些参数可以在PDB级别进行单独配置.具体哪些参数,可以参考v$parameter中的ISPDB_MODIFIABLE为TRUE的列.
如果手工指定了某pdb的参数,那么此pdb的参数将覆盖cdb的参数.不再参考cdb的参数值.而且此pdb的参数是存放在CDB的数据字典PDB_SPFILE$中.
可以通过查看数据字典pdb_spfile$来查看pdb指定的参数:
SQL> select a.name,a.dbid,b.pdb_uid,b.name,b.value$ from v$pdbs a ,pdb_spfile$ b where a.dbid=b.pdb_uid and a.name='PDB2'
SQL> /
NAME DBID PDB_UID NAME VALUE$
------------------------------ ---------- ---------- -------------------------------------------------------------------------------- ------------------------------
PDB2 2158045800 2158045800 db_securefile 'PREFERRED'
PDB2 2158045800 2158045800 open_cursors 1000
注意一个DB_FILES参数,默认为200,当你有很多PDB的时候,可能很快就会超过,因此注意在创建CDB的时候就修改其大小.
7.控制文件
控制文件也是CDB级别的.控制文件是唯一真正存储数据文件名称的地方.例如你在CDB中查询dba_data_files只显示当前CDB的数据文件,并不会列出所有的数据文件,
但是你查询v$datafile会列出所有的数据文件,因为v$datafile查询的是控制文件.
当一个PDB被拔出或者插入的时候,所有与该PDB相关的数据文件信息,也会被控制文件中导出,然后存储到一个XML文件中.
8.UNDO文件
在12.1中UNDO是CDB级别的.
但是在12.2中UNDO可以是PDB级别的,当LOCAL_UNDO被设置为on的时候,每个PDB都拥有自身的UNDO表空间
建议将UNDO本地管理,即每个PDB都拥有其独立的undo,这样可以做到PDB隔离,而且在PDB闪回的时候也更方便.
9.临时表空间
临时表空间可以是PDB或者CDB级别创建,建议每个PDB拥有其独立的临时表空间
如果某个会话在执行的过程中没有指定临时表空间,而且该PDB也没有默认的临时表空间,则使用CDB的临时表空间.
10.redo日志
redo日志是CDB级别的,所有的PDB公用相同的redo日志
CDB环境下的redo日志与以前的类似,但是需要在每一条redo中记录额外的信息用来标记来至哪个容器.
使用统一的redo线程来处理所有的PDB,因此对于DBA管理CDB而言就变得轻松.所有的备份,rac配置,dg配置都是在CDB级别进行配置,PDB会随着CDB自动进行备份,配置,DG等.
12C中CDB和PDB的一些概念相关推荐
- oracle pdb还原为no-cdb,oracle 12c中CDB和PDB的备份还原实验
本文档分为两部分: 1.单个pdb备份还原 2.只cdb备份还原 1.rman只备份pdb SQL> show pdbs CON_ID CON_NAME ...
- 【12c新特性】12c中如何自动启动PDB Pluggable Database
PDB Pluggable Database是12c中扛鼎的一个新特性, 但是对于CDB中的PDB,默认启动CDB时不会将所有的PDB带起来,这样我们就需要手动alter pluggable data ...
- Oracle - 5.0 - 【学习笔记】for ocp 12c、多租户(CDB、PDB)
文章目录 多租户构型 多租户概念 数据字典视图 多租户的驱动程序 CDB和根容器 # 会话切换 PDB:可插入容器 设置可插拔数据库 在多租户容器数据库中进行交互 创建容器数据库 使用DBCA创建CD ...
- oracle12c官方文档中文版_三分钟让你真正读懂oracle12c 中cdb pdb概念及原理
Oracle 12C引入了CDB与PDB的新特性,在ORACLE 12C数据库引入的多租用户环境(Multitenant Environment)中,允许一个数据库容器(CDB)承载多个可插拔数据库( ...
- oracle中pdb,Oracle 12C新特性-CDB和PDB 详解
最近看到好多人都在尝试Oracle中的12C新特性-容器数据库,今年3月Orcle推出了Release2版本,可以算是一个稳定版本了.下午着手尝试了一下,还是蛮不错得 1.前言 CDB与PDB是Ora ...
- Oracle 12c 多租户 CDB 与 PDB之 shared undo 与 Local undo 切换
undo 在12C R1版本中只支持Global Shared Undo模式, 所有container共享一个UNDO表空间, 目前保留这种模式只是为了升级过渡, 在12C R2引入了PDB Loca ...
- oracle12c racpdb,Oracle 12C R2的CDB与PDB简单管理操作
Oracle 12C引入了CDB与PDB的新特性,在ORACLE 12C数据库引入的多租用户环境(Multitenant Environment)中,允许一个数据库容器(CDB)承载多个可插拔数据库( ...
- oracle pdb 表空间,Oracle 12c CDB 和 PDB 表空间管理和配置 说明
注:本文谢绝转载. 1 管理CDB中的表空间 CDB表空间的管理和non-CDB 表空间的管理一样,CDB 也有一个实例,在安装的时候指定. --查看表空间: SQL> select inst ...
- oracle的cbd和pdb区别,Oracle 12C CDB、PDB常用管理命令
Oracle 12C CDB.PDB常用管理命令 --查看PDB信息(在CDB模式下) show pdbs --查看所有pdbselect name,open_mode from v$pdbs; -- ...
- Oracle 12C CDB、PDB常用管理命令
--查看PDB信息(在CDB模式下) show pdbs --查看所有pdb select name,open_mode from v$pdbs; --v$pdbs为PDB信息视图 select co ...
最新文章
- java中的几种对象(PO,VO,DAO,BO,POJO)
- C 语言中的 feof()函数
- 按15分钟取数据_步行15分钟能获得什么?这组数据能告诉你……
- hystrix熔断和降级的区别_Ribbon+Hystrix断路器实现微服务的降级和熔断
- ArrayList实现
- linux下利用nohup后台运行jar文件包程序
- django render_(django/flask/bottle)多框架python-restful接口包api-shop
- DeepMind作弊?被质疑干翻星际2顶尖高手全靠手速
- Maven 项目管理 —— 安装与配置
- APP测试常用测试点
- 用友T1-商贸宝库存商品明细账
- 国家2000坐标系的理解
- CC2430基础——定时器1试验
- Linux课程设计每日小结
- 在电脑上微信无法语音聊天,微信听不到语音声音
- 容联云通讯发送短信java实现
- 一个保护眼睛的小技巧
- k8s使用 ceph rbd 模式 踩坑
- Vue form表单input框 手动赋值 提交时 表单input值没有生效 验证仍然是空
- MCU控制的电池管理是成功的物联网实现的关键