DB2文件導(dǎo)入導(dǎo)出常見命令總結(jié)
Db2 的數(shù)據(jù)遷移,最常用的就是導(dǎo)入導(dǎo)出功能,而導(dǎo)入導(dǎo)出的命令貌似簡單,實(shí)則內(nèi)含玄機(jī),千變?nèi)f化,稍不留神,則錯(cuò)誤百出,這兒就工作中常用到的命令,總結(jié)了一下,分享給大家!
當(dāng)然在這以前,我覺得有必要提及一點(diǎn)關(guān)于導(dǎo)入導(dǎo)出基礎(chǔ)的知識!
DEL:界定的ASCII文件,行分隔符和列分隔符將數(shù)據(jù)分開。
ASC:定長的ASCII文件,行按照行分割符分開,列定長。
PC/IXF:只能用來在db2之間導(dǎo)數(shù)據(jù),根據(jù)類型數(shù)字值被打包成十進(jìn)制或者二進(jìn)制,字符被保存為ASCII,只保存變量已經(jīng)使用了的長度,文件中包括表的定義和表的數(shù)據(jù)。
WSF:工作表方式導(dǎo)入導(dǎo)出,這種格式的文件類型用的比較少。
Db2中對不同的數(shù)據(jù)導(dǎo)入導(dǎo)出方式,支持不同的文件類型,這里個(gè)人覺得很有必要注意的。
文件類型 Import export load
-------------------------------------------------------
定界 支持 支持 支持
非定界 支持 不支持 支持
Ixf 支持 支持 支持
Wsf工作表 支持 支持 不支持
關(guān)于3種導(dǎo)入導(dǎo)出操作進(jìn)行簡單的介紹:
export:導(dǎo)出數(shù)據(jù),支持IXF,DEL或WSF
import:導(dǎo)入數(shù)據(jù),可以向表中導(dǎo)入數(shù)據(jù),支持上面提到的4種文件類型。
load:導(dǎo)入數(shù)據(jù),功能和import基本相同。支持以上說的幾種文件類型。
關(guān)于Export
這個(gè)其實(shí)比較簡單,沒啥好說的,一般命令:export to filename of filetype select x from xx where ;就ok了,這里需要注意的是:
1. 關(guān)于不同字符集的導(dǎo)出
MODIFIED BY CODEPAGE=
Exprot to filename.del for del MODIFIED BY CODEPAGE=1386 select … from …where …;
這里,在數(shù)據(jù)從數(shù)據(jù)庫倒出來的時(shí)候就會(huì)做一個(gè)數(shù)據(jù)庫代碼頁的轉(zhuǎn)換
2.時(shí)間字段格式化的
MODIFIED BY TIMESTAMPFORMAT="yyyy-mm-dd hh:mm:ss tt"
例:Exprot to filename.del for del MODIFIED BY TIMESTAMPFORMAT="yyyy-mm-dd hh:mm:ss tt" select … from …where …;
關(guān)于Import
1.Import模式的介紹
CREATE/INSERT/INSERT_UPDATE/REPLACE/REPLACE_CREATE
CREATE :首先創(chuàng)建目標(biāo)表和它的索引,然后將數(shù)據(jù)導(dǎo)入到新表中。該選項(xiàng)惟一支持的文件格式是 PC/IXF。還可以指定新表所在表空間的名稱
INSERT :將導(dǎo)入的數(shù)據(jù)插入表中。目標(biāo)表必須已經(jīng)存在。
INSERT_UPDATE :將數(shù)據(jù)插入表中,或者更新表中具有匹配主鍵的行。目標(biāo)表必須已經(jīng)存在,并且定義了一個(gè)主鍵。
REPLACE :刪除所有已有的數(shù)據(jù),并將導(dǎo)入的數(shù)據(jù)插入到一個(gè)已有的目標(biāo)表中。
REPLACE_CREATE :如果目標(biāo)表已經(jīng)存在,則導(dǎo)入實(shí)用程序刪除已有的數(shù)據(jù),并插入新的數(shù)據(jù),就像 REPLACE 選項(xiàng)那樣。如果目標(biāo)表還沒有定義,那么首先創(chuàng)建這個(gè)表以及它的相關(guān)索引,然后再導(dǎo)入數(shù)據(jù)。正如您可能想像的那樣,輸入文件必須是 PC/IXF 格式的文件,因?yàn)槟欠N格式包含對導(dǎo)出表的結(jié)構(gòu)化描述。如果目標(biāo)表是被一個(gè)外鍵引用的一個(gè)父表,那么就不能使用 REPLACE_CREATE。
2. 批量提交
COMMITCOUNT,保證insert的數(shù)據(jù)在COMMITCOUNT以后進(jìn)行一次commit,這對于大數(shù)據(jù)量的導(dǎo)入文件來說是一個(gè)不錯(cuò)的方法,
例:Import from filename of del COMMITCOUNT 50000 insert into tabname;
3. 批量插入
MODIFIED BY COMPOUND把文件中的 COMPOUND 行記錄作為一組一起導(dǎo)入,這個(gè)操作可以和上邊的批量提交一起使用,比較理想。
例:Import from filename of del MODIFIED BY COMPOUND =50 insert into tabname;
4. 導(dǎo)入記錄限制
ROWCOUNT:只導(dǎo)入rowcount 條數(shù)據(jù),有時(shí)候,業(yè)務(wù)邏輯需要只導(dǎo)入部分?jǐn)?shù)據(jù),那么ROWCOUNT是一個(gè)不錯(cuò)的選擇,只是在我的測試中ROWCOUNT一直沒有起過作用,呵呵,誰熟悉這里,幫我完善下。
例:Import from filename of del ROWCOUNT 10000 insert into tabname;
5. 導(dǎo)入起點(diǎn)
RESTARTCOUNT:從導(dǎo)入文件的第RESTARTCOUNT條記錄開始導(dǎo)入
例:Import from filename of del RESTARTCOUNT 55 ROWCOUNT 10000 insert into tabname;--從55條開始,導(dǎo)入10000條數(shù)據(jù)
6. 有警告數(shù)據(jù)的條數(shù)限制
WARNINGCOUNT:當(dāng)導(dǎo)入的數(shù)據(jù)中,有警告或錯(cuò)誤(例如類型不匹配,列不對應(yīng)等造成的)并且條數(shù)超過WARNINGCOUNT是就會(huì)停止import。
例:Import from filename of del WARNINGCOUNT 10 insert into tabname;
7. 禁止發(fā)出行警告
MODIFIED BY NOROWWARNINGS
例:Import from filename of del MODIFIED BY NOROWWARNINGS WARNINGCOUNT 10 insert into tabname;
8. LOB 文件
LOBS FROM :指出LOB的路徑
例:Import from filename of del LOBS FROM ‘/home’ MODIFIED BY NOROWWARNINGS WARNINGCOUNT 10 insert into tabname;
9. 對于自增序列(GENERATED ALWAYS)
建議不要對自增序列的表進(jìn)行import操作,因?yàn)閕mport對于自增序列,只有MODIFIED BY IDENTITYIGNORE和MODIFIED BY IDENTITYMISSING的2中操作,這2中操作都會(huì)改變自增序列的原值,這樣如果導(dǎo)出表和表之間有基于自增序列的關(guān)聯(lián)關(guān)系的話,就失去了數(shù)據(jù)本身的意義,所以建議盡量少用基于import的自增表的操作,那該怎么做?可以用load老代替import,我們下來在load的操作中會(huì)講到!
關(guān)于Load
1. 字符串間隔,列間隔,小數(shù)點(diǎn)表示
CHARDEL/COLDEL/DECPT
例:LOAD CLIENT FROM 'F:\s1.del' OF DEL MODIFIED BY CHARDEL(COLDEL= DECPT? INSERT INTO "DB2ADMIN"."ZXTABLES"
2.數(shù)據(jù)庫記錄中存在換行符,導(dǎo)致數(shù)據(jù)無法裝入的情況
MODIFIED BY DELPRIORITYCHAR
Db2默認(rèn)load優(yōu)先級策略為,record delimiter, character delimiter, column delimiter,這樣record delimiter得優(yōu)先級最高,所以原始文件如果有換行的話load就認(rèn)為是新的record,如果用戶在某些情況下行里面包含了換行符(比如論壇里面的一條帖子,不可能把換行符刪掉的),就必須用delprioritychar改變默認(rèn)的優(yōu)先級別,確保""之間的數(shù)據(jù)不管有沒有換行符都被認(rèn)為是同一條記錄
例:LOAD CLIENT FROM 'F:\s1.del' OF DEL MODIFIED BY DELPRIORITYCHAR INSERT INTO DB2ADMIN.ZXTABLES
3.load后表空間暫掛的處理
Copy YES/ NONRECOVERABLE
對于DMS表空間,load默認(rèn)為copy NO 模式,此模式下,load完成后,表空間會(huì)處于暫掛狀態(tài),這時(shí)候只能查表中的數(shù)據(jù),需要對表空間進(jìn)行一次備份,才可以對表進(jìn)行update、insert等操作,那么我們可以使用如上2個(gè)命令,對于Copy YES,load完成以后會(huì)自動(dòng)進(jìn)行一次備份操作;NONRECOVERABLE 指出load不可恢復(fù),此命令符不會(huì)產(chǎn)生表空間暫掛,也不會(huì)自動(dòng)進(jìn)行表空間備份,但是他有一個(gè)缺點(diǎn)就是,不能恢復(fù),當(dāng)數(shù)據(jù)庫進(jìn)行回滾的時(shí)候,不能還原,危險(xiǎn)等級還是比較高一點(diǎn),不過個(gè)人覺得也NONRECOVERABLE比較實(shí)用。
例:LOAD CLIENT FROM 'F:\s1.del' OF DEL INSERT INTO DB2ADMIN.ZXTABLES NONRECOVERABLE
LOAD CLIENT FROM 'F:\s1.del' OF DEL INSERT INTO DB2ADMIN.ZXTABLES COPY YES
4. load IXF類型文件到多分區(qū)數(shù)據(jù)庫
partitioned db configmode load_only_verify_part part_file_location
關(guān)于DB2文件導(dǎo)入導(dǎo)出常見命令就為大家總結(jié)這么多,希望大家都能夠從上文中涉及到的內(nèi)容中有所收獲。
【編輯推薦】