在對新安裝的 Oracle 資料庫執行傳統 exp/imp 導入導出時,反覆遇到 EXP-00006: 內部不一致錯誤。經排查,此錯誤常因客戶端版本與資料庫版本不匹配、字元集轉換異常、或 32/64 位元混用導致。與其鑽研底層原因,不如直接升級至 Data Pump (expdp/impdp)——Oracle 10g 正式推出的服務端並行導入導出工具,效能、功能、穩定性全方位碾壓舊工具。
| 維度 | EXP / IMP | EXPDP / IMPDP |
|---|---|---|
| 運行位置 | 客戶端工具 | 資料庫伺服器端進程 |
| 效能 | 單執行緒、緩衝區拷貝、慢 | 並行、直接路徑、非阻塞、快 10-100 倍 |
| 功能 | 基礎導出導入 | 並行、過濾、轉換、壓縮、加密、網路鏈路導入、可重啟作業 |
| 版本支援 | 所有版本 | 10g+(9i 需回退 EXP) |
| 導出模式 | 表/用戶/全庫/表空間 | 同四種,並支援 Schema/Table/Tablespace/Full/Transportable |
-- 必須在資料庫端建立,指向 OS 實際目錄
CREATE OR REPLACE DIRECTORY oracleDB AS 'D:\OracleDB';
-- 授權
GRANT READ, WRITE ON DIRECTORY oracleDB TO radpcs;
-- 全庫導出
expdp radpcs/ictradpcs@rdpcs \
DIRECTORY=oracleDB \
DUMPFILE=20150226.dmp \
LOGFILE=20150226.log \
FULL=Y \
PARALLEL=4 \
COMPRESSION=ALL
-- 僅導出特定 Schema
expdp radpcs/ictradpcs@rdpcs \
DIRECTORY=oracleDB \
DUMPFILE=schema_radpcs.dmp \
LOGFILE=schema_radpcs.log \
SCHEMAS=radpcs \
VERSION=12.2 -- 目標庫版本較低時指定
sqlplus /nolog
CONN / AS SYSDBA
-- 若不確定來源表空間,先建臨時表空間,按報錯提示補建
CREATE TABLESPACE RADPCS_DATA
LOGGING
DATAFILE 'D:\OracleDB\radpcs_DATA.DBF' SIZE 200M REUSE
AUTOEXTEND ON NEXT 10M MAXSIZE 16383M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1024K;
CREATE TABLESPACE RADPCS_INDX
LOGGING
DATAFILE 'D:\OracleDB\radpcs_INDX.DBF' SIZE 200M REUSE
AUTOEXTEND ON NEXT 10M MAXSIZE 16383M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1024K;
CREATE USER radpcs IDENTIFIED BY ictradpcs
DEFAULT TABLESPACE radpcs_data
QUOTA UNLIMITED ON radpcs_data
QUOTA UNLIMITED ON radpcs_indx;
-- 僅授予必要權限
GRANT CREATE SESSION, CREATE TABLE, CREATE SEQUENCE, CREATE VIEW,
CREATE PROCEDURE, CREATE TRIGGER, CREATE SYNONYM,
UNLIMITED TABLESPACE TO radpcs;
-- Data Pump 專用權限
GRANT READ, WRITE ON DIRECTORY oracleDB TO radpcs;
GRANT DATAPUMP_EXP_FULL_DATABASE, DATAPUMP_IMP_FULL_DATABASE TO radpcs;
-- 同用戶名導入
impdp radpcs/ictradpcs@rdpcs \
DIRECTORY=oracleDB \
DUMPFILE=20150226.dmp \
LOGFILE=20150226_imp.log \
TABLE_EXISTS_ACTION=SKIP
-- 不同用戶名映射導入
impdp radpcs/ictradpcs@rdpcs \
DIRECTORY=oracleDB \
DUMPFILE=20150226.dmp \
LOGFILE=20150226_imp.log \
REMAP_SCHEMA=source_user:radpcs \
REMAP_TABLESPACE=source_ts:radpcs_data \
TABLE_EXISTS_ACTION=REPLACE
| 參數 | 說明 | 典型值 |
|---|---|---|
| PARALLEL | 並行度 | CPU 核心數 × 2 |
| COMPRESSION | 壓縮算法 | ALL / METADATA_ONLY / NONE |
| ENCRYPTION | 加密模式 | ALL / DATA_ONLY / ENCRYPTED_COLUMNS_ONLY / NONE |
| ENCRYPTION_PASSWORD | 加密密碼 | 自定義強密碼 |
| VERSION | 導出元數據相容版本 | 12.2 / 11.2 / LATEST / COMPATIBLE |
| FLASHBACK_TIME | 一致性時間點 | SYSTIMESTAMP / TO_TIMESTAMP(...) |
| QUERY | 表級 Where 過濾 | 'WHERE created > SYSDATE-30' |
| INCLUDE / EXCLUDE | 物件類型包含/排除 | INCLUDE=TABLE:"LIKE 'ORD%'" |
| REMAP_TABLESPACE | 表空間重映射 | old_ts:new_ts |
| REMAP_SCHEMA | Schema 重映射 | src:dst |
| TABLE_EXISTS_ACTION | 目標表存在時動作 | SKIP / APPEND / TRUNCATE / REPLACE |
| CONTENT | 導出內容類型 | ALL / DATA_ONLY / METADATA_ONLY |
| NETWORK_LINK | 遠端資料庫鏈路直接導入 | dblink_name |
| JOB_NAME | 作業名稱(可重啟) | impdp_radpcs_20240115 |
chown oracle:oinstall /u01/dpdump)。VERSION 參數匹配目標庫,否則 IMPDP 會報 ORA-39001/39002。IMPDP 不會自動建立表空間,缺失會直接報錯終止。PARALLEL=1 或使用 TRANSPORTABLE=ALWAYS 配合 RMAN 影像拷貝。LOGFILE,ORA-39112、ORA-02304 多為權限/表空間問題,ORA-39083 看具體 ORA- 碼。EXP/IMP 已進入維護模式,Oracle 官方文檔明確建議:「For new applications, use Data Pump Export and Import.」 遇到 EXP-00006 等疑難雜症,直接切換 Data Pump 是性價比最高的決策。