首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle Named Pipe 破解 2GB 限制:Exp/Imp 大數據遷移、壓縮、磁帶、裸設備實戰方案

     編輯:Oracle 資料庫相關知識

痛點背景

  • 32 位文件系統單文件 2GB 上限,導致 exp 生成的 .dmp 無法落盤。
  • 大數據庫全量導出耗時極長,寫磁帶/磁盤成為瓶頸。

核心技術棧

技術角色關鍵命令
Named Pipe (FIFO)內存緩衝通道,繞過文件系統限制mknod /tmp/exp_pipe p
compress / gzip流式壓縮,減少 I/O 體積 80%~90%compress < pipe > file.Z
dd塊級拷貝/計量dd if=pipe of=/dev/null 統計大小
expst/impstSingle-task 版 exp/imp,繞過 TNS,提速 30%make -f $ORACLE_HOME/rdbms/lib/oracle.mk expst

方案一:管道 + 壓縮落盤(最通用)


# 1. 建立管道
mknod /tmp/exp_pipe p

# 2. 啟動壓縮進程(後台讀管道寫文件)
compress < /tmp/exp_pipe > /backup/exp.dmp.Z &

# 3. exp 寫管道(前台)
exp userid=system/oracle file=/tmp/exp_pipe FULL=Y DIRECT=Y

# 4. 導入端對稱操作
mknod /tmp/imp_pipe p
zcat /backup/exp.dmp.Z > /tmp/imp_pipe &   # 解壓寫管道
imp userid=system/oracle file=/tmp/imp_pipe FULL=Y

# 5. 清理
rm /tmp/exp_pipe /tmp/imp_pipe

實測:100GB 導出壓縮後約 10GB,速度提升 2 倍(CPU 換 I/O)。

方案二:直寫磁帶設備(繞過文件系統)


# 磁帶設備通常支援 >2GB
exp userid=system/oracle file=/dev/rmt/0m VOLSIZE=4G
imp userid=system/oracle file=/dev/rmt/0m VOLSIZE=4G

VOLSIZE 指定單卷容量,自動換卷提示。

方案三:直寫裸設備


exp userid=system/oracle file=/dev/rdsk/c0t3d0s0 VOLSIZE=4G

繞過文件系統層,直接寫入分區,適合極大庫遷移。

方案四:expst/impst 單任務模式(極致提速)


# 編譯單任務版本
cd $ORACLE_HOME/rdbms/lib
make -f oracle.mk expst
make -f oracle.mk impst

# 使用(必須確保無其他會話連線數據庫!)
expst userid=system/oracle file=/tmp/exp_pipe FULL=Y

⚠️ 風險警告:expst/impst 繞過鎖管理,**嚴禁**在有業務連線的庫上使用,否則會導致數據字典不一致甚至庫損壞。僅限離線維護窗口。

效能優化組合拳

  1. DIRECT=Y:直徑路徑導出,繞過 SQL 層,減少 CPU。
  2. RECORDLENGTH=65535:增大 I/O 塊大小(需配合 OS 參數)。
  3. BUFFER=10485760:增大內存緩衝(單位位元組)。
  4. 並行導出:10g+ 支援 PARALLEL=4(Data Pump),傳統 exp 需手動分表空間/用戶多進程並行。
  5. 網路直傳:跨機器遷移時,exp ... | ssh target "cat > /backup/exp.dmp" 落地目標端,省去中間存儲。

避坑指南

坑點現象規避
管道讀寫速度不匹配exp 掛起或 compress 過早 EOF確保壓縮進程先啟動(& 後台),exp 最後啟動
磁帶換卷失敗導出中斷預先準備足夠磁帶,設置 VOLSIZE 略小於物理容量
expst 數據不一致約束違反、索引損壞嚴格離線使用,導出前 SHUTDOWN IMMEDIATE; STARTUP RESTRICT
字符集不匹配導入亂碼導出導入端設置相同 NLS_LANG,或用 Data Pump REMAP_SCHEMA

現代替代:Data Pump (expdp/impdp)

10g+ 強烈建議改用 Data Pump:

  • 支援並行(PARALLEL=8)、壓縮(COMPRESSION=ALL)、網路模式(NETWORK_LINK)、可重啟作業。
  • 無 2GB 限制(內部分片寫入多文件)。
  • 元數據與數據分離,支援 CONTENT=METADATA_ONLY 等精細控制。

Named Pipe 方案雖經典,但在 64 位 OS + Data Pump 普及的今天,僅作為舊版本遷移、極端受限環境的備選方案保留。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved