【BUILD_ORACLE】使用Oracle資料泵線上不停機克隆/遷移PDB

Attack_on_Jager發表於2022-11-18

實驗環境

搭建平臺:VMware Workstation

OS:OL 7.5

DB:Oracle 12.2.0.1


具體步驟

1. 為了避免使用者對資料的更改導致克隆後的目標庫資料與源庫有出入, 可先把表空間改為read only模式,語法如下:

SQL> alter tablespace xxx read only;

 

2.使用資料泵匯出

expdp <dumpuser>/<password>@<pdb名稱> full=Y dumpfile=exp_full.dmp directory=<dump_dir> transportable=always logfile=export_full.log

注:

(1)使用expdp的全庫匯出的使用者需要有DATAPUMP_EXP_FULL_DATABASE的許可權

(2)Directory的查詢方法:select * from dba_diretories; Directory的建立方法:create directory xxx as ‘<絕對路徑>’;

(3)TRANSPORTABLE=ALWAYS搭配FULL=Y時,會把庫的表空間分兩類:可傳輸表空間與不可傳輸表空間(SYSTEM,SYSAUX這種系統表空間),會匯出包含在傳輸表空間物件的元資訊,以及對不可傳輸表空間上物件使用direct path以及external table方式匯出元資訊與資料

 

3.把源庫的表空間改回read write狀態

SQL> alter tablespace xxx read write;

 

4.在目標庫上用資料泵匯入

Impdp <dumpuser>/<password>@<pdb名稱> full=Y dumpfile=exp_full.dmp directory=<dump_dir> transport_datafiles='/u01/app/oracle/oradata/dbname/test01.dbf','/u01/app/oracle/oradata/dbname/test02.dbf' logfile=import_full.log

注:

(1)需要把dmp檔案傳輸到目標庫,並建立目錄物件directory

(2)使用impdp的全庫匯出的使用者需要有DATAPUMP_EXP_FULL_DATABASE的許可權

(3)需要使用transport_datafiles引數,例如這裡匯入的是test表空間的dbf檔案, 如果dbf檔案過多,則需要寫入到parfile裡面,否則會導致命令列過長無法正常執行:

Impdp <dumpuser>/<password>@<pdb名稱> dumpfile=exp_full.dmp directory=<dump_dir> full=Y parfile=<文字檔案絕對路徑> logfile= import_full.log

Parfile檔案裡的內容:

transport_datafiles='/u01/app/oracle/oradata/dbname/test01.dbf','/u01/app/oracle/oradata/dbname/test02.dbf'


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69992972/viewspace-2924028/,如需轉載,請註明出處,否則將追究法律責任。

相關文章