Oracle 管道 解決Exp/Imp大量資料處理問題

來源:互聯網
上載者:User

先由exp把資料卸出到檔案系統, 產生一個.dmp檔案, 然後必要時再由imp將資料裝入資料庫. 對於一般中小型資料庫來說, 全資料庫的exp所產生的dmp檔案可能小於2GB, 但對稍大型的資料庫, exp產生的資料動輒數十至上百個GB. 而現時多數作業系統為32位, 其檔案系統允許的最大檔案為2GB. 這樣顯然不能由檔案系統存放exp產生的資料. 這是問題之一. 另一個問題是隨著資料庫的不斷增大, exp所需時間越來越長以致實際上很難實施. 本文針對以上兩個問題討論相應對策.

我們以UNIX為例首先看看怎麼樣超越2GB限制. 這需利用UNIX的通用技術, 如管道(named pipe), 資料拷貝工具dd以及資料壓縮(compress). 下面分別討論這幾種技術.

·管道 是一種偽檔案. 它存在於記憶體中, 用於快速I/O操作. 管道的緩衝區採用先進先出機制, 即寫管道進程寫到緩衝區頭部而讀管道進程讀取管道尾部. 建立管道的命令為”mknod filename p".
·dd 允許我們從一個裝置拷貝資料到另一個裝置.
·compress 為UNIX資料壓縮公用程式.
實施exp之前, 我們可先檢查所產生dmp檔案的大小. 以下步驟既可實現,
1. 產生管道:
$ mknod /tmp/mypipe p
2. exp結果輸出到該管道
$ exp file=/tmp/mypipe <...其它exp選項> &
3. 讀取管道並把結果輸出到管道, 只為查看資料量:
$ dd if=/tmp/mypipe of=/dev/null
結果返回exp (.dmp)檔案大小, 單位為塊(512 bytes).
現在我們可以著手討論具體方法,
1. 檔案壓縮
2. 直接exp到磁帶
3. 綜合方法
首先看檔案壓縮方法. 利用檔案壓縮我們可盡量避免dmp檔案大小超過2GB限制. 我們利用UNIX的管道技術, 具體步驟如下,
1. 啟動compress進程, 使之從管道讀取資料並輸出到磁碟檔案.
$ mknod /tmp/exp_pipe p
$ compress < /tmp/exp_pipe > export.dmp.Z &
2. exp到管道.
$ exp file=/tmp/exp_pipe ... &
imp時情況類似.
再看看直接exp到磁帶上的方法.
$ exp file=/dev/rmt/0m volsize=4G
$ imp file=/dev/rmt/0m volsize=4G
最後看看exp到裸裝置上的方法,
$ exp file=/dev/rdsk/c0t3d0s0 volsize=4G
imp類似.以上方法都可使我們避免2GB限制.
下面討論怎麼樣縮短exp索需時間的問題. 目前多數使用者會採用exp到磁帶的方法只因沒有足夠的剩餘硬碟空間. 而整個exp過程所花時間的大部分都在寫磁帶上. 通過我們上面對UNIX工具的討論, 我們可以做到先exp到管道, 再將管道資料壓縮後輸出到磁帶上. 這樣寫磁帶的資料量可大大減少, 從而在相當程度上縮短寫磁帶時間. 另外從Oracle內部角度講, 從7.3版開始, Oracle允許使用者做direct path export, 即跳過Oracle
$ make -f $ORACLE_HOME/rdbms/lib/oracle.mk expst
$ make -f $ORACLE_HOME/rdbms/lib/oracle.mk impst
以上步驟產生的可執行檔expst (exp single task)和impst與exp/imp用法完全相同. 使用它們比使用exp/imp可節省多至30%的時間. 但在使用它們時千萬要注意一點, 即一定要保證在使用expst/impst時不能有任何其他使用者在使用Oracle資料庫, 否則資料庫會產生不可預知的後果甚至毀壞.
A:昨天在網上一個朋友問我,如何匯入一個通過pipe匯出並壓縮過的檔案,我特意做了一次實驗:
  Oracle的匯出和匯入不能直接引用標準的輸出和輸入,但通過unix pipe可是實現,通過管道可以加快exp/imp速度
  通過管道匯出資料
  1.通過mknod -p建立管道
  mknod /home/exppipe p --在目錄/home下建立一個管道exppipe 注意參數p
  2.通過exp和gzip匯出資料到建立的管道並壓縮
  exp test/test@orcl file=/home/exppipe &
  gzip < /home/exppipe > exp.dmp.gz
  3.匯出成功完成之後刪除建立的管道
  rm -rf /home/exppipe
  根據我的測試,壓縮匯出檔案只是普通大小的十分之一
  通過管道匯入產生的檔案
  1.建立管道
mknod /home/exppipe p
  2.匯入產生的壓縮檔
  imp system/passwd@orcl file=/home/exppipe fromuser=test touser=macro &
  gunzip < exp.dmp.gz > /home/exppipe
  這樣就匯入成功,之後刪除管道
  3.刪除管道
 
  rm /home/exppipe
  以上總結,PiPe真不錯,能加快速度,同時還可以避免單個檔案大於2G的限制。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.