oracle數(shù)據(jù)庫(kù)導(dǎo)入小結(jié)
最近進(jìn)行了大量的數(shù)據(jù)表導(dǎo)入工作,趁此對(duì)此做一下總結(jié),也希望給沒(méi)做過(guò)的朋友作個(gè)參考,這里主要借用excel作為導(dǎo)入工具使用,這里以人員表為例,進(jìn)行說(shuō)明1、被導(dǎo)入的表的結(jié)構(gòu)
CURRENTTYPENAMEIDCARD
CURRENTPOSITIONUSERID
NATIVEPLACEPEOPLE
2、導(dǎo)入的表的結(jié)構(gòu)
VARCHAR2(30)VARCHAR2(100)VARCHAR2(18)VARCHAR2(100)VARCHAR2(50)VARCHAR2(100)VARCHAR2(20)
當(dāng)前類(lèi)型,1在職人員、2錄用、3聘用、4調(diào)入、5過(guò)渡姓名
身份證號(hào)碼現(xiàn)任職務(wù)登錄ID籍貫
民族,漢、蒙、回、苗、黎、其它
USER_IDLOGIN_NAMEPASS_WORDIS_ACTIVENO
USER_NAMEOLD_NAMESEX
BIRTH_DAYPROVINCECITY
POLITICAL_LAND_SPACENATIONNUMBER
VARCHAR2(50)VARCHAR2(100)VARCHAR2(1)NUMBER
VARCHAR2(50)VARCHAR2(50)VARCHAR2(2)DATE
VARCHAR2(20)VARCHAR2(20)VARCHAR2(20)VARCHAR2(20)主鍵登錄名密碼賬號(hào)狀態(tài)排序姓名曾用名性別生日籍貫省籍貫市政治面貌民族
3、弄清楚兩個(gè)表之間字段的對(duì)應(yīng)關(guān)系文件
導(dǎo)出表字段ID
userid
單位內(nèi)順序號(hào)
姓名
性別出生年月日
政治面貌
導(dǎo)入表字段USER_IDLOGIN_NAMEPASS_WORDIS_ACTIVENO
USER_NAMEOLD_NAMESEX
BIRTH_DAYPROVINCECITY
POLITICAL_LAND_SPACE
字段備注主鍵登錄名密碼賬號(hào)狀態(tài)排序姓名曾用名性別生日籍貫省籍貫市政治面貌民族
NATION民族
3、寫(xiě)出被導(dǎo)入表要導(dǎo)入的字段的select語(yǔ)句,在plsql中把查詢(xún)結(jié)果導(dǎo)成excel文件
4、在生成的excel文件中手動(dòng)加入一列,如ID序列作為主鍵
5、打開(kāi)對(duì)應(yīng)關(guān)系文件,使用plsql的導(dǎo)入功能導(dǎo)入excel中的數(shù)據(jù)
":[{"c":{"ix":0,"iy":0,"iw":805,"ih":521},"p":{"h":521,"opacity":1,"rotate":0,"w":622.05,"x":135,"x0":135,"x1":135,"x2":757.05,"x3":757.05,"y":117.149,"y0":519.824,"y1":117.149,"y2":117.149,"y3":519.824,"z":0},"ps":null,"s":{"pic_file":"/home/iknow/conv//data//bdef//43213016//43213016_3_0.png"},"t":"pic"},{"c":{"ix":0,"iy":526,"iw":804,"ih":556},"p":{"h":556,"opacity":1,"rotate":0,"w":622.275,"x":135,"x0":135,"x1":135,"x2":757.275,"x3":757.275,"y":536.25,"y0":966.599,"y1":536.25,"y2":536.25,"y3":966.599,"z":1},"ps":null,"s":{"pic_file":"/home/iknow/conv//data//bdef//43213016//43213016_3_1.png"},"t":"pic"}],"page":{"ph":1262.879,"pw":892.979,"iw":805,"ih":1082,"v":6,"t":"1","pptlike":false,"cx":135,"cy":117.149,"cw":622.275,"ch":849.45}})":[{"c":{"ix":0,"iy":0,"iw":816,"ih":540},"p":{"h":540,"opacity":1,"rotate":0,"w":622.425,"x":135,"x0":135,"x1":135,"x2":757.425,"x3":757.425,"y":112.649,"y0":524.55,"y1":112.649,"y2":112.649,"y3":524.55,"z":0},"ps":null,"s":{"pic_file":"/home/iknow/conv//data//bdef//43213016//43213016_4_0.png"},"t":"pic"},{"c":{"ix":0,"iy":545,"iw":808,"ih":518},"p":{"h":518,"opacity":1,"rotate":0,"w":622.65,"x":135,"x0":135,"x1":135,"x2":757.65,"x3":757.65,"y":540.149,"y0":939.449,"y1":540.149,"y2":540.149,"y3":939.449,"z":1},"ps":null,"s":{"pic_file":"/home/iknow/conv//data//bdef//43213016//43213016_4_1.png"},"t":"pic"}],"page":{"ph":1262.879,"pw":892.979,"iw":816,"ih":1063,"v":6,"t":"1","pptlike":false,"cx":135,"cy":112.649,"cw":622.65,"ch":826.799}})":[{"c":{"ix":0,"iy":0,"iw":830,"ih":541},"p":{"h":541,"opacity":1,"rotate":0,"w":622.8,"x":135,"x0":135,"x1":135,"x2":757.8,"x3":757.8,"y":115.574,"y0":521.474,"y1":115.574,"y2":115.574,"y3":521.474,"z":0},"ps":null,"s":{"pic_file":"/home/iknow/conv//data//bdef//43213016//43213016_5_0.png"},"t":"pic"},{"c":{"ix":0,"iy":546,"iw":817,"ih":529},"p":{"h":529,"opacity":1,"rotate":0,"w":622.275,"x":135,"x0":135,"x1":135,"x2":757.275,"x3":757.275,"y":538.349,"y0":941.249,"y1":538.349,"y2":538.349,"y3":941.249,"z":1},"ps":null,"s":{"pic_file":"/home/iknow/conv//data//bdef//43213016//43213016_5_1.png"},"t":"pic"}],"page":{"ph":1262.879,"pw":892.979,"iw":830,"ih":1075,"v":6,"t":"1","pptlike":false,"cx":135,"cy":115.574,"cw":622.8,"ch":825.675}})
可以編寫(xiě)轉(zhuǎn)換函數(shù)處理
6、不能用excel導(dǎo)入或者需要轉(zhuǎn)換的列只能通過(guò)程序修改了,可以使用純jdbc或者h(yuǎn)ibernatehql語(yǔ)句或者本地sql進(jìn)行轉(zhuǎn)換
一般的字段數(shù)據(jù)轉(zhuǎn)換先把數(shù)據(jù)從源表中讀取出來(lái),然后通過(guò)程序轉(zhuǎn)換成需要的數(shù)據(jù),保存到目標(biāo)表中
對(duì)大字段數(shù)據(jù)的處理:oracle中的clob對(duì)應(yīng)java.lang.String,blob對(duì)應(yīng)byte[]Oracle讀取大字段的時(shí)候,是比較慢的,會(huì)爆內(nèi)存溢出錯(cuò)誤我的解決辦法是:設(shè)大myeclipse的內(nèi)存xml800M表中如果有較多的數(shù)據(jù),用hibernatehql操作起來(lái)是很慢的,每次只能提交100條數(shù)據(jù)左右手動(dòng)每次導(dǎo)入若干條,這樣會(huì)比較費(fèi)時(shí)間最好使用jdbc操作會(huì)快些
用java導(dǎo)入數(shù)據(jù)的時(shí)候不能一次讀取所有的記錄,否則會(huì)拋堆棧溢出的異常,可以根據(jù)id每次選擇一定量的數(shù)據(jù)進(jìn)行導(dǎo)入
擴(kuò)展閱讀:Oracle數(shù)據(jù)庫(kù)導(dǎo)入導(dǎo)出命令總結(jié)
執(zhí)行環(huán)境:可以在SQLPLUS.EXE或者DOS(命令行)中執(zhí)行,
DOS中可以執(zhí)行時(shí)由于在oracle中,安裝目錄\\ora9i\\BIN被設(shè)置為全局路徑,該目錄下有EXP.EXE與IMP.EXE文件被用來(lái)執(zhí)行導(dǎo)入導(dǎo)出。oracle用java編寫(xiě),SQLPLUS.EXE、EXP.EXE、IMP.EXE這兩個(gè)文件是被包裝后的類(lèi)文件。SQLPLUS.EXE調(diào)用EXP.EXE、IMP.EXE所包裹的類(lèi),完成導(dǎo)入導(dǎo)出功能。
下面介紹的是導(dǎo)入導(dǎo)出的實(shí)例。數(shù)據(jù)導(dǎo)出:
1將數(shù)據(jù)庫(kù)zxcc完全導(dǎo)出,用戶(hù)名kf密碼zx導(dǎo)出到D:\\zxcc.dmp中expkf/zx@zxccfile=d:\\zxcc.dmpfull=y
full=y表示全庫(kù)導(dǎo)出。full總共有2個(gè)可選項(xiàng)yes(y)/no(n),缺省情況下full=no,這時(shí)只會(huì)將該用戶(hù)下的對(duì)象導(dǎo)出。
2將數(shù)據(jù)庫(kù)zxcc中kf用戶(hù)與cc用戶(hù)的表導(dǎo)出expkf/zx@zxccfile=d:\\zxcc_ur.dmpowner=(kf,cc)
full方式可以備份所有用戶(hù)的數(shù)據(jù)庫(kù)對(duì)象,包括表空間、用戶(hù)信息等,owner=XX只能備份指定用戶(hù)的對(duì)象,其他用戶(hù)下的就不備份了,EXP中full=y和owner=XX是不能同時(shí)使用的。
3將數(shù)據(jù)庫(kù)zxcc中的表kf_operator、kf_role導(dǎo)出
expkf/zx@zxccfile=d:\\zxcc_tb.dmptables=(kf_operator,kf_role)
tables=xx表示備份相關(guān)表,不能同時(shí)和owner、full使用。
4將數(shù)據(jù)庫(kù)中的表kf_operator中的字段oper_id以"00"打頭的數(shù)據(jù)導(dǎo)出
expkf/zx@zxccfile=d:\\zxcc_t.dmptables=(kf_operator)query=\\"whereoper_idlike"00%"\\"
query主要是導(dǎo)出合適條件的數(shù)據(jù)。使用該參數(shù)時(shí),需要注意對(duì)所有操作系統(tǒng)保留字符都要使用轉(zhuǎn)義符號(hào)。若有括號(hào)()也需要轉(zhuǎn)義:
query=\\"wheredt=to_date\\(\"201*-09-22\",\"yyyy-mm-dd\"\\)\\"。
如果遇到條件比較繁瑣的語(yǔ)句,頻繁的轉(zhuǎn)義操作不僅費(fèi)時(shí),還很容易出錯(cuò)。我們可以使用exp或expdp的PARFILE參數(shù)避免query內(nèi)容的繁瑣轉(zhuǎn)義問(wèn)題。例:
oracleDBALNP01>cat>zxcc.partables=kf_operatorfile=zxcc.dmp
query="wheredt_time=to_date("201*-06-25","yyyy-mm-dd")"這時(shí)就可以盡情的再雙引號(hào)中寫(xiě)條件語(yǔ)句了。上面是常用的導(dǎo)出,對(duì)于壓縮,可用winzip把dmp文件可以很好的壓縮。也可以在上面命令后面加上compress=y來(lái)實(shí)現(xiàn)。
數(shù)據(jù)的導(dǎo)入
1將D:\\zxcc.dmp中的數(shù)據(jù)導(dǎo)入zxcc數(shù)據(jù)庫(kù)中。impkf/zx@zxccfile=d:\\zxcc.dmp
導(dǎo)數(shù)據(jù)得時(shí)候,有可能報(bào)錯(cuò)。為什么?有以下主要的原因:
A.導(dǎo)入的對(duì)象(表,視圖,方法等)原本不屬于當(dāng)前連接的用戶(hù)的
B.導(dǎo)入的對(duì)象在該數(shù)據(jù)庫(kù)的指定用戶(hù)下已經(jīng)存在
C.導(dǎo)入的對(duì)象的原本用戶(hù)不再這個(gè)數(shù)據(jù)庫(kù)里
對(duì)于這三個(gè)問(wèn)題的處理方法如下:
a/c、所有對(duì)象全部導(dǎo)入到指定的賬戶(hù)下:
impkf_new/zx@zxcc_newfile=d:\\zxcc.dmpfromuser=kftouser=kf_new
其中fromuser=kf為.dmp文件里的對(duì)象的原先的owner,touser=kf_new為作為導(dǎo)入的對(duì)象的新的Owner.
b、忽略/插入數(shù)據(jù):
Impsystem/123456@ATSTestDBfile=c:\\export.dmpignore=y
其中ignore=y告訴imp.exe把數(shù)據(jù)直接插入到相應(yīng)對(duì)象(并且如果導(dǎo)入的對(duì)象里面有其他的對(duì)象,如約束,索引等,會(huì)在數(shù)據(jù)插入后被創(chuàng)建)。
2將d:\\zxcc_tb.dmp中的表tb_operator導(dǎo)入
impkf/zx@zxccfile=d:\\zxcc_tb.dmptables=(tb_operator)
忽略加載約束
有時(shí)候?qū)?shù)據(jù)進(jìn)來(lái)的時(shí)候,我們不需要把它的約束,比如一些外鍵約束等都導(dǎo)進(jìn)來(lái),可以加上參數(shù)constraints=N
不加載索引(比如唯一性的索引),可以加上參數(shù)indexs=N
只加載結(jié)構(gòu),不加載數(shù)據(jù),如果只要表的結(jié)構(gòu)等定義(約束,觸發(fā)器),那么不要里面的數(shù)據(jù),可以加上參數(shù)rows=N
對(duì)于上述操作登陸操作的對(duì)象system是管理員,如果不是管理員,而是普通用戶(hù),那么這個(gè)用戶(hù)必須有創(chuàng)建刪除對(duì)象的權(quán)利,對(duì)象可能包括表,視圖,方法,存儲(chǔ)過(guò)程等等常見(jiàn)的對(duì)象。為什么“可能”包括?因?yàn)檫@個(gè)視導(dǎo)入導(dǎo)出的時(shí)候是否涉及相關(guān)類(lèi)型的對(duì)象而定。
Impkf/zx@zxcc_newfile=d:\\zxcc.dmpfromuser=kftouser=kf_newignore=y
基本上上面的導(dǎo)入導(dǎo)出夠用了。不少情況要先是將表徹底刪除,然后導(dǎo)入。
注意:
操作者要有足夠的權(quán)限,權(quán)限不夠它會(huì)提示。
數(shù)據(jù)庫(kù)鏈接正常,可以用tnspingzxcc來(lái)獲得數(shù)據(jù)庫(kù)zxcc能否連上。
導(dǎo)入/導(dǎo)出數(shù)據(jù)庫(kù)時(shí)注意字符集?赡軙(huì)出現(xiàn)導(dǎo)出/導(dǎo)入時(shí)數(shù)據(jù)庫(kù)字符集不一致而報(bào)錯(cuò)。
oracle數(shù)據(jù)庫(kù)其他常用命令:
1、給用戶(hù)增加導(dǎo)入數(shù)據(jù)權(quán)限的操作第一,啟動(dòng)sql*puls
第二,以管理員(DBA)用戶(hù)登陸第三,createuser用戶(hù)名IDENTIFIEDBY密碼(如果已經(jīng)創(chuàng)建過(guò)用戶(hù),這步可以省略)第四,GRANTCREATEUSER,DROPUSER,ALTERUSER,CREATEANYVIEW,DROPANY
VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,DBA,CONNECT,RESOURCE,CREATESESSIONTO用戶(hù)名字
第五,運(yùn)行-cmd-進(jìn)入dmp文件所在的目錄,
impuserid=管理員用戶(hù)名/密碼full=yfile=*.dmp
或者impuserid=管理員用戶(hù)名/密碼full=yfile=filename.dmp
2、Oracle不允許直接改變表的擁有者,利用Export/Import可以達(dá)到這一目的.先建立.par文件,
然后,使用時(shí)命令如下:impparfile=/filepath/import9.par例import9.par內(nèi)容如下:FROMUSER=user
TOUSER=user_new(注:把表的擁有者由FROMUSER改為T(mén)OUSER,F(xiàn)ROMUSER和TOUSER的用戶(hù)可以不同)ROWS=YINDEXES=YGRANTS=Y
CONSTRAINTS=YBUFFER=409600
file==/filepath/xxxx.dmplog==/filepath/import_log.log學(xué)會(huì)使用oracle相關(guān)命令方法會(huì)給我們的工作帶來(lái)便利,遇到問(wèn)題可以迅速的解決,而不用再baidu出來(lái)的海量信息中區(qū)找解決方法。希望本文能夠?qū)Υ蠹矣兴鶐椭?/p>
友情提示:本文中關(guān)于《oracle數(shù)據(jù)庫(kù)導(dǎo)入小結(jié)》給出的范例僅供您參考拓展思維使用,oracle數(shù)據(jù)庫(kù)導(dǎo)入小結(jié):該篇文章建議您自主創(chuàng)作。
來(lái)源:網(wǎng)絡(luò)整理 免責(zé)聲明:本文僅限學(xué)習(xí)分享,如產(chǎn)生版權(quán)問(wèn)題,請(qǐng)聯(lián)系我們及時(shí)刪除。