練習一下Oracle的邏輯備份恢復,EXP/IMP

louloueva發表於2009-01-08

邏輯備份是個人一直比較忽視的一種備份方式
至於原因……也許是在使用SqlServer2000的日子裡,接觸這種備份太多的緣故吧
那時候經常要匯入匯出EXCEL、TXT等文件
而且,exp/imp是一種適合於Oracle資料庫之間進行備份恢復的工具
並不像SqlServer的匯入匯出那樣支援的型別廣泛(雖然大部分都是MS自己的東西……)
對於Oracle的匯入匯出,更像是一種平臺間的資料遷移工具
雖然個人不是太在意這個邏輯備份恢復功能
但看網上,此工具的使用率還是比較高的
所以還是趁著目前較輕鬆的時候,大概瞭解一下吧

先來說說Oracle傳統的EXP/IMP
Oracle利用EXP將資料庫、物件、資料,進行轉儲,並備份為二進位制檔案
再用IMP讀取轉儲的檔案,進行資料恢復或檢視
對於新安裝的資料庫,在使用此功能之前,先要執行兩個指令碼中的一個
/home/oracle/oracle/product/10.2.0/db_1/rdbms/admin/catexp.sql
/oracle/product/10.2.0/db_1/rdbms/admin/catalog.sql
指令碼用於為使用匯入匯出功能做一些準備
比如EXP_FULL_DATABASE和IMP_FULL_DATABASE角色的建立和賦上相應許可權
並將兩個角色授權給DBA角色

與之前接觸過的SQL*Loder類似
匯入匯出可通過引數或引數檔案來控制整個過程的行為
另外,還可以通過互動模式(不帶除使用者名稱/密碼以外的引數呼叫),以及在OEM來執行

匯出匯入可以有幾種工作模式
完全,database的完全匯入匯出
表空間,一個或多個表空間的匯入匯出
使用者,針對屬於某個使用者的資料庫物件進行匯入匯出
表,指定一個或多個表匯入匯出
選擇的工作模式不同,所需要的許可權也有所不同
使用時要參照相關文件進行設定
imp,可以將所用exp檔案中的物件匯入到與源schema相同或不同的schema中
當匯入的表有相關的參照完整性或其它約束,而這些約束的條件並沒有滿足的時候
匯入資料就會失敗
可以在匯入前臨時禁止約束,匯入後再開啟
也可手動制定匯入的順序
更多功能說明,可以參考相關官方文件
比如,Oracle® Database Utilities 10g Release 2 (10.2) B14215-01
沒準兒以後在實踐應用更深入的功能的時候,會再進行補充總結

說了一些東西,來簡單使用一下匯入匯出吧
因為個人要用sys使用者進行測試,呼叫格式稍微不太一樣
exp \'sys/sys@test as sysdba\'
(sys使用者使用exp,部分引數無效,具體參考官方文件)
利用引數檔案匯出
exp \'sys/gainax@test as sysdba\' parfile='/home/oracle/exp.par'
引數檔案內容(#為註釋用符號):
FILE=test_exp.dmp    #匯出的檔名
GRANTS=y    #匯出物件許可權
FULL=y      #全database匯出
ROWS=y      #匯出資料行 
LOG=export.log      #匯出過程的日誌檔案
再弄一個表匯出模式的
exp \'hr/hr@test\' parfile='/home/oracle/exp.par'
這次的exp.par內容:
FILE=test_exp2.dmp
TABLES=(hr.empb,hr.jobsb)  #要匯出的表
ROWS=n    #不匯出資料,僅匯出表定義

接下來用imp,這裡就用上面的表匯出exp檔案來試驗
先將hr.empb,hr.jobsb兩個表從資料庫中刪除
然後利用imp進行匯入恢復
imp \'hr/hr@test\' parfile='/home/oracle/exp.par'
引數檔案內容:
FILE=/home/oracle/test_exp.dmp
SHOW=n     #不顯示錶匯入過程
IGNORE=n   #如果表已經存在,將會報錯並跳過此表的匯入
GRANTS=y   #匯入許可權
TABLES=(empb,jobsb)   #要匯入的表
test_exp.dmp檔案中沒有資料,所以僅僅是在hr使用者下建立兩個表
再來試驗將資料匯入
imp \'hr/hr@test\' parfile='/home/oracle/exp.par'
引數檔案內容:
FILE=/home/oracle/test_exp2.dmp
SHOW=n
IGNORE=n
GRANTS=y
TABLES=(empb,jobsb)
因為表已經存在,所以會有報錯
IMP-00015: following statement failed because the object already exists
修改IGNORE=y,再來匯入,成功
試驗匯入表到另一個使用者中
imp \'sys/gainax@test as sysdba\' parfile='/home/oracle/exp.par'
引數檔案內容:
FILE=/home/oracle/test_exp2.dmp
SHOW=n
IGNORE=y
GRANTS=y
FROMUSER=hr   #原所屬使用者名稱
TOUSER=louloueva   #要匯入到使用者名稱
TABLES=(empb,jobsb)

上面是對於Oracle傳統的exp/imp工具的使用練習
另外,還有很多複雜的用法沒有實踐,但整體上已經有了籠統的認識
需要應用更深入的功能的時候,再去參照官方文件進行就行了
在Oracle進入10g之後,就推薦使用者使用新一代的匯入匯出工具
資料泵expdp/impdp,明天瞭解
再之後,該開始涉及RMAN的備份恢復操作
春節前爭取把Oracle的各個備份恢復方法走一遍吧 ^_^

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/556359/viewspace-531932/,如需轉載,請註明出處,否則將追究法律責任。

相關文章