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