溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

DB2導(dǎo)入和導(dǎo)出數(shù)據(jù)的方法

發(fā)布時間:2021-09-08 15:33:44 來源:億速云 閱讀:497 作者:chen 欄目:云計(jì)算

本篇內(nèi)容介紹了“DB2導(dǎo)入和導(dǎo)出數(shù)據(jù)的方法”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

一、數(shù)據(jù)導(dǎo)入導(dǎo)出基礎(chǔ)的格式知識

DEL:界定的ASCII文件,行分隔符和列分隔符將數(shù)據(jù)分開。(異機(jī))

ASC:定長的ASCII文件,行按照行分割符分開,列定長。

PC/IXF:只能用來在db2之間導(dǎo)數(shù)據(jù),根據(jù)類型數(shù)字值被打包成十進(jìn)制或者二進(jìn)制,字符被保存為ASCII,只保存變量已經(jīng)使用了的長度,文件中包括表的定義和表的數(shù)據(jù)。(本機(jī))

WSF:工作表方式導(dǎo)入導(dǎo)出,這種格式的文件類型用的比較少。

Db2中對不同的數(shù)據(jù)導(dǎo)入導(dǎo)出方式,支持不同的文件類型意的。

DB2導(dǎo)入和導(dǎo)出數(shù)據(jù)的方法

關(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 

命令格式:export to filename of filetype select x from xx where ;

幾個需要注意的問題:

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ù)據(jù)庫代碼頁的轉(zhuǎn)換

2.時間字段格式化的

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)存在,并且定義了一個主鍵。 

REPLACE :刪除所有已有的數(shù)據(jù),并將導(dǎo)入的數(shù)據(jù)插入到一個已有的目標(biāo)表中。 

REPLACE_CREATE :如果目標(biāo)表已經(jīng)存在,則導(dǎo)入實(shí)用程序刪除已有的數(shù)據(jù),并插入新的數(shù)據(jù),就像 REPLACE 選項(xiàng)那樣。如果目標(biāo)表還沒有定義,那么首先創(chuàng)建這個表以及它的相關(guān)索引,然后再導(dǎo)入數(shù)據(jù)。正如您可能想像的那樣,輸入文件必須是 PC/IXF 格式的文件,因?yàn)槟欠N格式包含對導(dǎo)出表的結(jié)構(gòu)化描述。如果目標(biāo)表是被一個外鍵引用的一個父表,那么就不能使用 REPLACE_CREATE。 

2.批量提交

COMMITCOUNT,保證insert的數(shù)據(jù)在COMMITCOUNT以后進(jìn)行一次commit,這對于大數(shù)據(jù)量的導(dǎo)入文件來說是一個不錯的方法,

例:Import from filename of del COMMITCOUNT 50000 insert into tabname;

3.批量插入

MODIFIED BY COMPOUND把文件中的 COMPOUND 行記錄作為一組一起導(dǎo)入,這個操作可以和上邊的批量提交一起使用,比較理想。

例:Import from filename of del MODIFIED BY COMPOUND =50 insert into tabname;

4.導(dǎo)入記錄限制

ROWCOUNT:只導(dǎo)入rowcount 條數(shù)據(jù),有時候,業(yè)務(wù)邏輯需要只導(dǎo)入部分?jǐn)?shù)據(jù),那么ROWCOUNT是一個不錯的選擇,只是在我的測試中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ù)中,有警告或錯誤(例如類型不匹配,列不對應(yīng)等造成的)并且條數(shù)超過WARNINGCOUNT是就會停止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中操作都會改變自增序列的原值,這樣如果導(dǎo)出表和表之間有基于自增序列的關(guān)聯(lián)關(guān)系的話,就失去了數(shù)據(jù)本身的意義,所以建議盡量少用基于import的自增表的操作,那該怎么做?可以用load老代替import,我們下來在load的操作中會講到!

