oracle資料庫有三種常用的備份方法,分別是匯出/匯入(exp/imp)或者使用資料幫浦方法(impdp/expdp)、熱備份和冷備份。匯出/匯入備份是一種邏輯備份,相對於匯出/匯入來說,熱備份、冷備份是一種物理備份 。
一、exp
我們知道採用direct path可以提高匯出速度。所以,在使用exp時,就可以採用直接路徑模式。
這種模式有2個相關的引數:direct和recordlength引數。
direct引數定義了匯出是使用直接路徑方式(direct=y),還是常規路徑方式(direct=n)。常規路徑匯出使用sql select語句從表中抽取資料,直接路徑匯出則是將資料直接從磁碟讀到pga再原樣寫入匯出檔案,從而避免了sql命令處理層的資料轉換過程,大大提高了匯出效率。在資料量大的情況下,直接路徑匯出的效率優勢更為明顯,可比常規方法速度提高三倍之多。
和direct=y配合使用的是recordlength引數,它定義了export i/o緩衝的大小,作用類似於常規路徑匯出使用的buffer引數。建議設定recordlength引數為最大i/o緩衝,即65535(64kb)。其用法如下:
如:exp userid=system/manager full=y direct=y recordlength=65535 file=exp_full.dmp log=exp_full.log
一些限制如下:
· 直接路徑不能使用在tablespace-mode
· 直接路徑不支援query引數。query只能在conventional path模式下使用。
· 如果exp版本小於8.1.5,不能使用exp匯入有lob欄位的表。 不過現在很少有有8版本的資料庫了。這點可以忽略掉了。
· buffer選項只對conventional path exp(傳統路徑)有效。對於直接路徑沒有影響。對於直接路徑,應該設定recordlength引數。
· 對於直接路徑下, recordlength引數建議設成64k(65535)。這個值對效能提高比較大。
1.匯出整個庫:
exp 使用者名稱/密碼@sid file=e:\***.dmp owner=使用者名稱,回車就可以了
2.匯出指定表
exp userid=使用者名稱/密碼@sid tables=(tablename1,tablename2,…,tablenamen) file=儲存路徑\備份檔案名.dmp
3.將資料庫中的表table1中欄位name以「張」打頭的資料匯出
exp system/密碼@資料庫名 file=存放路徑\檔名.dmp tables=(table1) query=\」where filed1 like 『張%』\」
例子:
microsoft windows [版本 6.3
.9600]
(c) 2013 microsoft corporation。保留所有權利。
c:\users\administrator>exp userid=***/***@orcl tables=msg_detai
\備份\msg_details.dmp
export: release 11.2
.0.3
.0 - production on 星期一 10月 9
09:10:13
2017
連線到: oracle database 11g enterprise edition release 11.2
.0.3
.0 - 64
tion
已匯出 zhs16gbk 字符集和 al16utf16 nchar 字符集
伺服器使用 al32utf8 字符集 (可能的字符集轉換)
即將匯出指定的表通過常規路徑...
. . 正在匯出表 msg_details
. . 正在匯出分割槽 m1707_01匯出了 0 行
. . 正在匯出分割槽 m1707_02匯出了 0 行
. . 正在匯出分割槽 m1707_03匯出了 0 行
. . 正在匯出分割槽 m1707_04匯出了 0 行
. . 正在匯出分割槽 m1707_05匯出了 0 行
. . 正在匯出分割槽 m1707_06匯出了 0 行
. . 正在匯出分割槽 m1707_07匯出了 0 行
. . 正在匯出分割槽 m1707_08匯出了 0 行
. . 正在匯出分割槽 m1707_09匯出了 0 行
. . 正在匯出分割槽 m1707_10匯出了 0 行
. . 正在匯出分割槽 m1707_11匯出了 0 行
. . 正在匯出分割槽 m1707_12匯出了 0 行
. . 正在匯出分割槽 m1707_13匯出了 72 行
. . 正在匯出分割槽 m1707_14匯出了 1140191 行
. . 正在匯出分割槽 m1707_15
2、imp
oracle import程序需要花比export程序數倍的時間將資料匯入資料庫。某些關鍵時刻,匯入是為了應對資料庫的緊急故障恢復。為了減少宕機時間,加快匯入速度顯得至關重要。沒有特效辦法加速乙個大資料量的匯入,但我們可以做一些適當的設定以減少整個匯入時間。
· imp作了大量的跟普通方式一樣的insert
· imp時候建立索引通常是logging的,產生了大量的undo和redo
使用命令列的方式進行匯入dmp檔案
例子:imp my/123@orcl file=d.dmp fromuser=my touser=my ignore=y statistics=none buffer=100000000
解釋: imp 新建庫的使用者名稱/新建庫的密碼@sid file=dmp檔案路徑 fromuser=從哪個使用者執行匯入(dmp檔案中的使用者) touser = 匯入到哪個使用者
提高imp速度:
(1、不建議使用commit引數,因為當imp失敗的時候,會導致很多後續的麻煩事兒
(2、增大buffer引數值,以便於一次讀進更大的array
imp 引數buffer定義了每一次讀取匯出檔案的資料量,設的越大,就越減少import程序讀取資料的次數,從而提高匯入效率。buffer的大小取決於系統應用、資料庫規模,通常來說,設為百兆就足夠了。其用法如下:
imp user/pwd fromuser=user1 touser=user2 file=/tmp/imp_db_pipe1 commit=y feedback=10000 buffer=10240000
(3、設定較大的初始化引數sort_area_size,以加快建立索引時候的排序速度,大記憶體啟用asmm/amm之後感覺沒有什麼作用。
(4、使用indexes=n選項,匯入資料之後再手工建立索引。
前面談到增加排序區時,說明imp程序會先導入資料再建立索引。匯入過程中建立使用者定義的索引,特別是表上有多個索引或者資料表特別龐大時,需要耗費大量時間。某些情況下,需要以最快的時間匯入資料,而索引允許後建,我們就可以使用indexes=n只匯入資料不建立索引,從而加快匯入速度。
我們可以用indexfile選項生成建立索引的dll指令碼,再手工建立索引。我們也可以用如下的方法匯入兩次,第一次匯入資料,第二次匯入索引。其用法
如下:imp user/pwd fromuser=user1 touser=user2 file=/tmp/imp_db_pipe1 commit=y feedback=10000 buffer=10240000 ignore=y rows=y indexes=n
imp user/pwd fromuser=user1 touser=user2 file=/tmp/imp_index_pipe1 commit=y feedback=10000 buffer=10240000 ignore=y rows=n indexes=y
怎麼遷mysql資料庫 MySQL資料庫遷移
mysql資料庫遷移 資料檔案直接遷移 在遷移之前有三種方案 1.資料庫直接匯出,拷貝檔案到新伺服器,在新伺服器上匯入。2.使用 mysql gui tools 中的 mysqlmigrationtool。3.資料檔案和庫表結構檔案直接拷貝到新伺服器,掛載到同樣配置的mysql服務下。我在我的電腦上...
Oracle資料庫備份
oracle資料庫備份技術 網路故障 os oracle director 一 備份的意義 當我們使用乙個資料庫時,總希望資料庫的內容是可靠的 正確的,但由於計算機系統的故障 硬體故障 網路故障 程序故障和系統故障 影響資料庫系統的操作,影響資料庫中資料的正確性,甚至破壞資料庫,使資料庫中全部或部分...
oracle資料庫備份
oracle資料庫的邏輯備份分為三種模式 表備份 使用者備份和完全備份。表模式 備份某個使用者模式下指定的物件 表 業務資料庫通常採用這種備份方式。若備份到本地檔案,使用如下命令 exp icdmain icd rows y indexes n compress n buffer 65536 fil...