一、CDB和PDB基本管理
基本概念:
Multitenant Environment:多租户环境
CDB(Container Database):数据库容器
PD(Pluggable Database):可插拔数据库
二、创建
2.1创建CDB
PDB包含在CDB中,所以,要创建PDB,必须先创建CDB。一台机器上可以有多个CDB。Oracle软件安装完成后,就可以创建CDB
启动DBCA (C:apporacleproduct12.1.0dbhome_1BINdbca.bat)
2.2创建PDB
C:apporacleproduct12.1.0dbhome_1BINdbca.bat
三、连接
3.1连接CDB
Sqlplus默认连接CDB
sqlplus sys/oracle as sysdba
3.2连接PDB
pdb可以通过在CDB中alter session container
alter session set container=pdb1
也可以直接通过tns方式(如下)登录
sqlplus sys/oracle@pdb1 as sysdba
其中tnsnames.ora添加
PDB1 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = pdb1) ) )
四、启动与关闭
4.1启动关闭CDB
SQL> show con_name CON_NAME ------------------------------ CDB$ROOT SQL> shutdown immediate 数据库已经关闭。 已经卸载数据库。 ORACLE 例程已经关闭。 SQL> startup ORACLE 例程已经启动。 Total System Global Area 5044088832 bytes Fixed Size 2413072 bytes Variable Size 1040190960 bytes Database Buffers 3992977408 bytes Redo Buffers 8507392 bytes 数据库装载完毕。 数据库已经打开。 SQL> select con_id,dbid,NAME,OPEN_MODE from v$pdbs; CON_ID DBID NAME OPEN_MODE ---------- ---------- ------------------------------ ---------- 2 4122484437 PDB$SEED READ ONLY 3 3387525155 PDB1 MOUNTED 4 3946119498 PDB2 MOUNTED SQL>
从上面的操作中可以看到数据库启动的时候所有的PDBs的状态为MOUNTED
4.2启动关闭PDB
pdb的管理可以在cdb中进行也可以在pdb中进行,如果是cdb中进行,需要PLUGGABLE关键字,如果是在pdb中直接和普通数据库一样
SQL> show con_name CON_NAME ------------------------------ CDB$ROOT SQL> select con_id,dbid,NAME,OPEN_MODE from v$pdbs; CON_ID DBID NAME OPEN_MODE ---------- ---------- ------------------------------ ---------- 2 4122484437 PDB$SEED READ ONLY 3 3387525155 PDB1 MOUNTED 4 3946119498 PDB2 MOUNTED SQL> alter pluggable database pdb1 open; 插接式数据库已变更。 SQL> select con_id,dbid,NAME,OPEN_MODE from v$pdbs; CON_ID DBID NAME OPEN_MODE ---------- ---------- ------------------------------ ---------- 2 4122484437 PDB$SEED READ ONLY 3 3387525155 PDB1 READ WRITE 4 3946119498 PDB2 MOUNTED SQL> alter pluggable database pdb2 open; 插接式数据库已变更。 SQL> select con_id,dbid,NAME,OPEN_MODE from v$pdbs; CON_ID DBID NAME OPEN_MODE ---------- ---------- ------------------------------ ---------- 2 4122484437 PDB$SEED READ ONLY 3 3387525155 PDB1 READ WRITE 4 3946119498 PDB2 READ WRITE SQL> alter pluggable database pdb1 close; 插接式数据库已变更。 SQL> select con_id,dbid,NAME,OPEN_MODE from v$pdbs; CON_ID DBID NAME OPEN_MODE ---------- ---------- ------------------------------ ---------- 2 4122484437 PDB$SEED READ ONLY 3 3387525155 PDB1 MOUNTED 4 3946119498 PDB2 READ WRITE SQL> alter pluggable database pdb2 close; 插接式数据库已变更。 SQL> select con_id,dbid,NAME,OPEN_MODE from v$pdbs; CON_ID DBID NAME OPEN_MODE ---------- ---------- ------------------------------ ---------- 2 4122484437 PDB$SEED READ ONLY 3 3387525155 PDB1 MOUNTED 4 3946119498 PDB2 MOUNTED SQL> alter pluggable database all open; 插接式数据库已变更。 SQL> alter pluggable database all close; 插接式数据库已变更。 SQL> alter session set container=pdb1 ; 会话已更改。 SQL> select con_id,dbid,NAME,OPEN_MODE from v$pdbs; CON_ID DBID NAME OPEN_MODE ---------- ---------- ------------------------------ ---------- 3 3387525155 PDB1 MOUNTED SQL> startup 插接式数据库已打开。 SQL> shutdown 插接式数据库已关闭。 SQL> select con_id,dbid,NAME,OPEN_MODE from v$pdbs; CON_ID DBID NAME OPEN_MODE ---------- ---------- ------------------------------ ---------- 3 3387525155 PDB1 MOUNTED SQL>
4.3自动启动所有PDB
从上面的操作中可以看到数据库启动的时候所有的PDBs的状态为MOUNTED,在实际应用可以考虑增加如下的触发器使所有的PDBs都处于打开状态。
create or replace trigger sys.after_startup after startup on database begin execute immediate 'alter pluggable database all open ' ; end after_startup ;
验证过程
SQL> create or replace trigger sys.after_startup after startup on database 2 begin 3 execute immediate 'alter pluggable database all open ' ; 4 end after_startup ; 5 / 触发器已创建 SQL> shutdown 数据库已经关闭。 已经卸载数据库。 ORACLE 例程已经关闭。 SQL> startup ORACLE 例程已经启动。 Total System Global Area 5044088832 bytes Fixed Size 2413072 bytes Variable Size 1040190960 bytes Database Buffers 3992977408 bytes Redo Buffers 8507392 bytes 数据库装载完毕。 数据库已经打开。 SQL> select con_id,dbid,NAME,OPEN_MODE from v$pdbs; CON_ID DBID NAME OPEN_MODE ---------- ---------- ------------------------------ ---------- 2 4122484437 PDB$SEED READ ONLY 3 3387525155 PDB1 READ WRITE 4 3946119498 PDB2 READ WRITE SQL>
四、常用SQL
--查看ORACLE 12C版本 select * from v$version; --查看容器名称和ID show con_name ; --查看状态 select name ,open_mode from v$pdbs ; --切换container alter session set container=pdb1
参考
ORACLE-BASE - Multitenant : Overview of Container Databases (CDB) and Pluggable Databases (PDB)
【ORACLE】ORACLE 12c PDB 基础 - 临渊羡鱼 - 博客频道 - CSDN.NET
Oracle 12C 多租户(Oracle Multitenant)--基本概念-zerocool88888888-ChinaUnix博客
ORACLE 12C PDB 维护基础介绍 – 提供专业ORACLE技术咨询和支持@Phone:13429648788 - 惜分飞
Oracle 12c CDB PDB - 丁应思 - 博客园
Oracle 12c入门第三讲: Oracle 12c基本体系结构 (3) pdb,cdb元数据关系 ...,数据智能网,Oracle 12C