Oracle exp/imp 常用於邏輯備份、資料庫重組與資料遷移。32 位元作業系統單一檔案限制 2 GB,大型資料庫匯出檔(.dmp)動輒數十上百 GB,無法直接存放。且隨資料量增長,匯出耗時過長難以在維護窗口完成。
存在於記憶體的偽檔案,支援 FIFO 高速 I/O。建立:mknod /tmp/mypipe p。
裝置間資料複製工具,可讀取管道輸出至其他目標。
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
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 期間,資料庫必須處於單一使用者模式(無其他連線),否則可能導致資料庫損毀或不可預期後果。
expst/impst 獲取最大效能提升。