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