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

解決 Oracle Exp/Imp 大量資料處理:突破 2GB 限制與加速匯出

     編輯:Oracle 資料庫基礎

問題背景

Oracle exp/imp 常用於邏輯備份、資料庫重組與資料遷移。32 位元作業系統單一檔案限制 2 GB,大型資料庫匯出檔(.dmp)動輒數十上百 GB,無法直接存放。且隨資料量增長,匯出耗時過長難以在維護窗口完成。

突破 2GB 限制的三大技術

1. 具名管道

存在於記憶體的偽檔案,支援 FIFO 高速 I/O。建立:mknod /tmp/mypipe p。

2. dd 指令

裝置間資料複製工具,可讀取管道輸出至其他目標。

3. compress 壓縮

UNIX 原生壓縮工具,配合管道即時壓縮輸出。

預估匯出大小

mknod /tmp/mypipe p
exp file=/tmp/mypipe ... &
dd if=/tmp/mypipe of=/dev/null
# 輸出區塊數(512 bytes/區塊),換算檔案大小

三種實作方案

方案一:管道 + 即時壓縮

# 匯出
mknod /tmp/exp_pipe p
compress < /tmp/exp_pipe > export.dmp.Z &
exp file=/tmp/exp_pipe ... &

# 匯入
mknod /tmp/imp_pipe p
zcat export.dmp.Z > /tmp/imp_pipe &
imp file=/tmp/imp_pipe ... &

方案二:直接匯出至磁帶裝置

exp file=/dev/rmt/0m volsize=4G
imp file=/dev/rmt/0m volsize=4G

方案三:匯出至裸裝置

exp file=/dev/rdsk/c0t3d0s0 volsize=4G
imp file=/dev/rdsk/c0t3d0s0 volsize=4G

加速匯出:Direct Path Export (expst/impst)

Oracle 7.3+ 支援 Direct Path Export,繞過 SQL 評估層直接讀取資料塊,可節省 30% 時間。

# 編譯專用執行檔
make -f $ORACLE_HOME/rdbms/lib/ins_rdbms.mk expst
make -f $ORACLE_HOME/rdbms/lib/ins_rdbms.mk impst

# 使用方式與 exp/imp 相同
expst file=... ...
impst file=... ...

⚠️ 重要限制

使用 expst/impst 期間,資料庫必須處於單一使用者模式(無其他連線),否則可能導致資料庫損毀或不可預期後果。

綜合建議

  • 磁碟空間足夠:管道 + 壓縮寫入檔案系統。
  • 磁碟空間不足:管道 + 壓縮寫入磁帶/裸裝置,大幅減少 I/O 量與時間。
  • 極大資料庫且可接受停機:使用 expst/impst 獲取最大效能提升。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved