2025年6月27日 星期五

3. unplug and plug PDB

PDB 可以使用 unplug 與 plug 的方式將其移轉至另一個 CDB當中。

A diagram of a computer data storage

AI-generated content may be incorrect.

  • Unplug PDB

PDB 可以 unplug 至 xml file 或者是 archive file ,差別在於 xml file 只有紀錄此 PDB的 metadata ,而 archive file 則包含 datafile , 類似 dbca 的 template 那樣。


使用 unplug into 的命令將 PDB unplug , unplug 為 xml file 使用副檔名 .xml ; unplug 為 archive file 使用副檔名為 .pdb :

Unplug PDB into xml file :

SQL> alter pluggable database rpdb close immediate;

SQL> alter pluggable database rpdb unplug into '/tmp/rpdb.xml';


Unplug PDB into archive file :

SQL> alter pluggable database rpdb2 close immediate;

SQL> alter pluggable database rpdb2 unplug into '/tmp/rpdb2.pdb';


unplug 出來的 xml file 是一個文字檔,裡面紀錄的此 PDB 的 tablespace 資訊與 datafile 位置 ,而 archive file 為 image 檔,不能使用文字模式編輯:

A screen shot of a computer

AI-generated content may be incorrect.

PDB unplug 之後,其資訊仍然會存在原 CDB 上,必須使用 drop pluggable database 的指令進行刪除:

A black screen with red text

AI-generated content may be incorrect.


刪除已 unplug 的 PDB :

SQL> drop pluggable database rpdb keep datafiles; 🡨 unplug 為 xml file 時 datafile 必須保留

SQL> drop pluggable database rpdb2 including datafiles;


這邊要注意的是, xml file 只是一個路徑的參照,原本的 datafile 必須保留直到 plug 到 CDB 之後才可以刪除,而 archive file 則已包含 datafile ,此時原本的 datafile 就可以刪除 。


  • Plug PDB

Plug PDB 至另一個 CDB 前必須先進行相容性檢查,於新的 CDB 使用 DBMS_PDB.CHECK_PLUG_COMPATIBILITY 進行檢查:

SQL> SET SERVEROUTPUT ON

     DECLARE

      compatible BOOLEAN := FALSE;

     BEGIN   

       compatible := DBMS_PDB.CHECK_PLUG_COMPATIBILITY(

         pdb_descr_file => '/tmp/rpdb.xml', 🡨 檢查 .xml 或 .pdb

         pdb_name       => 'rpdb');

       if compatible then

         DBMS_OUTPUT.PUT_LINE('Is pluggable compatible? YES');

       else 

         DBMS_OUTPUT.PUT_LINE('Is pluggable compatible? NO');

       end if;

     END;


如果檢查沒有通過,則需修正 pdb_plug_in_violations 中的錯誤才能進行 plug :

SQL> select time,name,cause,type,status,message,action from pdb_plug_in_violations;


使用 xml file 進行 plug :

使用原本 PDB的 datafile 

SQL> create pluggable database rpdb using '/tmp/rpdb.xml' nocopy;


複製原本 PDB 的 datafile 至新的位置

SQL> create pluggable database rpdb using '/tmp/rpdb.xml' file_name_convert=('/u01/oradata/SQLMGMT/rpdb','/u01/oradata/ORAPDB/rpdb');


SQL> alter pluggable database rpdb open;


使用 archive file 進行 plug :

SQL> create pluggable database rpdb2 using '/tmp/rpdb2.pdb' file_name_convert=('/tmp','/u01/oradata/ORAPDB/rpdb2');

SQL> alter pluggable database rpdb2 open;


file_name_convert 的設定為 archive file 所在的目錄位置轉換至實際要建立 datafile 的位置。



沒有留言:

張貼留言