1.前言

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

12c中 oracle引入了容器数据库 CDB(container database),和可插拔数据库 PDB(pluggable database)。oracle 将CDB看成一个容器,用来存放数据库。
在CDB中可以有多个PDB,其中存在一个root根容器(PDB$ROOT)、一个种子容器(PDB$SEED)和多个PDBS。所有的PDB共用一个硬件系统资源、sga和pga、redo、临时段、控制文件、参数文件、还原段(还可对每个PDB单独指定)。

PDB$ROOT:根容器用来做所有容器的跟,用来对每个PDB进行统一管理,sqlplus / as  sysdba连接进来默认是连接的根容器,需要切换到其他的PDB容器才可以对单独的PDB操作。其中有 system数据文件、sysaux数据文件、(undo数据文件、temp数据文件、redo、控制文件)。一般不存放生产数据文件

PDB$SEED:种子容器作为插入PDB的模板而存在,每个CDB都有一个种子容器,且不可对其中对象进行修改。其中有 system数据文件、sysaux数据文件、其他数据文件。

PDB:新插入容器,该容器用来存放数据库。其中有 system数据文件、sysaux数据文件、其他数据文件。12c中可以插入多个容器进行统一管理,来减少BDA的工作量。其中的数据库可以插入或拔出。

用户:12c中PDB$ROOT中的普通目录可以通过权限分配来访问一个或多个指定的PDB容器,最大权限用户是sysdba。其中PDB也可单独创建普通用户来管理该容器的数据库。

PDB资源管理:12c中将多个数据库运行在一个硬件资源上,CDB性能上得到优化。在CDB中为每个PDB确定使用CPU最低份额,CDB会按照一个PDB份额/分配的总份额数*100%,来保证PDB最低份额数。

容器管理

连接数据库

[oracle@master ~]$ sqlplus / as sysdba

查询该容器是CDB 还是非CDB

  1. SQL> select name,cdb,open_mode,con_id from v$database;
  2.  
  3. NAME CDB OPEN_MODE CON_ID
  4. --------- --- -------------------- ----------
  5. ORCL YES READ WRITE 0

查看当前容器

  1. SQL> show con_name;
  2.  
  3. CON_NAME
  4. ------------------------------
  5. CDB$ROOT

查看所创建的PDB

  1. SQL> show pdbs;
  2.  
  3. CON_ID CON_NAME OPEN MODE RESTRICTED
  4. ---------- ------------------------------ ---------- ----------
  5. 2 PDB$SEED READ ONLY NO
  6. 3 PDBORCL MOUNTED

创建一个新PDB

  1. SQL> create pluggable database pdb1 admin user pdb1 identified by pdb1 file_name_convert=('/u01/app/oracle/oradata/orcl/pdbseed/','/u01/app/oracle/oradata/orcl/pdb1/');
  2.  
  3. Pluggable database created.
  4.  
  5. SQL> show pdbs;
  6.  
  7. CON_ID CON_NAME OPEN MODE RESTRICTED
  8. ---------- ------------------------------ ---------- ----------
  9. 2 PDB$SEED READ ONLY NO
  10. 3 PDBORCL MOUNTED
  11. 4 PDB1 MOUNTED

启动一个创建好的PDB

  1. SQL> alter pluggable database pdb1 open;
  2.  
  3. Warning: PDB altered with errors.
  4.  
  5. SQL> select message,time from pdb_plug_in_violations;
  6.  
  7. MESSAGE
  8. --------------------------------------------------------------------------------
  9. TIME
  10. ---------------------------------------------------------------------------
  11. Sync PDB failed with ORA-959 during 'CREATE USER c##dm_ca IDENTIFIED BY * PROFIL
  12. E DEFAULT DEFAULT TABLESPACE casdb ACCOUNT UNLOCK container = all'
  13. 26-DEC-18 11.26.27.070262 AM
  14.  
  15. SQL> alter session set container=pdb1;
  16.  
  17. Session altered.
  18.  
  19. SQL> create tablespace users datafile '/u01/app/oracle/oradata/orcl/pdb1/users01.dbf' size 800M;
  20.  
  21. Tablespace created.
  22.  
  23. SQL> alter pluggable database pdb1 close;
  24.  
  25. Pluggable database altered.
  26.  
  27. SQL> alter pluggable database pdb1 open;
  28.  
  29. Warning: PDB altered with errors. #还是会报错,不知是何原因了,查看没有报错信息
  30.  
  31. SQL> select message,time from pdb_plug_in_violations;
  32.  
  33. no rows selected
  34.  
  35. SQL> show pdbs;
  36.  
  37. CON_ID CON_NAME OPEN MODE RESTRICTED
  38. ---------- ------------------------------ ---------- ----------
  39. 4 PDB1 READ WRITE YES

也可以通过sqlplus使用传统的startup和shutdown命令来启动和关闭PDB

  1. SQL> alter session set container=pdb1;
  2. Session altered.
  3. SQL>
  4. SQL> show pdbs;
  5.  
  6. CON_ID CON_NAME OPEN MODE RESTRICTED
  7. ---------- ------------------------------ ---------- ----------
  8. 4 PDB1 MOUNTED
  9. SQL> startup
  10.  
  11. Warning: PDB altered with errors.
  12.  
  13. Pluggable Database opened.
  14. SQL> show pdbs;
  15.  
  16. CON_ID CON_NAME OPEN MODE RESTRICTED
  17. ---------- ------------------------------ ---------- ----------
  18. 4 PDB1 READ WRITE YES
  19. SQL> shutdown immediate;
  20. Pluggable Database closed.
  21. SQL> show pdbs;
  22.  
  23. CON_ID CON_NAME OPEN MODE RESTRICTED
  24. ---------- ------------------------------ ---------- ----------
  25. 4 PDB1 MOUNTED
  26. SQL> alter session set container=CDB$ROOT;
  27.  
  28. Session altered.

配置监听文件

监听文件目录在$ORACLE_HOME/network/admin

  1. [oracle@master admin]$ cat tnsnames.ora
  2. # tnsnames.ora Network Configuration File: /u01/app/oracle/product/12.1.0/db_1/network/admin/tnsnames.ora
  3. # Generated by Oracle configuration tools.
  4.  
  5. ORCL =
  6. (DESCRIPTION =
  7. (ADDRESS = (PROTOCOL = TCP)(HOST = master)(PORT = 1521))
  8. (CONNECT_DATA =
  9. (SERVER = DEDICATED)
  10. (SERVICE_NAME = orcl)
  11. )
  12. )
  13.  
  14. PDBORCL =
  15. (DESCRIPTION =
  16. (ADDRESS = (PROTOCOL = TCP)(HOST = master)(PORT = 1521))
  17. (CONNECT_DATA =
  18. (SERVER = DEDICATED)
  19. (SERVICE_NAME = PDBORCL)
  20. )
  21. )
  22.  
  23. PDB1 =
  24. (DESCRIPTION =
  25. (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.200)(PORT = 1521))
  26. (CONNECT_DATA =
  27. (SERVER = DEDICATED)
  28. (SERVICE_NAME = PDB1)
  29. )
  30. )
  1. listener.ora 文件内容
  1. [oracle@master admin]$ cat listener.ora
  2. # listener.ora Network Configuration File: /u01/app/oracle/product/12.1.0/db_1/network/admin/listener.ora
  3. # Generated by Oracle configuration tools.
  4.  
  5. SID_LIST_LISTENER =
  6. (SID_LIST =
  7. (SID_DESC =
  8. (GLOBAL_DBNAME = orcl)
  9. (ORACLE_HOME = /u01/app/oracle/product/12.1.0/db_1)
  10. (SID_NAME = ORCL)
  11. )
       (SID_DESC=
          (GLOBAL_DBNAME = PDB1)
          (SID_NAME = PDB1)
        )
  12. )
  13.  
  14. LISTENER =
  15. (DESCRIPTION_LIST =
  16. (DESCRIPTION =
  17. (ADDRESS = (PROTOCOL = TCP)(HOST = master)(PORT = 1521))
  18. )
  19. (DESCRIPTION =
  20. (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
  21. )
  22. )
  23.  
  24. ADR_BASE_LISTENER = /u01/app/oracle

测试一下

  1. [oracle@master admin]$ tnsping pdb1
  2.  
  3. TNS Ping Utility for Linux: Version 12.1.0.2.0 - Production on 26-DEC-2018 11:55:36
  4.  
  5. Copyright (c) 1997, 2014, Oracle. All rights reserved.
  6.  
  7. Used parameter files:
  8. /u01/app/oracle/product/12.1.0/db_1/network/admin/sqlnet.ora
  9.  
  10. Used TNSNAMES adapter to resolve the alias
  11. Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.200)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = PDB1)))
  12. OK (0 msec)

