利用 Unix/Linux 命名管道 搭配背景壓縮/解壓,實現 exp 輸出 → 壓縮 → 管道 → 解壓 → imp 輸入的流水線作業,全程無完整 .dmp 落地。
# 建立命名管道
mknod /tmp/exp_pipe p
# 背景壓縮:管道讀取 → 壓縮 → 寫入 .dmp.Z
compress < /tmp/exp_pipe > /backup/exp_$(date +%Y%m%d).dmp.Z &
# exp 寫入管道(阻塞直到 imp 讀取)
exp userid=system/manager@ORCL file=/tmp/exp_pipe log=exp.log \
full=y consistent=y buffer=10485760
# 清理
rm /tmp/exp_pipe
# 建立命名管道
mknod /tmp/imp_pipe p
# 背景解壓:讀取 .dmp.Z → 解壓 → 寫入管道
uncompress < /backup/exp_20240115.dmp.Z > /tmp/imp_pipe &
# imp 從管道讀取
imp userid=system/manager@ORCL file=/tmp/imp_pipe \
fromuser=SCOTT touser=SCOTT_NEW \
buffer=3072000 grants=n indexes=n ignore=y constraints=n log=imp.log
# 清理
rm /tmp/imp_pipe
| 參數 | 建議值 | 說明 |
|---|---|---|
BUFFER | 10M~50M | exp/imp 內部緩衝區,越大越少管道阻塞 |
RECORDLENGTH | 65535 | 最大記錄長度,減少系統呼叫 |
COMMIT | Y (導入) | 定期提交避免回滾段暴增 |
INDEXES=N | 導入時 | 先導數據後建索引,速度更快且可並行 |
CONSTRAINTS=N | 導入時 | 同理,後續啟用 |