一、EXP 常用參數實戰速查
1. 核心模式參數
| 參數 | 說明 | 典型組合 |
| FULL=Y | 導出整個資料庫 | ROWS=N 導出純結構;COMPRESS=Y 合併區段 |
| OWNER= | 導出指定模式 (用戶) | 多模式用逗號分隔 |
| TABLES= | 導出指定表 | 支援 schema.table 格式 |
2. 效能優化黃金組合
exp system/manager file=exp.dmp log=exp.log \
BUFFER=100000000 \
FEEDBACK=10000 \
COMPRESS=Y \
DIRECT=Y \
TABLES=large_table1,large_table2
BUFFER:增加讀取緩衝 (位元組),大表建議 50-100MB
FEEDBACK:每 N 行顯示進度點,監控長時間作業
COMPRESS=Y:合併區段至 INITIAL 大小,消除碎片 (導入時生效)
DIRECT=Y:直接路徑導出,繞過 SQL 層,大幅提速 (但有限制,見下)
3. DIRECT=Y 限制場景 (不可用時)
- 表含 BFILE/LOB/REF/巢狀表/VARRAY/物化視圖/XMLType 欄位
- 表定義於 CLUSTER 中
- 啟用精細存取控制 (VPD/FGA) 的表
- 需使用 QUERY 參數過濾資料時
4. SYSDBA 身分執行 (9i 必備、傳輸表空間必備)
# Unix/Linux 處理引號轉義
exp \'sys/password AS SYSDBA\' file=ts.dmp tables=tbs_tables TRANSPORT_TABLESPACE=Y
# Windows 雙引號嵌套
exp "sys/password AS SYSDBA" file=ts.dmp tables=tbs_tables TRANSPORT_TABLESPACE=Y
5. QUERY 參數條件導出
# Unix: 單引號包雙引號,特殊字元轉義
exp user/pwd file=subset.dmp tables=emp query=\'WHERE deptno=20 AND hiredate>SYSDATE-30\'
# Windows: 三層引號
exp user/pwd file=subset.dmp tables=emp query="\"WHERE deptno=20 AND hiredate>SYSDATE-30\""
二、IMP 常用參數實戰速查
| 參數 | 用途 | 實戰技巧 |
| FROMUSER/TOUSER | 跨模式導入 | 重構模式名稱、測試環境刷新 |
| IGNORE=Y | 忽略表已存在錯誤 | 預建表調整儲存參數後導入資料,避免遷移時區段屬性不符 |
| INDEXES=N | 不導入索引 | 大量導入時先導資料,後用腳本並行建索引,大幅縮短窗口 |
| GRANTS=Y | 導入授權 | 通常保持 Y,除非目標環境權限模型不同 |
| COMMIT=Y | 定期提交 | 大表導入避免回滾段爆滿,建議配合 BUFFER 使用 |
三、Oracle 9i EXP 新增參數亮點
| 參數 | 功能 | 適用場景 |
| OBJECT_CONSISTENT=Y | 物件級一致性 (SET TRANSACTION READ ONLY) | 無法使用 CONSISTENT=Y 完整一致性時的折中 |
| FLASHBACK_SCN / FLASHBACK_TIME | 閃回查詢一致性點 | 基於 SCN/時間點的一致性導出,不鎖定物件 |
| RESUMABLE 相關 | 支援可恢復空間分配 | 空間不足時暫停而非失敗,修正後自動續傳 |
| TTS_FULL_CHECK=Y | 傳輸表空間依賴性完整檢查 | 避免傳輸後發現外鍵/約束跨表空間引用 |
| TABLESPACES= | 表空間模式導出 | **最實用新增**:按表空間導出,適合 TBS 級遷移/備份 |
| TEMPLATE= | iAS 部署模板 | 特定中間件場景 |
四、跨版本 EXP/IMP 遷移方案
9i 之前通用方案 (低版本導入高版本無問題,高版本導入低版本按下列步驟)
- 高版本資料庫執行低版本
catexp.sql (通常在 $ORACLE_HOME/rdbms/admin)
- 使用 低版本 EXP 導出高版本資料
- 使用 低版本 IMP 導入低版本資料庫
- 高版本資料庫重新執行高版本
catexp.sql 恢復原狀
9i 已知 Bug (Bug 2261722,10g 修復)
直接使用低版本 EXP/IMP 會報錯:
EXP-00008: Oracle error %lu encountered
ORA-00904: invalid column name
9i 變通解法:重建 EXU81RLS 視圖
CREATE OR REPLACE VIEW exu81rls
(objown, objnam, policy, polown, polsch, polfun, stmts, chkopt, enabled, spolicy)
AS
SELECT u.name, o.name, r.pname, r.pfschma, r.ppname, r.pfname,
DECODE(BITAND(r.stmt_type,1),0,'','SELECT,') ||
DECODE(BITAND(r.stmt_type,2),0,'','INSERT,') ||
DECODE(BITAND(r.stmt_type,4),0,'','UPDATE,') ||
DECODE(BITAND(r.stmt_type,8),0,'','DELETE,'),
r.check_opt, r.enable_flag,
DECODE(BITAND(r.stmt_type,16),0,0,1)
FROM user$ u, obj$ o, rls$ r
WHERE u.user# = o.owner#
AND r.obj# = o.obj#
AND (UID = 0 OR UID = o.owner# OR EXISTS (
SELECT 1 FROM session_roles WHERE role='SELECT_CATALOG_ROLE'
));
/
GRANT SELECT ON sys.exu81rls TO PUBLIC;
/
-- 執行後即可使用低版本 EXP/IMP 正常運作
五、平行導入效能調優
- 建索引階段 不建議超過 5 個並行 IMP (索引建立極度消耗 CPU/記憶體)
- 大表導入策略:
INDEXES=N 先導資料 → 多會話並行 CREATE INDEX 腳本 → INDEXES=Y 只導索引 (或手動建立)
- 記憶體允許下,純資料導入可開 8-16 並行會話
- 使用
PARALLEL 子句加速索引建立:CREATE INDEX ... PARALLEL 8
六、傳輸表空間 (TTS) 進階參考
- Metalink Note 77523.1: TTS 設置與使用範例
- Metalink Note 100698.1: 結合 TTS 實現表空間時間點恢復
- 核心前提:源/目標平台相容、表空間自包含 (無跨表空間引用)、唯讀模式複製資料檔
七、遺留版本 (8.0.x / 7.x) 提示
- 8.0.x 僅缺 QUERY 參數,變通:建立中間表 → 導出中間表
- 7.x 使用者極少,參考 Metalink Note 61949.1
- 所有版本通用:
EXP HELP=Y / IMP HELP=Y 獲取完整參數說明
結語
EXP/IMP 雖為傳統工具,但在邏輯遷移、跨版本升級、開發測試資料刷新、表級恢復等場景仍不可替代。掌握 DIRECT=Y、COMPRESS=Y、QUERY、IGNORE=Y、INDEXES=N 等核心參數組合,配合 Data Pump (10g+) 現代化替代,構建完整的邏輯備份遷移工具箱,是每位 DBA 的必修課。