Oracle解決exp導出文件過大的問題


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

管道

管道 是一種偽文件. 它存在於內存中, 用於快速I/O操作. 管道的緩沖區采用先進先出機制, 即寫管道進程寫到緩沖區頭部而讀管道進程讀取管道尾部. 建立管道的命令為”mknod filename p".

gzip命令

名稱

        gzip, gunzip, zcat -壓縮或解壓文件

總覽

        gzip [ -acdfhlLnNrtvV19 ] [-S suffix] [ name ...  ]

        gunzip [ -acfhlLnNrtvV ] [-S suffix] [ name ...  ]

        zcat [ -fhLV ] [ name ...  ]

描述

Gzip使用lempel - ziv編碼減少指定文件的大小(LZ77)。在可能的情況下,每個文件都被一個擴展名替換.gz,同時保持相同的所有權模式,訪問和修改時間。(默認擴展名對於VMS為-gz,對於MSDOS,OS /2 FAT,Windows NT FAT和Atari為Z。) 如果沒有指定文件,或者文件名是“-”,則標准輸入被壓縮到標准輸出。Gzip只會嘗試壓縮常規文件。特別是,它將忽略符號鏈接。

如果壓縮文件名對其文件系統太長,則gzip將其截斷。Gzip試圖只截斷長度超過3個字符文件名稱的部分。(部分是由點來分隔的。) 如果名稱僅由小部分組成,最長的部分被截斷。例如,如果文件名限制在14個字符,那么gzip.msdos.exe被壓縮為gzi.msd.exe.gz。在沒有限制文件名長度的系統上,名稱不會被截斷。

。。。。。。

選項

-f --force

強制壓縮或解壓,即使該文件有多個鏈接或相應的文件已經存在,或者將壓縮的數據從終端讀取或寫入到終端。如果輸入數據沒有gzip識別的格式,並且如果選項--stdout也被給出,那么將輸入數據復制到標准輸出:讓zcat表現為cat。

數據流重定向

標准輸入(stdin):代碼為0,使用<或<<;

標准輸出(stdout):代碼為1,使用>或>>;

標准錯誤輸出(stderr):代碼為2,使用2>或2>>

解決方案

1.建立命名管道

mknod mypipe p

 

2.結合exp和gzip將導出的dmp文件直接壓縮

exp $SWITCH_DBUSER/$SWITCH_DBPASS file=$HOME/file/expdp/mypipe tables=card_bin &

gzip <$HOME/file/expdp/mypipe >$HOME/file/expdp/card_bin.gz

 

如此即解決了直接導出dmp文件過大的弊端

 

如何通過備份的數據進行恢復呢

3.解壓縮gz文件

gunzip -c card_bin.gz > card_bin.dmp

4.imp導入dmp文件

imp $SWITCH_DBUSER/$SWITCH_DBPASS IGNORE=y file=card_bin.dmp full=y

參考資料

《man gzip》

《鳥哥的Linux私房菜——基礎學習篇》

https://yq.aliyun.com/ziliao/115289

http://blog.csdn.net/cnmilan/article/details/40592305

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM