轉帖|其它|編輯:郝浩|2009-04-01 13:40:34.000|閱讀 577 次
概述:Oracle的exp/imp是許多用戶經常使用的兩個工具。它們常被用來做數據庫的邏輯備份,數據庫重組和數據轉移等工作。先由exp把數據卸出到文件系統,產生一個.dmp文件,然后必要時再由imp將數據裝入數據庫。對稍大型的數據庫,exp產生的數據動輒數十至上百個GB。這樣顯然不能由文件系統存放exp產生的數據。這是問題之一。另一個問題是隨著數據庫的不斷增大,exp所需時間越來越長以致實際上很難實施。本文針對以上兩個問題討論相應對策。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
Oracle的exp/imp是許多用戶經常使用的兩個工具。它們常被用來做數據庫的邏輯備份,數據庫重組和數據轉移等工作。先由exp把數據卸出到文件系統,產生一個.dmp文件,然后必要時再由imp將數據裝入數據庫。對于一般中小型數據庫來說,全數據庫的exp所產生的dmp文件可能小于2GB,但對稍大型的數據庫,exp產生的數據動輒數十至上百個GB。而現時多數操作系統為32位,其文件系統允許的最大文件為2GB。這樣顯然不能由文件系統存放exp產生的數據。這是問題之一。另一個問題是隨著數據庫的不斷增大,exp所需時間越來越長以致實際上很難實施。本文針對以上兩個問題討論相應對策。
我們以Unix為例首先看看如何超越2GB限制。這需利用UNIX的通用技術,如管道(named pipe),數據拷貝工具dd以及數據壓縮(compress)。下面分別討論這幾種技術。
實施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數據庫,否則數據庫會產生不可預知的后果甚至毀壞。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:網頁教學網