设为首页 收藏本站
查看: 947|回复: 0

[经验分享] Oracle12C新特性——cdb与pdb

[复制链接]

尚未签到

发表于 2018-9-6 11:04:42 | 显示全部楼层 |阅读模式
  Oracle 12C引入了CDB与PDB的新特性,在ORACLE 12C数据库引入的多租用户环境(Multitenant Environment)中,允许一个数据库容器(CDB)承载多个可插拔数据库(PDB)。CDB全称为Container Database,中文翻译为数据库容器,PDB全称为Pluggable Database,即可插拔数据库。在ORACLE 12C之前,实例与数据库是一对一或多对一关系(RAC):即一个实例只能与一个数据库相关联,数据库可以被多个实例所加载。而实例与数据库不可能是一对多的关系。当进入ORACLE 12C后,实例与数据库可以是一对多的关系。下面是官方文档关于CDB与PDB的关系图。
DSC0000.png

  其实大家如果对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>
  SQL>>  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>>  3.5、切换到PDB,或切换到CDB

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

  SQL>>
  SQL>>  3.7、插拔一个pdb数据库

  SQL>>
  SQL>>  (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就先总结到这里,一些基础的知识和操作都有介绍


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-563976-1-1.html 上篇帖子: 静默安装Oracle12.2数据库 下篇帖子: Oracle 12.2新特性----在线move表
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表