连接pdb1

  1. 方法一:
    [oracle@master admin]$ sqlplus sys/admin@pdb1 as sysdba
  2.  
  3. SQL*Plus: Release 12.1.0.2.0 Production on Wed Dec 26 14:23:22 2018
  4.  
  5. Copyright (c) 1982, 2014, Oracle. All rights reserved.
  6.  
  7. Connected to:
  8. Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
  9. With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
  10.  
  11. SQL> startup
  12.  
  13. Warning: PDB altered with errors.
  14.  
  15. Pluggable Database opened.
  16. SQL> show pdbs;
  17.  
  18. CON_ID CON_NAME OPEN MODE RESTRICTED
  19. ---------- ------------------------------ ---------- ----------
  20. 4 PDB1 READ WRITE YES
  21. SQL>
    方法二:
    [oracle@master ~]$ sqlplus pdb1/pdb1@pdb1
  22.  
  23. SQL*Plus: Release 12.1.0.2.0 Production on Wed Dec 26 15:27:35 2018
  24.  
  25. Copyright (c) 1982, 2014, Oracle.  All rights reserved.
  26.  
  27. Connected to:
    Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
    With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
  28.  
  29. SQL>

oracle12C中在启动数据库的时候,PDB并不会随着CDB而启动。不过我们可以通过创建一个触发器让PDB能够随CDB启动。如下:

  1. SQL> alter session set container=CDB$ROOT;
  2.  
  3. Session altered.
  4.  
  5. SQL> SHOW CON_NAME
  6.  
  7. CON_NAME
  8. ------------------------------
  9. CDB$ROOT
  10. SQL> CREATE OR REPLACE TRIGGER open_pdbs
  11. AFTER STARTUP ON DATABASE
  12. BEGIN
  13. EXECUTE IMMEDIATE 'ALTER PLUGGABLE DATABASE ALL OPEN';
  14. END open_pdbs;
  15. /
  16. Trigger created.

重新启动数据库:

  1. [oracle@master ~]$ sqlplus / as sysdba
  2.  
  3. SQL*Plus: Release 12.1.0.2.0 Production on Wed Dec 26 14:32:11 2018
  4.  
  5. Copyright (c) 1982, 2014, Oracle. All rights reserved.
  6.  
  7. Connected to:
  8. Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
  9. With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
  10.  
  11. SQL> show pdbs;
  12.  
  13. CON_ID CON_NAME OPEN MODE RESTRICTED
  14. ---------- ------------------------------ ---------- ----------
  15. 2 PDB$SEED READ ONLY NO
  16. 3 PDBORCL READ WRITE NO
  17. 4 PDB1 READ WRITE YES

确实已经随着数据库启动,pdb1也启动起来。

但是,RESTRICTED 为YES

我重新创建一个pdb2

  1. SQL> show con_name;
  2.  
  3. CON_NAME
  4. ------------------------------
  5. CDB$ROOT
  6. SQL> create pluggable database pdb2 admin user pdb2 identified by pdb2 file_name_convert=('/u01/app/oracle/oradata/orcl/pdbseed/','/u01/app/oracle/oradata/orcl/pdb2/');
  7.  
  8. Pluggable database created.
  9.  
  10. SQL> show pdbs;
  11.  
  12. CON_ID CON_NAME OPEN MODE RESTRICTED
  13. ---------- ------------------------------ ---------- ----------
  14. 2 PDB$SEED READ ONLY NO
  15. 3 PDBORCL READ WRITE NO
  16. 4 PDB1 READ WRITE YES
  17. 5 PDB2 MOUNTED
  18. SQL> alter pluggable database pdb2 open;
  19.  
  20. Pluggable database altered.
  21.  
  22. SQL> show pdbs;
  23.  
  24. CON_ID CON_NAME OPEN MODE RESTRICTED
  25. ---------- ------------------------------ ---------- ----------
  26. 2 PDB$SEED READ ONLY NO
  27. 3 PDBORCL READ WRITE NO
  28. 4 PDB1 READ WRITE YES
  29. 5 PDB2 READ WRITE NO

pdb2完全正确。

pdb1解决如下:

  1. SQL> select message from pdb_plug_in_violations where name='PDB1';
  2.  
  3. MESSAGE
  4. --------------------------------------------------------------------------------
  5. Sync PDB failed with ORA-959 during 'CREATE USER c##dm_ca IDENTIFIED BY * PROFIL
  6. E DEFAULT DEFAULT TABLESPACE casdb ACCOUNT UNLOCK container = all'
  7.  
  8. Sync PDB failed with ORA-1918 during 'drop user c##dm_ca cascade'
  9.  
  10. SQL> alter session set container=PDB1;
  11.  
  12. Session altered.
  13.  
  14. SQL> select name from v$tablespace;
  15.  
  16. NAME
  17. ------------------------------
  18. UNDOTBS1
  19. SYSTEM
  20. SYSAUX
  21. TEMP
  22. USERS
  23.  
  24. SQL> create tablespace casdb datafile '/u01/app/oracle/oradata/orcl/pdb1/casdb01.dbf' size 800M;
  25.  
  26. Tablespace created.
  27.  
  28. SQL> conn / as sysdba
  29. Connected.
  30.  
  31. SQL> alter pluggable database pdb1 close;
  32.  
  33. Pluggable database altered.
  34.  
  35. SQL> alter pluggable database pdb1 open;
  36.  
  37. Pluggable database altered.
  38.  
  39. SQL> show pdbs;
  40.  
  41. CON_ID CON_NAME OPEN MODE RESTRICTED
  42. ---------- ------------------------------ ---------- ----------
  43. 2 PDB$SEED READ ONLY NO
  44. 3 PDBORCL READ WRITE NO
  45. 4 PDB1 READ WRITE NO
  46. 5 PDB2 READ WRITE NO
  47. SQL>

oracle 12C的新特性-CDB和PDB的更多相关文章

  1. ORACLE 12C新特性——CDB与PDB

    Oracle 12C引入了CDB与PDB的新特性,在ORACLE 12C数据库引入的多租用户环境(Multitenant Environment)中,允许一个数据库容器(CDB)承载多个可插拔数据库( ...

  2. 【12c】12c RMAN新特性之通过网络远程恢复数据库(RESTORE/Recover from Service)

    [12c]12c RMAN新特性之通过网络远程恢复数据库(RESTORE/Recover from Service) 通过网络远程恢复数据库(Restore/Recover from Service) ...

  3. [转]Oracle 12c多租户特性详解:PDB 的创建、克隆与维护

    转自:http://chuansong.me/n/443660447865 PDB 的创建和访问 在使用 dbca 建库时,创建数据库之前,可以保存一下创建脚本,分析其具体执行过程.以自定义方式创建名 ...

  4. Oracle 12c 创建新的数据库实例、用户

    前提:安装好了Oracle 12c数据库,已有一个数据库实例xe,登录用户/密码:system/oralce 我用的是docker安装的Oracle 12c的实例: docker run --name ...

  5. 盘点 Oracle 11g 中新特性带来的10大性能影响

    Oracle的任何一个新版本,总是会带来大量引人瞩目的新特性,但是往往在这些新特性引入之初,首先引起的是一些麻烦,因为对于新技术的不了解.因为对于旧环境的不适应,从Oracle产品到技术服务运维,总是 ...

  6. Oracle 11gR2 RAC 新特性说明

    最近接触了一下Oracle 11g R2 的RAC,发现变化很大. 所以在自己动手做实验之前还是先研究下它的新特性比较好. 一.    官网介绍 先看一下Oracle 的官网文档里对RAC 新特性的一 ...

  7. Oracle 12c 多租户在 CDB 中 Plug A PDB,Unplugging A PDB

    Oracle 数据库 12 c 中介绍了多租户选项允许单个容器数据库 (CDB) 来承载多个单独的可插拔数据库 (PDB).本文简单的演示了如何在 CDB 中 Plug A PDB,Unpluggin ...

  8. Oracle 12c的可插拔数据库PDB

    1. 默认安装之后会有一个可插拔数据库:pdborcl 2. 启动根容器: [oracle@eric ~]$ export ORACLE_SID=orcl [oracle@eric ~]$ sqlpl ...

  9. Oracle 12C -- clone a non-cdb as a pdb

    将non-CDB置为只读模式: $ sqlplus '/as sysdba' SQL> select name, decode(cdb, 'YES', 'Multitenant Option e ...

随机推荐

  1. LC 646. Maximum Length of Pair Chain

    You are given n pairs of numbers. In every pair, the first number is always smaller than the second ...

  2. java web 开发快速宝典 ------电子书

    http://www.educity.cn/jiaocheng/j10259.html 1.2.1  JDk 简介 JDK是Sun公司在1995年推出的一套可以跨操作系统平台编译和运行Java程序的开 ...

  3. python 类中__init__函数的使用

    class F: def __init__(self): print('hello china') __init__ 是构造函数,初始化类,每当调用类的时候,就会自动执行这个函数 比如:执行 F() ...

  4. linux常用命令(15)whereis命令

    whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b).man说明文件(参数-m)和源代码文件(参数-s).如果省略参数,则返回所有信息.和find相比,whereis查找的速度非常 ...

  5. 第一个简单APP设计图

    以下是我画出来的最简单的手机UI设计图哟,以后慢慢积累吧.... 其实使用很简单,很多控件都有,直接使用就好....还是多动手吧,相信自己之后能很好的掌握这个的使用哟!!!!!!

  6. Ansible变量嵌套解析

    有时候需要用到ansible的变量的嵌套解析,就是“变量中嵌套变量”.例子如下: 假设有一个外部传递的变量,system_code = CRM,而我们同时有一系列类似的变量,如: ABS_port=1 ...

  7. 记:倍福(CP2611 Control Panel)了解

    型号:CP2611 Control Panel Multitouch 11 为啥选型?嗯!因为不了解,了解了,作为只运行.net客户端窗体程序,谁会选用他,不是说他不好,反而相反,他是很优秀的嵌入式集 ...

  8. CTF—攻防练习之HTTP—命令注入

    主机:192.168.32.152 靶机:192.168.32.167 首先nmap,nikto -host,dirb 探测robots.txt目录下 在/nothing目录中,查看源码发现pass ...

  9. php配置php-fpm启动参数及配置详

    php-fpm 启动参数及重要配置详解 约定几个目录 /usr/local/php/sbin/php-fpm/usr/local/php/etc/php-fpm.conf/usr/local/php/ ...

  10. Django与Session

    Session Session的由来 ​ Cookie虽然在一定程度上解决了"保持状态"的需求,但是由于Cookie本身最大支持4096字节,以及Cookie本身保存在客户端,可能 ...