首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

Oracle 命名管道實現 exp/imp 零磁碟落地導入導出

     編輯:關於SqlServer

適用場景

  • 磁碟空間不足,無法產生完整 .dmp 檔案
  • 追求最高導入導出速度(避免磁碟 I/O 瓶頸)
  • 大型資料庫遷移、跨平台移植

核心原理

利用 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

關鍵參數調優

Windows 平台替代方案

Windows 無原生命名管道支援,可用:

  • exp ... file=- 輸出到 stdout,配合 gzip 管道(需 Cygwin/Git Bash)
  • 或使用 Data Pump (expdp/impdp) 的 NETWORK_LINK 直接跨實例傳輸(11g+ 推薦)

注意事項

  • 管道讀寫雙端必須同時啟動,否則掛起
  • 背景任務用 &,主流程等待 exp/imp 結束
  • 導出端建議加 CONSISTENT=Y 確保一致性快照
  • 導入前預建表空間/用戶,避免空間不足中斷
  • 大型庫建議並行:expdp/impdp PARALLEL=4 + 多管道/多檔案
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
參數建議值說明
BUFFER10M~50Mexp/imp 內部緩衝區,越大越少管道阻塞
RECORDLENGTH65535最大記錄長度,減少系統呼叫
COMMITY (導入)定期提交避免回滾段暴增
INDEXES=N導入時先導數據後建索引,速度更快且可並行
CONSTRAINTS=N導入時同理,後續啟用