摘自:宏貝思
Oracle的exp/imp是許多用戶經(jīng)常使用的兩個工具.
它們常被用來做數(shù)據(jù)庫的邏輯備份,數(shù)據(jù)庫重組和數(shù)據(jù)轉(zhuǎn)移等工作.
先由exp把數(shù)據(jù)卸出到文件系統(tǒng),
產(chǎn)生一個.dmp文件,
然后必要時再由imp將數(shù)據(jù)裝入數(shù)據(jù)庫.
對于一般中小型數(shù)據(jù)庫來說,
全數(shù)據(jù)庫的exp所產(chǎn)生的dmp文件可能小于2GB,
但對稍大型的數(shù)據(jù)庫,
exp產(chǎn)生的數(shù)據(jù)動輒數(shù)十至上百個GB.
而現(xiàn)時多數(shù)操作系統(tǒng)為32位,
其文件系統(tǒng)允許的最大文件為2GB.
這樣顯然不能由文件系統(tǒng)存放exp產(chǎn)生的數(shù)據(jù).
這是問題之一.
另一個問題是隨著數(shù)據(jù)庫的不斷增大,
exp所需時間越來越長以致實際上很難實施.
本文針對以上兩個問題討論相應(yīng)對策.
?
我們以UNIX為例首先看看如何超越2GB限制.
這需利用UNIX的通用技術(shù),
如管道(named
pipe),
數(shù)據(jù)拷貝工具dd以及數(shù)據(jù)壓縮(compress).
下面分別討論這幾種技術(shù).
?管道?
是一種偽文件.
它存在于內(nèi)存中,
用于快速I/O操作.
管道的緩沖區(qū)采用先進先出機制,
即寫管道進程寫到緩沖區(qū)頭部而讀管道進程讀取管道尾部.
建立管道的命令為”mknod
filename
p”.
?dd?
允許我們從一個設(shè)備拷貝數(shù)據(jù)到另一個設(shè)備.
?compress?
為UNIX數(shù)據(jù)壓縮工具.
實施exp之前,
我們可先檢查所產(chǎn)生dmp文件的大小.
以下步驟既可實現(xiàn),
1.
????
生成管道:
??
$?
mknod?
/tmp/mypipe?
p
2.
????
exp結(jié)果輸出到該管道
$?
exp?
file=/tmp/mypipe?
<…其它exp選項>?
&
3.
????
讀取管道并把結(jié)果輸出到管道,
只為查看數(shù)據(jù)量:
$?
dd?
if=/tmp/mypipe?
of=/dev/null
結(jié)果返回exp
(.dmp)文件大小,
單位為塊(512
bytes).
現(xiàn)在我們可以著手討論具體方法,
1.
????
文件壓縮
2.
????
直接exp到磁帶
3.
????
綜合方法
首先看文件壓縮方法.
利用文件壓縮我們可盡量避免dmp文件大小超過2GB限制.
我們利用UNIX的管道技術(shù),
具體步驟如下,
1.
????
啟動compress進程,?
使之從管道讀取數(shù)據(jù)并輸出到磁盤文件.
$?
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到裸設(shè)備上的方法,
?????????????
$?
exp?
file=/dev/rdsk/c0t3d0s0?
volsize=4G?
?????????????
imp類似.
以上方法都可使我們避免2GB限制.
?
下面討論如何縮短exp索需時間的問題.
目前多數(shù)用戶會采用exp到磁帶的方法只因沒有足夠的剩余硬盤空間.
而整個exp過程所花時間的大部分都在寫磁帶上.
通過我們上面對UNIX工具的討論,
我們可以做到先exp到管道,
再將管道數(shù)據(jù)壓縮后輸出到磁帶上.
這樣寫磁帶的數(shù)據(jù)量可大大減少,
從而在相當程度上縮短寫磁帶時間.
另外從Oracle內(nèi)部角度講,
從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
以上步驟產(chǎn)生的可執(zhí)行文件expst
(exp
single
task)和impst與exp/imp用法完全相同.
使用它們比使用exp/imp可節(jié)省多至30%的時間.
但在使用它們時千萬要注意一點,
即一定要保證在使用expst/impst時不能有任何其他用戶在使用Oracle數(shù)據(jù)庫,
否則數(shù)據(jù)庫會產(chǎn)生不可預(yù)知的后果甚至毀壞.
|