需求:導出指定 3000 張表的結構(ROWS=N)。直接在命令列寫 TABLES=(tab1,tab2,...tab3000) 會超過作業系統命令列長度限制(Windows 8191 字元、Linux ARG_MAX),導致匯出失敗。解決方案:使用參數檔模式。
d:\test.parUSERID=user_name/password@servername FILE=d:\data.dmp TABLES=(tab1,tab2,tab3,...,tab3000) ROWS=N # 可選:只導結構 # CONSTRAINTS=Y # GRANTS=Y # INDEXES=Y
關鍵優勢:參數檔無長度限制、可維護版本控管、支援註解、避免特殊字元轉義問題。
exp PARFILE=d:\test.par
# 列出匯出檔包含的表 imp USERID=user_name/password@servername FILE=d:\data.dmp SHOW=Y LOG=imp_show.log # 檢查日誌確認 3000 表結構均在
若表名有規律(如前綴 TMP_),可用 SQL 動態生成:
SET HEAD OFF PAGES 0 FEED OFF LINES 32000
SPOOL d:\tables_list.txt
SELECT 'TABLES=(' || LISTAGG(TABLE_NAME, ',') WITHIN GROUP (ORDER BY TABLE_NAME) || ')'
FROM USER_TABLES
WHERE TABLE_NAME LIKE 'TMP_%';
SPOOL OFF
# 再手工或腳本拼接成完整 .par 檔
10g+ 強烈建議改用 EXPDP:
# 建立目錄物件 CREATE DIRECTORY dpump_dir AS '/u01/dpump'; GRANT READ, WRITE ON DIRECTORY dpump_dir TO user_name; # 導出元資料(結構) expdp user_name/password@servername DIRECTORY=dpump_dir DUMPFILE=meta.dmp \ CONTENT=METADATA_ONLY TABLES=tab1,tab2,...,tab3000 \ LOGFILE=expdp_meta.log
EXPDP 優勢:支援並行、可壓縮、可網路模式遠端導出、元資料過濾靈活(INCLUDE/EXCLUDE)、不受命令列長度限制(可用參數檔 PARFILE=expdp.par)。
TABLES 清單完整性,導出後用 IMP SHOW=Y 或 IMPDP SQLFILE 驗證。