對於Oracle對象和數據的導入導出,我們會用到一些小工具。以前我們一般都是使用PL/SQL Developer來實現,但是PL/SQL Developer在導出、導入數據時有兩個問題:
1、要把表數據和對象(存儲過程、視圖)分開導出
2、導出的視圖如果有注釋,那麼在導入時常常會出錯。
其實,PL/SQL的導出、導入功能使用的是Oracle自帶的工具:exp和imp,這兩個工具的導出導入數據時提供了很多功能,PL/SQL 只是使用其中的一些功能。下面對它們簡單介紹一下:
1 exp/imp使用方法及實例
exp/imp為一種數據庫備份恢復工具也可以作為不同數據庫之間傳遞數據的工具兩個數據庫所在的操作系統可以不同exp 可以將數據庫數據導出為二進制文件imp 可以將導出的數據文件再導入到相同的數據庫或不同的數據庫
數據庫導出有四種模式full(全庫導出), owner(用戶導出), table(表導出), tablespace(表空間導出).
full( 全庫導出): 導出除ORDSYS,MDSYS,CTXSYS,ORDPLUGINS,LBACSYS 這些系統用戶之外的所有用戶的數據.
owner( 用戶導出): 導出某個或某些用戶的所有權限和數據.
tables( 表導出): 導出某些表(可以是不同用戶的)的結構和數據.
tablespace( 表空間導出):表空間導出數據.
執行exp 有三種方法:交互式,命令行和參數文件
交互式:直接輸入exp 命令用戶可以按照exp 提示的信息一步一步操作,比較簡單.
命令行:輸入命令行exp username/passWord parameter=value.
參數文件:輸入命令行exp username/passWord parfile=filename exp 所需的參數從參數文件引入.
參數是可以重復的優先級為命令行優於參數文件後面的參數值覆蓋於前面的參數值.
參數介紹
詳細的介紹可通過exp help=y或imp helpe=y來查看。下面只對一些常用的參數進行說明。
buffer 緩沖區大小如果此值設為0 則一次只導入一條記錄對數據量大的導出可以設置較大一般缺省值即可.
file 導出的文件列表可以指定一個或多個文件名缺省擴展名為.dmp 缺省導出文件名為expdat.dmp.
filesize exp 導出文件的最大字節數超出時從文件列表中獲取下一個文件名,沒有,則提示輸入新的文件名.
help 顯示export 參數幫助信息
inctype 增量備份的類型:complete(完全),cumulative(累積)和incremental (增量).
只可以在全庫導出模式下才可以做完全累積或增量導出累積導出只導出自上次累積導出或完全導出以來已經修改的表增量導出只導出自上次增量累積或完全導出以來已經修改的表完全導出將數據庫中全部對象都導出不管是否以及何時被修改.
log:日志文件,一般如果以命令行導入時,將log 設置上比較好可以看,到所有的導入信息,導入信息哪兒出錯,導入了那些數據庫對象.
show(imp):只是用來顯示備份數據文件的內容.
full:為Y 時表示在全庫方式下導出缺省為N.
tables:導出的表列表可以指定一個或多個表名.
fromuser(imp):可以將導出文件中的一個用戶模式的數據對象導入為另一個用戶模式的對象此參數表示導出文件中的用戶模式.
touser(imp):此參數表示導入到數據庫中時使用的用戶模式對象譬如使用全庫或者用戶模式導出caittmdba用戶的所有對象到一個文件中導 入時需要將用戶模式名稱改為caittmdba1此時fromuser 為caittmdba,touser 為caittmdba1
Oracle對象和數據導出、導入實例
導出數據:
- D:\Oracle\ora92\bin\exp userid=caittmdba/cait@YSDB_192.168.1.2 owner=caittmdba file=e:\%DATE%.dmp log=e:\exp.log
通過該命令可以把caittmdba這個用戶所屬的所有數據、對象導出到一個文件中,導出的日志寫在e:\exp.log文件中,連接Oracle的本地服務名為YSDB_192.168.1.2,導出的文件為e:\%DATE%.dmp,這個文件的文件名是當前的日期。如果把這個命令寫成批處理文件,並放到計劃任務中,就可以自動進行備份數據了。
導入數據:
- D:\Oracle\ora92\bin\imp userid=caittmdba/cait@YSDB_192.168.1.2 fromuser=caittmdba touser=caittmdba file=e:\data.dmp log=e:\imp.log
注意事項
在導出數據時常常會出現Oracle 942 錯誤,這個錯誤往往是在對Oracle進行了升級後才會出現,這是Oracle升級程序的一個Bug(Oracle的Bug和補丁一直以來都是滿天飛,而 且不成體系,文檔和技術支持以少,這一點和MS比起來就差很遠了。如果大家去看一看Oracle的發展經歷相關的文章就知道,Oracle從開始就這 樣)。
這個Bug只需要執行Oracle_HOME/rdbms/admin/catpatch.sql 腳本就可以了,同時要注意調大Java_pool_size 和shared_pool_size這兩個參數的大小,不然會很花時間的。在用sysdba的身份登錄進SQL Plus執行下面的命令:
- SQL>shutdown immediate;
- SQL>startup migrate;
- SQL>@?/rdbms/admin/catpatch.sql
大約半個小時就可以執行完了。
Oracle對象和數據就介紹到這裡。