oracle cdb、pdb參考

CDB、PDB概念介紹

CDB與PDB是Oracle 12C引入的新特性,在ORACLE 12C數據庫引入的多租用戶環境(Multitenant Environment)中,允許一個數據庫容器(CDB)承載多個可插拔數據庫(PDB)。CDB全稱爲Container Database,中文翻譯爲數據庫容器,PDB全稱爲Pluggable Database,即可插拔數據庫。在ORACLE 12C之前,實例與數據庫是一對一或多對一關係(RAC):即一個實例只能與一個數據庫相關聯,數據庫可以被多個實例所加載。而實例與數據庫不可能是一對多的關係。當進入ORACLE 12C後,實例與數據庫可以是一對多的關係。下面爲CDB與PDB的關係圖:

clip_image002

一個CDB容器數據庫通常包含CDB$ROOT、PDB$SEED組件:
a. CDB$ROOT存儲着ORACLE提供的元數據和Common User,Common User 是指在每個容器中都存在的用戶,查看:

show con_name;

clip_image004
b.PDB$SEED是創建PDB數據庫的模板。一個CDB中有且只能有一個Seed,查看:

show pdbs

clip_image006
c.PDB可插拔數據庫,CDB中可以有一個或多個PDB,查看:

show pdbs

clip_image008

創建CDB容器數據庫

dbca在創建數據庫的時候,可以選擇是創建容器數據庫還是傳統的數據庫,如下圖選擇爲創建CDB:

clip_image010

創建pdb:

a.命令create pluggable database創建:

create pluggable database app1 admin user pdba identified by pdba123;

clip_image012

指定路徑創建pdb:

mkdir -p /u01/app/oracle/oradata/prod/data

create pluggable database app1 admin user pdba identified by pdba123 FILE_NAME_CONVERT=('/u01/app/oracle/oradata/prod/pdbseed','/u01/app/oracle/oradata/prod/data');

clip_image014

b.dbca創建pdb:

clip_image016

clip_image018

clip_image020

clip_image022

clip_image024

clip_image026

clip_image028

clip_image030

clip_image032

確認:

clip_image034

啓動pdb:

alter pluggable database APP1 open;

clip_image036

c. 克隆pdb數據庫:

alter system set db_create_file_dest='/u01/app/oracle/oradata/prod/';

clip_image038

create pluggable database app3 from app2;

clip_image040

刪除pdb

先關閉對應的pdb,然後刪除pdb:

alter pluggable database app3 close immediate;

drop pluggable database app3 including datafiles;

clip_image042

只是刪除庫,不刪除文件:

drop pluggable database app3 keep datafiles;

clip_image044

alter pluggable database app3 unplug into '/home/oracle/app3.xml';

clip_image046

drop pluggable database app3 keep datafiles;

show pdbs

clip_image048

create pluggable database app5 using '/home/oracle/app3.xml' nocopy;

clip_image050

切換容器

切換到app1 pdb下面:

alter session set container=app1;

clip_image052
切換到CDB容器

alter session set container=CDB$ROOT;   

clip_image054

查看當前屬於哪個容器:

show con_name

clip_image056

select sys_context('USERENV','CON_NAME') from dual;

clip_image058

啓動、關閉pdb

a. 指定pdb進行關閉和啓動:

alter pluggable database app1 open;

clip_image060

startup pluggable database app1;

clip_image062

啓動到只讀模式,新建的pdb必須啓動一次後纔可以設置爲read only,否則報

ERROR at line 1:

ORA-65085: cannot open pluggable database in read-only mode:

可以從dba_pdbs視圖進行確認,對於NEW的pdb,需要先open:

SQL> col pdb_name for a10

SQL> select pdb_name,status from dba_pdbs;

PDB_NAME STATUS

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

APP1 NORMAL

PDB$SEED NORMAL

APP2 NORMAL

APP3 NORMAL

APP4 NEW

新建一個app3 數據庫,然後執行啓動到read only:

create pluggable database app3 from app2;

clip_image064

alter pluggable database app3 open read only;

clip_image066

alter pluggable database app3 open read only;

show pdbs;

clip_image068

alter pluggable database app1 close immediate;

clip_image070

b.切換到對應的pdb進行關閉啓動:
alter session set container= app1; 

startup;

clip_image072

alter session set container= app1;

shutdown immediate;

clip_image074

c.集中操作pdb:

開啓所有pdb:

alter pluggable database all open; 

clip_image076

關閉所有pdb:

alter pluggable database all close immediate;

clip_image078

pdb自動啓動:

oracle 12.1和oracle12.2版本,默認情況下PDB不會隨着CDB啓動而啓動,oracle 12.1只能通過觸發器實現:

CREATE TRIGGER open_all_pdbs

AFTER STARTUP ON DATABASE

BEGIN

EXECUTE IMMEDIATE 'ALTER PLUGGABLE DATABASE ALL OPEN';

END ;

/

刪除觸發器:

drop trigger open_all_pdbs;

oracle12.2之後可以使用save state來保存pdb數據庫的當前狀態。

show pdbs;

alter pluggable database app1 save state;

clip_image080

startup force;

show pdbs;

clip_image082

查看state狀態:

col con_name for a10

select con_name, state from dba_pdb_saved_states;

clip_image084

刪除discard state狀態:

alter pluggable database app1 discard state;

clip_image086

查看pdb信息

查看所有pdb:
show pdbs

clip_image088

col name for a20

select con_id,dbid,name,open_mode from v$pdbs;

clip_image090

select name,cause ,type,message,status from pdb_plug_in_violations;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章