需將特定 Schema 下所有表匯出為獨立 DMP 檔,供跨平台(Windows → Linux)匯入?手工寫 exp 命令既繁瑣易漏,維護更是噩夢。本文提供一套 SQL*Plus 動態生成批次腳本 方案:查詢 USER_TABLES,拼接每張表的 exp 命令,輸出 .bat/.sh,一鍵執行全搞定。
SPOOL 導向腳本檔(如 c:\export_tables.bat)。SELECT 拼接 exp userid=... tables=表名 file=表名.dmp triggers=n。SPOOL OFF,恢復 SQL*Plus 設定,EXIT。SET FEEDBACK OFF
SET PAGESIZE 0
SET HEADING OFF
SET VERIFY OFF
SET LINESIZE 200
SET TRIMSPOOL ON
SPOOL c:\export_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
TABLES=table_name:單表模式,每表一個 DMP,便於選擇性匯入、並行處理、故障隔離。TRIGGERS=N:不匯出觸發器,避免匯入端觸發器衝突(可視需求改 Y)。FILE=table_name.dmp:以表名命名,直觀好管。Linux 端對應改寫 .sh,使用 imp 參數 FROMUSER=src_schema TOUSER=tgt_schema 實現 Schema 重映射。預先建立目標 Tablespace、User、Quota,再執行匯入。
INDEXES=N、CONSTRAINTS=N、GRANTS=N 分離結構與資料,匯入後再建索引加速。DIRECT=Y(直接路徑匯出)提速。PARALLEL (Data Pump expdp/impdp) 實現真正並行,10g+ 環境強烈建議改用 Data Pump。sed 刪除再執行。/ as sysdba 或外部密碼存儲(Oracle Wallet)。「動態生成腳本」是 DBA 自動化運維的基礎技能。掌握 SPOOL + SELECT ... || ... 模式,不只匯出表,匯出統計資訊、產生 DDL、批量 Grant、巡檢腳本皆可一體適用。工欲善其事,必先利其器。