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

解決 Oracle Exp/Imp 大量數據處理的 2GB 限制與效能瓶頸

     編輯:Oracle 資料庫相關知識

Oracle 的 exp/imp 是資料庫管理員常用的邏輯備份、重組與遷移工具。流程是先用 exp 將資料導出為 .dmp 檔案,再由 imp 導入目標資料庫。對中小型資料庫,完整導出檔案通常小於 2GB;但大型資料庫動輒數十至上百 GB,而 32 位元作業系統的檔案系統單一檔案上限為 2GB,導致無法直接存放導出檔。此外,隨著資料量增長,導出耗時過長,實際操作難度大增。本文針對這兩大痛點提供解決方案。

突破 2GB 檔案限制

以 UNIX 環境為例,利用管道、dd、compress 等原生工具即可繞過限制。

核心技術介紹

  • 命名管道:存在於記憶體的偽檔案,採 FIFO 機制,適合高速 I/O。建立指令:mknod filename p。
  • dd:裝置間資料複製工具,可讀取管道輸出至 /dev/null 以計算資料量。
  • compress:UNIX 內建壓縮工具,能即時壓縮資料流。

預估導出大小

$ mknod /tmp/mypipe p
$ exp file=/tmp/mypipe ... &
$ dd if=/tmp/mypipe of=/dev/null

回傳的區塊數(512 bytes/區塊)即為導出檔大小。

三種實作方案

1. 檔案壓縮法

利用管道串接 compress,導出資料即時壓縮寫入磁碟:

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

導入時反向操作即可。

2. 直接導出至磁帶

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

3. 裸裝置導出

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

以上方法均可繞過 2GB 檔案系統限制。

大幅縮短導出時間

大多數用戶因磁碟空間不足而選擇導出至磁帶,但大部分時間消耗在寫入磁帶上。結合管道與壓縮,可先導出至管道,壓縮後再寫入磁帶,大幅減少磁帶 I/O 量,從而縮短備份窗口。

此外,Oracle 7.3 起支援 Direct Path Export,跳過 SQL 層直接讀取資料塊。需重新編譯專用執行檔:

$ make -f $ORACLE_HOME/rdbms/lib/oracle.mk expst
$ make -f $ORACLE_HOME/rdbms/lib/oracle.mk impst

產生的 expst/impst 用法與原指令相同,可節省 30% 以上時間。警告:使用時必須確保無其他使用者連線資料庫,否則可能導致資料損毀。

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