實務中資料遷移頻繁遇到大數據量、LOB 欄位、表空間不足等問題。本文補充三種匯入匯出工具選型指南與關鍵坑點解決方案。
| 方式 | 工具/指令 | 適用場景 | 優點 | 缺點 |
|---|---|---|---|---|
| 1. 傳統 exp/imp | exp/imp (Client 端) | 全庫/Schema/表級遷移、大數據量、跨版本匯入 | 功能完整、支援直接路徑、網路匯入 (NETWORK_LINK) | 11g+ 官方不再增強、需注意字元集一致性 |
| 2. Data Pump expdp/impdp | expdp/impdp (Server 端) | **首選方案**:大數據量、並行、壓縮、加密、網路匯入、可重啟 | 效能極佳 (並行)、功能最豐富、支援細粒度物件過濾 | 需目錄物件 (DIRECTORY)、Server 端檔案系統存取 |
| 3. SQL*Plus / SQL Developer | SET MARKUP CSV/HTML, INSERT 腳本, GUI 匯出 | 單表/少量資料、臨時測試、跨異構資料庫 | 無需額外工具、人工可控 | 極慢、不支援 LOB、易編碼錯誤 |
| 4. PL/SQL Developer / Toad | GUI 工具內建匯入匯出精靈 | 開發者日常小量資料搬移 | 視覺化、支援多種格式 (CSV/Excel/SQL) | 大數據量易 OOM、非自動化 |
選型原則:
• 遷移/備份/大數據 → **Data Pump (expdp/impdp)**
• 11g 前舊版本相容 → 傳統 exp/imp
• 幾百/千筆測試資料 → SQL Developer / PL/SQL Developer
| 工具 | LOB 支援 | 解決方案 |
|---|---|---|
| 傳統 exp/imp | ✅ 支援 | 直接使用 |
| Data Pump expdp/impdp | ✅ 完整支援 (含 SecureFiles) | 直接使用 |
| SQL*Plus / SQL Developer 匯出 INSERT | ❌ **不支援** (截斷/報錯) | **不可用** |
| PL/SQL Developer 匯出 SQL | ❌ 多數版本不支援 | **不可用** |
跨資料庫遷移含 LOB 表的正確姿勢:
CREATE DATABASE LINK dblink_tgt CONNECT TO user IDENTIFIED BY pwd USING 'tgt_tns';CREATE TABLE ... AS SELECT 或 INSERT ... SELECT 透過 DB Link 直接搬移:CREATE TABLE target_schema.lob_table AS
SELECT * FROM source_schema.lob_table@dblink_tgt;
-- 或分批次
INSERT /*+ APPEND */ INTO target_schema.lob_table
SELECT * FROM source_schema.lob_table@dblink_tgt;
COMMIT;
此法繞過檔案中轉,效能最佳且完整保留 LOB。
ORA-01659: unable to allocate MINEXTENTS beyond 93 in tablespace USERS
原因:表空間已達最大尺寸限制 (32G/檔案,或自動擴展觸及 MAXSIZE),無法再分配Extent。
解決方案:為表空間新增資料檔 (Datafile) 並啟用自動擴展無上限:
ALTER TABLESPACE users
ADD DATAFILE '/u01/app/oracle/oradata/orcl/users02.dbf'
SIZE 500M
AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED;
AUTOEXTEND ON MAXSIZE UNLIMITED,並監控實際使用率設定告警 (如 80%)。-- 並行度 (核心加速參數)
expdp system/pwd schemas=SCOTT directory=DP_DIR dumpfile=scott_%U.dmp parallel=4
-- 壓縮 (減少磁碟/網路 IO)
expdp ... compression=ALL -- METADATA_ONLY / DATA_ONLY / ALL / NONE
-- 加密 (安全傳輸)
expdp ... encryption=ALL encryption_password=StrongPwd#123
-- 網路匯入 (無需中轉 dump 檔,直接源→目標)
impdp system/pwd@target_db schemas=SCOTT network_link=SRC_DB_LINK directory=DP_DIR
-- 重映射 (跨表空間/Schema/用戶遷移)
impdp ... remap_schema=SRC:TGT remap_tablespace=USERS:USERS_TGT