Oracle8i/9i EXP/IMP使用經(jīng)驗(yàn) 一、8i EXP常用選項(xiàng)1、FULL,這個(gè)用于導(dǎo)出整個(gè)數(shù)據(jù)庫,在ROWS=N一起使用時(shí),可以導(dǎo)出整個(gè)數(shù)據(jù)庫的結(jié)構(gòu)。例如:exp sys file=./db_str.dmp log=./db_str.log full=y rows=n comPRess=y direct=y2、BUFFER和FEEDBACK,在導(dǎo)出比較多的數(shù)據(jù)時(shí),我會(huì)考慮設(shè)置這兩個(gè)參數(shù)。例如:exp new file=yw97_2003.dmp log=yw97_2003_3.log feedback=10000 buffer=100000000 tables=WO4,OK_YT3、FILL和LOG,這兩個(gè)參數(shù)分別指定備份的DMP名稱和LOG名稱,包括文件名和目錄,例子見上面。需要說明的是,EXP可以直接備份到磁帶中,即使用FILE=/dev/rmt0(磁帶設(shè)備名),但是一般我們都不這么做,原因有二:一、這樣做的速度會(huì)慢很多,二、現(xiàn)在一般都是使用磁帶庫的,不建議直接對(duì)磁帶進(jìn)行操作。至于沒有使用磁帶庫的朋友可以考慮和UNIX的TAR結(jié)合使用。假如你真想使用EXP直接到磁帶,你可以參考Metalink文章“EXPORTING TO TAPE ON UNIX SYSTEMS”(文檔號(hào):30428.1),該文中有具體解釋。4、COMPRESS參數(shù)將在導(dǎo)出的同時(shí)合并碎塊,盡量把數(shù)據(jù)壓縮到initial的EXTENT里,默認(rèn)是N,一般建議使用。DIRECT參數(shù)將告訴EXP直接讀取數(shù)據(jù),而不像傳統(tǒng)的EXP那樣,使用SELECT來讀取表中的數(shù)據(jù),這樣就減少了SQL語句處理過程。一般也建議使用。不過有些情況下DIRECT參數(shù)是無法使用的。5、如何使用SYSDBA執(zhí)行EXP/IMP?這是一個(gè)很現(xiàn)實(shí)的問題,有時(shí)候我們需要使用SYSDBA來執(zhí)行EXP/IMP,如進(jìn)行傳輸表空間的EXP/IMP,以及在9i下用SYS用戶來執(zhí)行EXP/IMP時(shí),都需要使用SYSDBA才可。我們可以使用下面方式連入EXP/IMP:exp "'sys/sys as sysdba'" file=1.dmp tables=gototop.t rows=n6、QUERY參數(shù)后面跟的是where條件,值得注重的是,整個(gè)where子句需要使用""括起來,where子句的寫法和SELECT中相同,假如是UNIX平臺(tái)所有"和'都需要使用/u26469屏蔽它們的非凡含義:exp gototop/gototop file=1.dmp log=1.log tables=cyx.t query="where c1=20 and c2=gototop"假如是windows平臺(tái),則使用下面的格式:exp c/c@ncn file=c.dmp log=c.log tables=t query="""where id=1 and name='gototop'"""二、8i IMP常用選項(xiàng)1、FROMUSER和TOUSER,使用它們實(shí)現(xiàn)將數(shù)據(jù)從一個(gè)SCHEMA中導(dǎo)入到另外一個(gè)SCHEMA中。2、IGNORE、GRANTS和INDEXES,其中IGNORE參數(shù)將忽略表的存在,繼續(xù)導(dǎo)入,這個(gè)對(duì)于需要調(diào)整表的存儲(chǔ)參數(shù)時(shí)很有用,我們可以先根據(jù)實(shí)際情況用合理的存儲(chǔ)參數(shù)建好表,然后直接導(dǎo)入數(shù)據(jù)。而GRANTS和INDEXES則表示是否導(dǎo)入授權(quán)和索引,假如想使用新的存儲(chǔ)參數(shù)重建索引,或者為了加快到入速度,我們可以考慮將INDEXES設(shè)為N,而GRANTS一般都是Y。另外一個(gè)EXP/IMP都有的參數(shù)是PARFILE,它是用來定義EXP/IMP的參數(shù)文件,也就是說,上面的參數(shù)都可以寫在一個(gè)參數(shù)文件中,但我們一般很少使用。三、Oracle9i EXP功能描述Oracle9i EXP在原有的基礎(chǔ)上新增了部分新的參數(shù),按功能主要分為以下幾個(gè)部分:1、OBJECT_CONSISTENT - 用于設(shè)置EXP對(duì)象為只讀以保持對(duì)象的一致性。默認(rèn)是N。2、FlashBACK_SCN和FLASHBACK_TIME - 用于支持FLASHBACK功能而新增。3、RESUMABLE、RESUMABLE_NAME和RESUMABLE_TIMEOUT - 用于支持RESUMABLE空間分配而新增。4、TTS_FULL_CHECK - 用于在傳輸表空間時(shí)使用依靠性檢查。5、TEMPLATE - 用于支持iAS。6、TABLESPACES - 設(shè)置表空間導(dǎo)出模式。個(gè)人覺得對(duì)于一般用戶而言,這個(gè)才是新增參數(shù)中最實(shí)用的一個(gè),可以讓用戶在原來的FULL、OWNER、TABLES的基礎(chǔ)上多了一種選擇,使得EXP更加靈活。四、不同版本的EXP/IMP問題?一般來說,從低版本導(dǎo)入到高版本問題不大,麻煩的是將高版本的數(shù)據(jù)導(dǎo)入到低版本中,在Oracle9i之前,不同版本Oracle之間的EXP/IMP可以通過下面的方法來解決:1、在高版本數(shù)據(jù)庫上運(yùn)行底版本的catexp.sql;2、使用低版本的EXP來導(dǎo)出高版本的數(shù)據(jù);3、使用低版本的IMP將數(shù)據(jù)庫導(dǎo)入到底版本數(shù)據(jù)庫中;4、在高版本數(shù)據(jù)庫上重新運(yùn)行高版本的catexp.sql腳本。但在9i中,上面的方法并不能解決問題。假如直接使用底版本EXP/IMP會(huì)出現(xiàn)如下錯(cuò)誤:EXP-00008: ORACLE error %lu encounteredORA-00904: invalid column name這已經(jīng)是一個(gè)公布的BUG,需要等到Oracle10.0才能解決,BUG號(hào)為2261722,你可以到METALINK上去查看有關(guān)此BUG的具體信息。BUG歸BUG,我們的工作還是要做,在沒有Oracle的支持之前,我們就自己解決。在Oracle9i中執(zhí)行下面的SQL重建exu81rls視圖即可。CREATE OR REPLACE view exu81rls(objown,objnam,policy,polown,polsch,polfun,stmts,chkopt,enabled,spolicy)AS select u.name, o.name, r.pname, r.pfschma, r.ppname, r.pfname,decode(bitand(r.stmt_type,1), 0,'', 'SELECT,')decode(bitand(r.stmt_type,2), 0,'', 'INSERT,')decode(bitand(r.stmt_type,4), 0,'', 'UPDATE,')decode(bitand(r.stmt_type,8), 0,'', 'DELETE,'),r.check_opt, r.enable_flag,DECODE(BITAND(r.stmt_type, 16), 0, 0, 1)from user$ u, obj$ o, rls$ rwhere u.user# = o.owner#and r.obj# = o.obj#and (uid = 0 oruid = o.owner# orexists ( select * from session_roles where role='SELECT_CATALOG_ROLE'))/grant select on sys.exu81rls to public;/五、其他問題本文只討論了Oracle8i和9i中的EXP/IMP的一些情況,對(duì)于之前的版本,在8.0.X中,除了QUERY參數(shù)不能用外,其它差別不大。針對(duì)沒有QUERY的情況,我們可以先在數(shù)據(jù)庫中使用查詢條件建立臨時(shí)中間表,然后使用EXP導(dǎo)出這個(gè)中間表即可。至于Oracle7因?yàn)槟壳笆褂玫娜溯^少,gototop不打算在此做具體解釋了,假如讀者朋友有需求,你可以參考Metalink文檔:“Overview of Export and Import in Oracle7”(文檔號(hào):61949.1)。關(guān)于EXP/IMP的具體參數(shù)信息你可以通過EXP/IMP HELP=Y來獲得。另外關(guān)于傳輸表空間的更多信息可以參考下面的Metelink文檔,本文不再詳述。[NOTE:77523.1] Transportable Tablespaces -- An Example to setup and use.[NOTE:100698.1] Perform tablespace point-in-time recovery using Transportable Tablespace.在進(jìn)行并行EXP/IMP的時(shí)候,假如IMP過程建索引的話不建議同時(shí)運(yùn)行5個(gè)以上的IMP,假如你想加快速度,可以在IMP的時(shí)候不建索引,這樣只要內(nèi)存答應(yīng),可以多跑幾個(gè),然后是SQL腳本創(chuàng)建需要的索引。