本文整理 Oracle 資料遷移最常用的兩種方式:命令列 適合自動化腳本、無介面伺服器;PL/SQL Developer 圖形介面適合開發人員手工操作。兩者底層均呼叫 Data Pump (expdp/impdp) 或傳統 exp/imp。
# Data Pump 導出(推薦,10g+)
expdp system/manager@ORCL \
DIRECTORY=dpump_dir \
DUMPFILE=full_%U.dmp \
LOGFILE=exp_full.log \
FULL=Y \
PARALLEL=4 \
COMPRESSION=ALL
# 傳統 exp(舊版本相容)
exp system/manager@ORCL file=/backup/full.dmp full=y log=/backup/exp.log
# Data Pump 導入
impdp system/manager@ORCL \
DIRECTORY=dpump_dir \
DUMPFILE=full_%U.dmp \
LOGFILE=imp_full.log \
FULL=Y \
TABLE_EXISTS_ACTION=REPLACE \
REMAP_SCHEMA=old_user:new_user
# 傳統 imp
imp system/manager@ORCL file=/backup/full.dmp ignore=y log=/backup/imp.log
DATAPUMP_EXP_FULL_DATABASE 角色)。DPUMP_DIR)%U 自動分卷from_user:to_userold_ts:new_tsSEGMENT_ATTRIBUTES:N 移除存儲屬性-- 建立 Directory Object(伺服器端路徑)
CREATE OR REPLACE DIRECTORY dpump_dir AS '/u01/app/oracle/admin/ORCL/dpdump';
GRANT READ, WRITE ON DIRECTORY dpump_dir TO system;
-- 確認目錄存在且 oracle 使用者可讀寫
! ls -ld /u01/app/oracle/admin/ORCL/dpdump
| 功能 | expdp/impdp 參數 | PL/SQL Developer 選項 |
|---|---|---|
| 完整庫 | FULL=Y | Mode: Full |
| 指定 Schema | SCHEMAS=scott,hr | Mode: Schema + 勾選用戶 |
| 指定表 | TABLES=emp,dept | Mode: Table + 勾選表 |
| WHERE 過濾 | QUERY=emp:"WHERE deptno=10" | Filter → Where Clause |
| 平行度 | PARALLEL=4 | Parallel 欄位 |
| 壓縮 | COMPRESSION=ALL | Compression: ALL |
| Schema 重映射 | REMAP_SCHEMA=A:B | Remap Schema 欄位 |
| 表空間重映射 | REMAP_TABLESPACE=OLD:NEW | Remap Tablespace 欄位 |
| 表存在動作 | TABLE_EXISTS_ACTION=REPLACE | Table Exists Action: REPLACE |
tail -f exp_full.log 或 PL/SQL Developer 日誌頁籤。SELECT owner, object_type, COUNT(*) FROM dba_objects WHERE owner IN ('SCOTT','HR') GROUP BY owner, object_type;SELECT COUNT(*) FROM scott.emp;SELECT * FROM dba_objects WHERE status='INVALID';命令列適合 CI/CD 腳本、定時備份、大型遷移;PL/SQL Developer 適合 臨時導出、開發測試、視覺化配置。核心前置條件一致:Directory Object 權限、足夠磁碟空間、字元集一致、版本相容。建議團隊統一規範導出命名慣例(如 schema_YYYYMMDD_%U.dmp)並納入備份保留策略。