Oracle 管道 解決Exp/Imp大量數(shù)據(jù)處理問題
先由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所需時間越來越長以致實(shí)際上很難實(shí)施. 本文針對以上兩個問題討論相應(yīng)對策.
我們以UNIX為例首先看看怎么樣超越2GB限制. 這需利用UNIX的通用技術(shù), 如管道(named pipe), 數(shù)據(jù)拷貝工具dd以及數(shù)據(jù)壓縮(compress). 下面分別討論這幾種技術(shù).
·管道 是一種偽文件. 它存在于內(nèi)存中, 用于快速I/O操作. 管道的緩沖區(qū)采用先進(jìn)先出機(jī)制, 即寫管道進(jìn)程寫到緩沖區(qū)頭部而讀管道進(jìn)程讀取管道尾部. 建立管道的命令為”mknod filename p".
·dd 允許我們從一個設(shè)備拷貝數(shù)據(jù)到另一個設(shè)備.
·compress 為UNIX數(shù)據(jù)壓縮工具.
實(shí)施exp之前, 我們可先檢查所產(chǎn)生dmp文件的大小. 以下步驟既可實(shí)現(xiàn),
1. 生成管道:
$ mknod /tmp/mypipe p
2. exp結(jié)果輸出到該管道
$ exp file=/tmp/mypipe <...其它exp選項(xiàng)> &
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進(jìn)程, 使之從管道讀取數(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ù)量可大大減少, 從而在相當(dāng)程度上縮短寫磁帶時間. 另外從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%的時間. 但在使用它們時千萬要注意一點(diǎn), 即一定要保證在使用expst/impst時不能有任何其他用戶在使用Oracle數(shù)據(jù)庫, 否則數(shù)據(jù)庫會產(chǎn)生不可預(yù)知的后果甚至毀壞.
A:昨天在網(wǎng)上一個朋友問我,如何導(dǎo)入一個通過pipe導(dǎo)出并壓縮過的文件,我特意做了一次試驗(yàn):
Oracle的導(dǎo)出和導(dǎo)入不能直接引用標(biāo)準(zhǔn)的輸出和輸入,但通過unix pipe可是實(shí)現(xiàn),通過管道可以加快exp/imp速度
通過管道導(dǎo)出數(shù)據(jù)
1.通過mknod -p建立管道
mknod /home/exppipe p --在目錄/home下建立一個管道exppipe 注意參數(shù)p
2.通過exp和gzip導(dǎo)出數(shù)據(jù)到建立的管道并壓縮
exp test/test@orcl file=/home/exppipe &
gzip < /home/exppipe > exp.dmp.gz
3.導(dǎo)出成功完成之后刪除建立的管道
rm -rf /home/exppipe
根據(jù)我的測試,壓縮導(dǎo)出文件只是普通大小的十分之一
通過管道導(dǎo)入生成的文件
1.建立管道
mknod /home/exppipe p
2.導(dǎo)入生成的壓縮文件
imp system/passwd@orcl file=/home/exppipe fromuser=test touser=macro &
gunzip < exp.dmp.gz > /home/exppipe
這樣就導(dǎo)入成功,之后刪除管道
3.刪除管道
rm /home/exppipe
以上總結(jié),PiPe真不錯,能加快速度,同時還可以避免單個文件大于2G的限制。
- Oracle數(shù)據(jù)泵EXPDP/IMPDP導(dǎo)出導(dǎo)入功能詳細(xì)深入解析
- Oracle 11g數(shù)據(jù)庫使用expdp每周進(jìn)行數(shù)據(jù)備份并上傳到備份服務(wù)器
- 基于oracle expdp命令的使用詳解
- Oracle數(shù)據(jù)IMP和EXP命令用法詳解
- 使用imp和exp命令對Oracle數(shù)據(jù)庫進(jìn)行導(dǎo)入導(dǎo)出操作詳解
- oracle中exp,imp的使用詳解
- Oracle 數(shù)據(jù)庫導(dǎo)出(exp)導(dǎo)入(imp)說明
- Oracle expdp/impdp 及 exp/imp 命令詳解
相關(guān)文章
oracle數(shù)據(jù)庫創(chuàng)建備份與恢復(fù)腳本整理
oracle數(shù)據(jù)庫創(chuàng)建備份與恢復(fù)是oracle數(shù)據(jù)庫日常維護(hù)經(jīng)常用到的,下面與大家分享下常用腳本的整理,不會的朋友可以參考下哈2013-05-05sql – Oracle中匿名TABLE/VARRAY類型示例詳解
這篇文章主要給大家介紹了關(guān)于Oracle中匿名TABLE/VARRAY類型的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用oracle具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-10-10Oracle 解決ORA-00257 Archiver error 報錯問題解決
訂單投資交易環(huán)境進(jìn)行 impdb 數(shù)據(jù)泵恢復(fù)數(shù)據(jù),執(zhí)行到一半,報錯終止,歸檔策略保留時間較長,或歸檔頻率過高,導(dǎo)致數(shù)據(jù)庫掛載盤符空間不足,本文給大家分享Oracle 解決ORA-00257 Archiver error 報錯問題解決,感興趣的朋友一起看看吧2023-12-12Oracle還原恢復(fù)啟動時數(shù)據(jù)庫報ORA-00704、 ORA-00604,、ORA-00904的問題解決
這篇文章主要介紹了Oracle還原恢復(fù)啟動時數(shù)據(jù)庫報ORA-00704、 ORA-00604,、ORA-00904的問題解決,本文給大家講解的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-04-04win10系統(tǒng)安裝oracle11g時遇到INS-13001環(huán)境不滿足最低要求解決辦法
這篇文章主要介紹了win10系統(tǒng)安裝oracle11g時遇到INS-13001環(huán)境不滿足最低要求解決辦法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-09-09Oracle Number型數(shù)值存儲與轉(zhuǎn)換的實(shí)現(xiàn)詳解
本篇文章是對Oracle中Number型數(shù)值存儲與轉(zhuǎn)換的實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05