通過克隆本地現有 pdb 創建新的 pdb
目錄結構
一、創建說明
二、創建選項
三、新pdb創建語句
四、執行創建過程
五、指定NO DATA子句,克隆時不復制數據。
一、創建說明
1、執行創建的用戶必須具有CREATE PLUGGABLE DATABASE 系統權限
2、源pdb不能被關閉
3、如果cdb不是 local undo 模式, 則源pdb必須啓動到read-only 狀態
4、如果cdb非歸檔, 則源pdb必須啓動到read-only 狀態
二、創建選項
1、如果STORAGE UNLIMITED被設定,或者沒有存儲選項被設定,則pdb沒有存儲限制。常用設置如下:
STORAGE (MAXSIZE 2G) STORAGE (MAXSIZE UNLIMITED) storage(MAX_AUDIT_SIZE xxx) storage(MAX_DIAG_SIZE)
2、通過 DEFAULT TABLESPACE子句 指定pdb的默認表空間
3、通過FILE_NAME_CONVERT 指定pdb被創建時,數據文件的存放位置
用法1 FILE_NAME_CONVERT = ('/oracle/dbs/', '/oracle/pdb5/')
用法2 'string1' , 'string2' , 'string3' , 'string4' , ... string2路徑替換string1路徑,string4路徑替換string3路徑
4、如果FILE_NAME_CONVERT和CREATE_FILE_DEST同時被指定,則FILE_NAME_CONVERT指定pdb被創建時文件的位置,CREATE_FILE_DEST指定pdb創建後,新建數據文件的路徑。
5、指定NO DATA子句,克隆時不復制數據。
三、新pdb創建語句
1、登陸源pdb查詢數據文件路徑
SQL> alter session set container=mypdb1;
Session altered.
SQL> select name from v$datafile;
NAME
------------------------------------------------------------
/opt/oracle/oradata/mycdb/mypdb1/system01.dbf
/opt/oracle/oradata/mycdb/mypdb1/sysaux01.dbf
/opt/oracle/oradata/mycdb/mypdb1/undotbs01.dbf
/opt/oracle/oradata/mycdb/mypdb1/users01.dbf
2、待創建pdb mypdb3的創建語句
create pluggable database mypdb3 from mypdb1 FILE_NAME_CONVERT = ('/opt/oracle/oradata/mycdb/mypdb1/','/opt/oracle/oradata/mycdb/mypdb3/');
四、執行創建過程
1、切換到根容器
SQL> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 MYPDB1 READ WRITE NO
4 MYPDB2 READ WRITE NO
5 YOUPDB MOUNTED
SQL> show con_name;
CON_NAME
------------------------------
CDB$ROOT
2、執行創建語句
SQL> create pluggable database mypdb3 from mypdb1 FILE_NAME_CONVERT = ('/opt/oracle/oradata/mycdb/mypdb1/','/opt/oracle/oradata/mycdb/mypdb3/');
Pluggable database created.
3、啓動新創建的mypdb3
SQL> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 MYPDB1 READ WRITE NO
4 MYPDB2 READ WRITE NO
5 YOUPDB MOUNTED
6 MYPDB3 MOUNTED
SQL> alter pluggable database mypdb3 open;
Pluggable database altered.
SQL> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 MYPDB1 READ WRITE NO
4 MYPDB2 READ WRITE NO
5 YOUPDB MOUNTED
6 MYPDB3 READ WRITE NO
SQL> alter session set container=mypdb3;
Session altered.
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/opt/oracle/oradata/mycdb/mypdb3/system01.dbf
/opt/oracle/oradata/mycdb/mypdb3/sysaux01.dbf
/opt/oracle/oradata/mycdb/mypdb3/undotbs01.dbf
/opt/oracle/oradata/mycdb/mypdb3/users01.dbf
SQL> select name from v$tempfile;
NAME
--------------------------------------------------------------------------------
/opt/oracle/oradata/mycdb/mypdb3/temp01.dbf
五、指定NO DATA子句,克隆時不復制數據。
1、注意事項
需要把源pdb打開的read only 狀態,否則報如下錯誤
[oracle@cydbcs ~]$ oerr ora 65359;
65359, 00000, "unable to create pluggable database with no data"
// *Cause: An attempt was made to clone a pluggable database that was opened
// in read/write mode.
// *Action: Retry the clone operation after the source pluggable database is
// in read-only mode.
2、pdb源庫數據查詢
SQL> alter session set container=democdb2;
Session altered.
SQL> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
48 DEMOCDB2 READ ONLY NO
SQL> select count(*) from bfpub10.bfsystem;
COUNT(*)
----------
3
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/oradata/DEVCDB/DEMOCDB2/system01.dbf
/oradata/DEVCDB/DEMOCDB2/sysaux01.dbf
/oradata/DEVCDB/DEMOCDB2/undotbs01.dbf
/oradata/DEVCDB/DEMOCDB2/BF_DATA.dbf
3、創建
SQL> create pluggable database demodb from democdb2 FILE_NAME_CONVERT = ('/oradata/DEVCDB/DEMOCDB2/','/oradata/DEVCDB/demodb/') NO DATA;
Pluggable database created.
4、驗證
SQL> alter pluggable database demodb open;
Pluggable database altered.
SQL> alter session set container=demodb;
Session altered.
SQL> select count(*) from bfpub10.bfsystem;
COUNT(*)
----------
0