關(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完成后,表空間會處于暫掛狀態(tài),這時候只能查表中的數(shù)據(jù),需要對表空間進(jìn)行一次備份,才可以對表進(jìn)行update、insert等操作,那么我們可以使用如上2個命令,對于Copy YES,load完成以后會自動進(jìn)行一次備份操作;NONRECOVERABLE 指出load不可恢復(fù),此命令符不會產(chǎn)生表空間暫掛,也不會自動進(jìn)行表空間備份,但是他有一個缺點(diǎn)就是,不能恢復(fù),當(dāng)數(shù)據(jù)庫進(jìn)行回滾的時候,不能還原,危險等級還是比較高一點(diǎn),不過個人覺得也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

當(dāng)數(shù)據(jù)在2個不同數(shù)量節(jié)點(diǎn)的數(shù)據(jù)庫之間移動,如果還想使用load來進(jìn)行IXF的數(shù)據(jù)裝載就比較棘手了,當(dāng)時查遍IBM的官方文檔均無所獲,正郁郁不安時,狼出現(xiàn)了,給支了一招,現(xiàn)分享給大家。

首先,把ixf文件復(fù)制和分區(qū)數(shù)量相同的文件,并后綴.000(分區(qū)號),

比如,2個分區(qū),那么我需要把原來的a.ixf,拷貝2個,并命名為a.ixf.000以及a.ixf.001

然后,load from staff.ixf of ixf replace into t1 partitioned db configmode load_only_verify_part part_file_location xxxx(part_file_location為a.ixf.000所在的目錄),當(dāng)然如果在unix下的話,可以通過ln –s 來做一個連接也行。

5. 對于自增序列(GENERATED ALWAYS)

MODIFIED BY IDENTITYOVERRIDE:此參數(shù)可以理解為,采用文件load文件中的自增值做為表自增序列的值,這樣就能保證對于自增序列有業(yè)務(wù)意義,或者關(guān)聯(lián)邏輯(主外鍵關(guān)聯(lián))的情況下保證數(shù)據(jù)的一致。

例:  LOAD CLIENT FROM 'F:\s1.del' OF DEL MODIFIED BY IDENTITYOVERRIDE INSERT INTO DB2ADMIN.ztables;

6. 對于自增序列(GENERATED by default)

GENERATED by default可以直接通過一般的導(dǎo)入方式加載數(shù)據(jù),不過有時候會有一點(diǎn)點(diǎn)小問題,自增序列沒有進(jìn)行分配,也就是說,原來表有50條記錄,自增序列的下一次分配值為50,當(dāng)你已經(jīng)導(dǎo)入了1000條記錄進(jìn)去了,然后發(fā)現(xiàn)自增序列的下一次分配值還是為50,這種事不經(jīng)常發(fā)生,但是偶爾會發(fā)生一次,比較郁悶的是,當(dāng)表繼續(xù)插入數(shù)據(jù)的時候,下一次分配就會發(fā)生沖突,尤其是如果自增建為主鍵的時候,會違反唯一約束。

解決辦法:首先找到這個序列分配的最大值,select max(id) from tablea;

然后用下邊這個命令,alter table tablea alter column restart  with max(id)+1

7.ROWCOUNT/WARNINGCOUNT

  這個同IMPORT

8.terminate,restart

如果load的過程中出了點(diǎn)故障,比如連接被force掉了等,這時連接查詢表數(shù)據(jù)會報錯SQL0668N,原因碼3,這時可以通過帶有terminate的load命令來進(jìn)行處理!

LOAD CLIENT FROM 'F:\s1.del' OF DEL terminate INTO DB2ADMIN.ztables;

9. set integrity 命令

如果表上有約束,那么給表load數(shù)據(jù)以后,一般連接表的時候都會報錯,SQL0668N,原因碼1,這說明該表處于“設(shè)置完整性暫掛無訪問”狀態(tài),那么需要如下命令來操作。

Set integrity for schema.tablename immediate checked;

10.提高導(dǎo)入導(dǎo)出速度的數(shù)據(jù)庫參數(shù)

CONFIGURATION:應(yīng)用程序堆大小,該參數(shù)指示可由Backup,restore,load及裝入恢復(fù)應(yīng)用程序同事使用的最大內(nèi)存量,這個值可以設(shè)置為10000*cpu數(shù)量。

DB2 'UPDATE DATABASE CONFIGURATION USING UTIL_HEAP_SZ 113486'

“DB2導(dǎo)入和導(dǎo)出數(shù)據(jù)的方法”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

db2
AI