當需匯出特定 Schema 下所有表時,逐一撰寫 EXP 命令極其繁瑣。利用 SQL*Plus 的 SPOOL 功能動態生成批次檔,可一鍵完成全表匯出,大幅提升運維效率。
USER_TABLES 產生每張表的 EXP 命令列.bat 檔,編輯移除首尾雜訊後執行SET FEEDBACK OFF
SET PAGESIZE 0
SET HEADING OFF
SET VERIFY OFF
SET LINESIZE 200
SET TRIMSPOOL ON
SPOOL c:\export_all_tables.bat
SELECT 'EXP username/password@yourdb ' ||
'TABLES=' || table_name || ' ' ||
'FILE=' || table_name || '.dmp ' ||
'TRIGGERS=N'
FROM user_tables;
SPOOL OFF
SET FEEDBACK ON
SET PAGESIZE 9999
SET HEADING ON
SET VERIFY ON
EXIT
EXP scott/tiger@ORCL TABLES=EMP FILE=EMP.dmp TRIGGERS=N
EXP scott/tiger@ORCL TABLES=DEPT FILE=DEPT.dmp TRIGGERS=N
EXP scott/tiger@ORCL TABLES=BONUS FILE=BONUS.dmp TRIGGERS=N
...
TRIGGERS=N:不匯出觸發器,避免匯入時衝突;若需保留請改 YFILE=表名.dmp:每表獨立檔案,便於單表恢復與平行處理LOG=表名.log 記錄各表匯出狀態EXPDP 命令,支援並行度 (PARALLEL=4)、壓縮 (COMPRESSION=ALL)、網路模式直傳IF ERRORLEVEL 1 GOTO FAIL 記錄失敗表名| 場景 | 適用性 | 備註 |
|---|---|---|
| 單 Schema 百表級匯出 | ✓ 最佳 | 秒級生成腳本 |
| 跨 Schema/全庫匯出 | △ 需修改 | 改查 DBA_TABLES + OWNER 欄位 |
| TB 級大表 | ✗ 不建議 | 必須用 Data Pump 並行+壓縮 |
| 需一致性備份 | ✗ 不支援 | EXP 無一致性讀選項,改用 EXPDP FLASHBACK_TIME |
此技巧為傳統 EXP 時代的經典自動化手法,現代環境請優先考慮 Data Pump,但理解其動態 SQL 生成邏輯對掌握資料庫元資料驅動運維仍有參考價值。