32 位元作業系統單一檔案上限 2GB,導致大型資料庫 EXP 產生的 .dmp 檔無法落地。本文整理 Unix/Linux 環境下突破檔案大小限制的三大技術,並介紹 EXPST/IMPST 直接路徑模式加速 30% 的實作步驟。
mknod filename p 建立,實現進程間零拷貝傳遞。# 1. 建立管道
mknod /tmp/exp_pipe p
# 2. 背景啟動壓縮進程:讀管道 → 壓縮 → 寫磁碟
compress < /tmp/exp_pipe > /backup/export.dmp.Z &
# 3. 前景執行 EXP 寫入管道
exp file=/tmp/exp_pipe [其他參數]
IMP 時反向操作:zcat /backup/export.dmp.Z | imp file=/tmp/imp_pipe ...
exp file=/dev/rmt/0m volsize=4G
imp file=/dev/rmt/0m volsize=4G
VOLSIZE 參數指定單卷容量,支援多卷自動切換,繞過檔案系統限制。
exp file=/dev/rdsk/c0t3d0s0 volsize=4G
繞過檔案系統直接操作區塊裝置,效能最佳但管理較複雜。
Oracle 7.3+ 提供 DIRECT=Y 參數跳過 SQL 層直接讀取資料塊,但官方建議編譯專用執行檔 expst/impst (Single-Task 模式) 可再省 30% 時間。
cd $ORACLE_HOME/rdbms/lib
make -f ins_rdbms.mk expst # 產生 expst
make -f ins_rdbms.mk impst # 產生 impst
⚠️ 極度重要:使用 expst/impst 期間,絕對不能有任何其他使用者連線資料庫,否則會導致資料庫損壞。僅限獨佔維護窗口使用。
| 需求 | 推薦方案 | 注意事項 |
|---|---|---|
| 突破 2GB、最通用 | 管道 + gzip 壓縮 | 需足夠暫存空間給壓縮檔 |
| 備份到磁帶庫 | 直接寫磁帶 + VOLSIZE | 磁帶裝置需支援大卷 |
| 極致效能、獨佔窗口 | 裸裝置 + EXPST/IMPST | 嚴禁並發存取,風險最高 |
依據維護窗口、硬體資源、人員技能選擇最適組合,並務必在非生產環境完整演練後再上線。