天天看点

ORACLE 12C新特性——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的关系图。

ORACLE 12C新特性——CDB与PDB

其实大家如果对sql

server比较熟悉的话,这种cdb与pdb是不是感觉和sql

server的单实例多数据库架构是一回事呢。像pdb$seed可以看成是master、msdb等系统数据库,pdbs可以看成用户创建的数据库。而

可插拔的概念与sql server中的用户数据库的分离、附加其实就是那么一回事。看来oracle也“抄袭”了一把sql

server的概念,只是改头换面的包装了一番。

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和名称。

1)连接到cdb数据库

连接到cdb数据库容器非常简单,跟以前连接数据库是一样的

2)查看数据库是否为cdb

yes表示该数据库是cdb,如果是no表示是no-cdb(普通数据库)

3)查看当前容器(container)

3.1

4)查看cdb容器中的pdbs信息

查看cdb中有多少个pluggable database

5)启动pdb数据库

方式1:

方式2:

6)关闭pdb数据库

sql> alter pluggable database pdbepps close;

pluggable database altered.

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

    con_id       dbid guid                             name                           open_mode

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

         2 4071321146 e89e8da2866e3157e043de07a8c09238 pdb$seed                       read only

         3 1930201447 e89e9418b882350ce043de07a8c092b6 pdbepps                        mounted

sql>

7)在容器间切换

sql> alter session set container=pdbepps;

session altered.

sql> show con_name;

con_name

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

pdbepps

sql> alter session set container=cdb$root;

cdb$root