oracle 18c 18.3 学习之一 cdb pdb介绍

os: centos 7.4
db: oracle 18c(18.3)

最近一直在玩 postgresql,补一下 oracle 的知识。

cdb,pdb 是 oracle 12c引入的概念,一直觉得oracle的单库多用户架构简单高效,可能是oracle自己觉得不好,实现了多库多用户。但同时又不象其他数据库的天生就是多库多用户,自己感觉引入了一定的复杂度。

CDB:指的就是容器。
PDB:指的就是可插拔的意思。

CDB的组成部分。
1、ROOT:root,又名CDB$ROOT,用来存储Oracle提供的 metadata和 common user 的。
2、SEED:seed,又名PDB$SEED,是用来创建新的PDB的模版。但是,你不能在seed 里添加或者修改对象,一个CDB只能有一个SEED,状态为 READ ONLY。
3、PDB:PDB展现给用户和应用的形象就像是一个没有CDB的普通数据库一样。例 如,一个PDB可以包括支持一个特定应用程序所需的所有数据和代码。PDB 完全向后兼容Oracle12c之前版本的所有数据库。
以上的每个组成部分都被称为容器(container),ROOT、SEED、PDB都是容器。而这些容器在CDB中都有他们自己唯一的容器ID和名称。我们可以很轻松的向CDB中插入一个PDB或者从CDB中拔出一个PDB。

cdb 查看

使用 sqlplus 默认连接的就是cdb

$ sqlplus / as sysdba;

SQL> show con_id

CON_ID
------------------------------
1
SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT

pdb 查看

通过 sqlplus 连接 cdb后,可以操作pdb

$ sqlplus / as sysdba;

SQL> show pdbs

    CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
	 2 PDB$SEED			  READ ONLY  NO
	 3 PDBPEIYB			  MOUNTED
SQL> select con_id, dbid, guid, name , open_mode from v$pdbs;

    CON_ID	 DBID GUID			       NAME														    OPEN_MODE
---------- ---------- -------------------------------- -------------------------------------------------------------------------------------------------------------------------------- ----------
	 2 2569652277 7B3DCA17AEF945C6E0536538A8C0CD92 PDB$SEED 													    READ ONLY
	 3 1382952877 7B3DF131086D5813E0536538A8C08359 PDBPEIYB 													    MOUNTED

pdb 打开

在CDB 启动之后,所有的 PDB 是自动启动到mount状态,而不是 open。
所以我们还需要手工去open它,当然,也可以通过在CDB中配置触发器来自动open。

create or replace trigger open_all_pdbs
after startup on database
begin
   execute immediate 'alter pluggable database all open';
end;

不过最好不要用触发器

$ sqlplus / as sysdba;

SQL> show pdbs;

    CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
	 2 PDB$SEED			  READ ONLY  NO
	 3 PDBPEIYB			  MOUNTED
SQL> alter pluggable database pdbpeiyb open;

Pluggable database altered.

SQL> show pdbs;

    CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
	 2 PDB$SEED			  READ ONLY  NO
	 3 PDBPEIYB			  READ WRITE NO
SQL> 

pdb 切换

使用 alter session set container=pdbpeiyb 进行切换到指定pdb。
如果再次切换到cdb,可以执行 alter session set container=CDB$ROOT;

$ sqlplus / as sysdba;

SQL> show pdbs;

    CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
	 2 PDB$SEED			  READ ONLY  NO
	 3 PDBPEIYB			  READ WRITE NO
SQL> alter session set container=pdbpeiyb;

Session altered.

SQL> show con_id

CON_ID
------------------------------
3
SQL> show con_name

CON_NAME
------------------------------
PDBPEIYB
SQL> show pdbs;

    CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
	 3 PDBPEIYB			  READ WRITE NO

切换后,其余的pdb就看不到了,然后所有的操作就是在指定的pdb进行了。

pdb 操作

切换到指定的pdb后,可以修改该pdb的一些状态。

ALTER PLUGGABLE DATABASE OPEN READ WRITE [RESTRICTED] [FORCE];
  
ALTER PLUGGABLE DATABASE OPEN READ ONLY [RESTRICTED] [FORCE];
  
ALTER PLUGGABLE DATABASE OPEN UPGRADE [RESTRICTED];
  
ALTER PLUGGABLE DATABASE CLOSE [IMMEDIATE];

如果在cdb中操作pdb,就需要在 ALTER PLUGGABLE DATABASE 加pdb的名字。
如果要同时操作多个pdb,就用逗号隔开。比如 = pdb1, pdb2, pdb3
如果要操作所有的pdb,就用 all 关键字。比如 = all
如果要排除某个pdb,就用 except 关键字。比如 = all except pdb3
这个应该很好理解。

ALTER PLUGGABLE DATABASE  OPEN READ WRITE [RESTRICTED][FORCE];
  
ALTER PLUGGABLE DATABASE  OPEN READ ONLY [RESTRICTED] [FORCE];
  
ALTER PLUGGABLE DATABASE  OPEN UPGRADE [RESTRICTED];
  
ALTER PLUGGABLE DATABASE  CLOSE [IMMEDIATE];

关闭cdb时,毫无疑问,所有的pdb也一起关闭了。

你可能感兴趣的:(#,oracle,basic,knowledge)