首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle EXP-00006 內部不一致錯誤解決方案:棄用 EXP/IMP 轉向 Data Pump 完整實戰

     編輯:Oracle 資料庫相關知識

在對新安裝的 Oracle 資料庫執行傳統 exp/imp 導入導出時,反覆遇到 EXP-00006: 內部不一致錯誤。經排查,此錯誤常因客戶端版本與資料庫版本不匹配、字元集轉換異常、或 32/64 位元混用導致。與其鑽研底層原因,不如直接升級至 Data Pump (expdp/impdp)——Oracle 10g 正式推出的服務端並行導入導出工具,效能、功能、穩定性全方位碾壓舊工具。

一、EXP/IMP 與 EXPDP/IMPDP 核心差異

維度EXP / IMPEXPDP / IMPDP
運行位置客戶端工具資料庫伺服器端進程
效能單執行緒、緩衝區拷貝、慢並行、直接路徑、非阻塞、快 10-100 倍
功能基礎導出導入並行、過濾、轉換、壓縮、加密、網路鏈路導入、可重啟作業
版本支援所有版本10g+(9i 需回退 EXP)
導出模式表/用戶/全庫/表空間同四種,並支援 Schema/Table/Tablespace/Full/Transportable

二、EXDP 導出完整步驟

1. 建立目錄物件

-- 必須在資料庫端建立,指向 OS 實際目錄
CREATE OR REPLACE DIRECTORY oracleDB AS 'D:\OracleDB';
-- 授權
GRANT READ, WRITE ON DIRECTORY oracleDB TO radpcs;

2. 執行導出

-- 全庫導出
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  -- 目標庫版本較低時指定

三、IMPDP 導入完整步驟

1. 以 SYSDBA 登入準備環境

sqlplus /nolog
CONN / AS SYSDBA

2. 建立表空間(關鍵:名稱、數量、大小需與來源一致)

-- 若不確定來源表空間,先建臨時表空間,按報錯提示補建
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;

3. 建立用戶並授權(最小權限原則,避免 GRANT DBA)

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;

4. 執行導入

-- 同用戶名導入
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_SCHEMASchema 重映射src:dst
TABLE_EXISTS_ACTION目標表存在時動作SKIP / APPEND / TRUNCATE / REPLACE
CONTENT導出內容類型ALL / DATA_ONLY / METADATA_ONLY
NETWORK_LINK遠端資料庫鏈路直接導入dblink_name
JOB_NAME作業名稱(可重啟)impdp_radpcs_20240115

五、避坑指南

  1. 目錄物件權限:OS 目錄需 Oracle 進程擁有者讀寫權限(Linux: chown oracle:oinstall /u01/dpdump)。
  2. 版本相容:導出時指定 VERSION 參數匹配目標庫,否則 IMPDP 會報 ORA-39001/39002。
  3. 表空間預建:IMPDP 不會自動建立表空間,缺失會直接報錯終止。
  4. 大物件處理:含 LOB 表建議 PARALLEL=1 或使用 TRANSPORTABLE=ALWAYS 配合 RMAN 影像拷貝。
  5. 日誌分析:導入報錯先看 LOGFILE,ORA-39112、ORA-02304 多為權限/表空間問題,ORA-39083 看具體 ORA- 碼。

EXP/IMP 已進入維護模式,Oracle 官方文檔明確建議:「For new applications, use Data Pump Export and Import.」 遇到 EXP-00006 等疑難雜症,直接切換 Data Pump 是性價比最高的決策。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved