oracle引入了CPB和PDB的全新特性,容器数据库。PDB与CDB为多对一关系,一台c版本数据库软件只有一个CDB可以有多个PDB。用以实现实例与数据库在一对一,多对一基础上的一对多关系。参考sql server的单实例多数据库关系
show con_name #查看当前pdb容器名
CDB即数据库容器,是PDB插拔的容器单位,按照g版本的非容器数据库方式管理pdb。含有以下三个组件,这些组件都可以被称为容器,其中root为根容器每个按照模板创建的pdb都是其独一无二的子容器,有独立的id
Root(CDB$ROOT),存储数据库系统的元数据和公共用户,原则不允许修改任何内容,也不允许创建业务数据,一个CDB容器只能有一个root。
cdb seed,PDB$SEED,PDB创建模板,同root一个cdb就一个模板
#未切换PDB情况下,可以查看当前cdb seed
show pdbs
select sys_context('userenv', 'con_name') "Container DB" from dual;
pdbs,由模板创建的pdb,每个pdb都是单独成立。站在g版本角度,pdb就是一个单独的数据库实例,所有pdb都属于CDB$ROOT
#v$containers查询cdb容器中的所有pdb,查询结果包含pdb$seed模板
SELECT NAME, CON_ID, DBID, CON_UID, GUID FROM V$CONTAINERS ORDER BY CON_ID;
#
每个pdb包括模板文件pdb,都可以有自己的用户、角色、配置和数据,这使得在一个cdb中可以同时支持多个应用程序,每个应用程序都有自己的pdb。pdb的使用可以提高资源利用率,简化管理和降低成本。每个pdb都支持从当前cdb中转出到另外的创建application容器的cdb上
目前cdb含有三种类型,标准版pdb、模板pdb和代理pdb
标准版pdb,standard pdb。
由cdb r o o t 模板使用 c r e a t e p l u g g a b l e d a t a b a e 创建 p d b 。内部细分为两种由属于 c d b root模板 使用create pluggable databae创建pdb。内部细分为两种由属于cdb root模板使用createpluggabledatabae创建pdb。内部细分为两种由属于cdbroot和属于application容器
模板pdb,seed pdbs(PDB$SEED),不用于支持业务仅作为一个模板用于创建PDB 。
在CDB R O O T 中只能由一个 s e e d p d b 也就是 C D B ROOT中只能由一个seed pdb也就是CDB ROOT中只能由一个seedpdb也就是CDBROOT,而在application中可以创建多个属于是applcation自己得CDB$ROOT得pdb模板文件,主要作用是为了加快application创建pdb得速度,
create pluggable database seedTest as seed
#默认得CDB$ROOT,可以用于所有application container中被创建。但是创建后,设置再container中得用户无法修改或
代理pdb,proxy pdbs,类似与dblink,属于是访问其他远程得pdb。
#创建pdb语句,需要先切换到外部cdb或者application container才能正常执行
CREATE PLUGGABLE DATABASE pdbCreateTest2 ADMIN USER pdbCreateTest2 IDENTIFIED BY pdb2
STORAGE (MAXSIZE 1G MAX_SHARED_TEMP_SIZE 50M)
DEFAULT TABLESPACE pdbCreateTest2
#pdb被分配的空间不能太小。否则执行语句会报错,会在只当路径生成空文件夹记得删掉
show pdbs #查看数据库建立情况
alter pluggable database pdbCreateTest open;#数据库开启
show pdbs #pdb对应,open mode变为read write即可
#CREATE PLUGGABLE DATABASE pdbCreateTest ADMIN USER pdbCreateTest IDENTIFIED BY pdb2
#STORAGE (MAXSIZE 1G MAX_SHARED_TEMP_SIZE 50M)
#DEFAULT TABLESPACE pdbCreateTest
#DATAFILE ‘D:\app\oracle12c\oradata\ORACLE12C\pdb2\pdb201.dbf’ SIZE 1M
#AUTOEXTEND ON
#PATH_PREFIX = ‘D:\app\oracle12c\oradata\ORACLE12C\pdb2’
#FILE_NAME_CONVERT = (‘D:\app\oracle12c\oradata\ORACLE12C\DATAFILE’, ‘D:\app\oracle12c\oradata\ORACLE12C\pdb2’); #这是映射目录当主目录无效时在此目录下进行创建
类似原cdb root。在CDB root容器中可以创建一个叫做Application root的容器,类似于CDB root,但是可以有多个,在CDB$ROOT中算是特殊的pdb,可在其内创建多个依赖于Application root的Application PDBs。
根容器仍然是root(CDB$ROOT),有application container充当子容器,而pdb则是application container的子容器。
注意,使用application container创建得pdb再使用数据文件时必须采用omf管理方式,否则当application container中得application pdbs在同步application是会发生报错ORA-01537
https://blog.csdn.net/joy0921/article/details/80132251 #需要R2发行版软件进一步学习
#application root的创建
alter system set db_create_file_dest='E:/12cdbfile/' #修改保存文件
CREATE PLUGGABLE DATABASE applicationCreateTest3 ADMIN USER as application container applicationCreateTest3 IDENTIFIED BY pdb3
STORAGE (MAXSIZE 1G MAX_SHARED_TEMP_SIZE 50M) DEFAULT TABLESPACE applicationCreateTest3
as application container
select pdb_id,pdb_name,status,application_root,application_pdb from dba_pdbs; #检查application root 同show pdbs但是会附加状态
alter pluggable database applicationCreateTest3 open;
#application pdbs得创建
#首先需要连接到对应得application container中
alter session set container=applicationCreateTest
show pdbs
#去掉as application container创建
careate pluggable database applicationCreateTest01 admin user applicationCreateTest01 identified by admin;
#application维护命令
#install an application
alter pluggable database application qdcon1_reg begin install '1.0'
#切换不同pdb数据库
alter session set container=pdb数据库实例名称#对于cdb默认是pdb+监听实例名方式进行切换
select name, decode(cdb, 'YES', 'Multitenant Option enabled', 'Regular 12c Database: ') "Multitenant Option" , open_mode, con_id from v$database;
#查看当前数据库是否为cdb,Multitenant Option显示为yes就是cdb
decode,两个元素启用decode(条件(被比较的列),值1,返回值1,值2,返回值2)
select con_id,dbid,guid,name,open_mode from v$pdbs;
#查看当前cdb中pdb详细信息,只能cdb中查会包括模板pdb查不会包括pdb模板PDB$SEED
show pdbs#会显示当前pdb容器名,如果是cdb会显示模板名PDB$SEED
#显示当前所有pdb容器的名称,如果是cdb或application container则会显示下辖所有的pdb,如果是pdb则仅显示pdb
select sys_context('userenv', 'con_name') "Container DB" from dual; #仅查看当前容器名称 等同于show con_name,处于cdb时也仅显示模板CDB$ROOT
create tablespace tabletest logging datafile 'E:\12cdbfile\pdbcreatetest_tableTest01.dbf' size 32m autoextend on nest 10m extent management local;
#启动pdb数据库
#1
alter pluggable database pdb名称 open;
select con_id, dbid, guid, name , open_mode from v$pdbs; #查看开启状态
#2
alter session set container=PDB名称; #建立连接,startup开启
startup
#关闭数据库
alter pluggable database pdb实例名 close
select con_id, dbid, guid, name , open_mode from v$pdbs;
show pdbs#检查当前pdb状态,如果是处于关闭则显示mounted