程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> 更多數據庫知識 >> DB2文件導入導出常見命令總結(基礎教程)

DB2文件導入導出常見命令總結(基礎教程)

編輯:更多數據庫知識

    Db2 的數據遷移,最常用的就是導入導出功能,而導入導出的命令貌似簡單,實則內含玄機,千變萬化,稍不留神,則錯誤百出,這兒就工作中常用到的命令,總結了一下,分享給大家!

    當然在這以前,我覺得有必要提及一點關於導入導出基礎的知識!
    DEL:界定的ASCII文件,行分隔符和列分隔符將數據分開。
    ASC:定長的ASCII文件,行按照行分割符分開,列定長。
    PC/IXF:只能用來在db2之間導數據,根據類型數字值被打包成十進制或者二進制,字符被保存為ASCII,只保存變量已經使用了的長度,文件中包括表的定義和表的數據。
    WSF:工作表方式導入導出,這種格式的文件類型用的比較少。
    Db2中對不同的數據導入導出方式,支持不同的文件類型,這裡個人覺得很有必要注意的。
    文件類型 Import export load
    -------------------------------------------------------
    定界 支持 支持 支持
    非定界 支持 不支持 支持
    Ixf 支持 支持 支持
    Wsf工作表 支持 支持 不支持
    關於3種導入導出操作進行簡單的介紹:
    export:導出數據,支持IXF,DEL或WSF
    import:導入數據,可以向表中導入數據,支持上面提到的4種文件類型。
    load:導入數據,功能和import基本相同。支持以上說的幾種文件類型。
    關於Export
    這個其實比較簡單,沒啥好說的,一般命令:export to filename of filetype select x from xx where ;就ok了,這裡需要注意的是:
    1. 關於不同字符集的導出
    MODIFIED BY CODEPAGE=
    Exprot to filename.del for del MODIFIED BY CODEPAGE=1386 select … from …where …;
    這裡,在數據從數據庫倒出來的時候就會做一個數據庫代碼頁的轉換
    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 …;
    關於Import
    1.Import模式的介紹
    CREATE/INSERT/INSERT_UPDATE/REPLACE/REPLACE_CREATE
    CREATE :首先創建目標表和它的索引,然後將數據導入到新表中。該選項惟一支持的文件格式是 PC/IXF。還可以指定新表所在表空間的名稱
    INSERT :將導入的數據插入表中。目標表必須已經存在。
    INSERT_UPDATE :將數據插入表中,或者更新表中具有匹配主鍵的行。目標表必須已經存在,並且定義了一個主鍵。
    REPLACE :刪除所有已有的數據,並將導入的數據插入到一個已有的目標表中。
    REPLACE_CREATE :如果目標表已經存在,則導入實用程序刪除已有的數據,並插入新的數據,就像 REPLACE 選項那樣。如果目標表還沒有定義,那麼首先創建這個表以及它的相關索引,然後再導入數據。正如您可能想像的那樣,輸入文件必須是 PC/IXF 格式的文件,因為那種格式包含對導出表的結構化描述。如果目標表是被一個外鍵引用的一個父表,那麼就不能使用 REPLACE_CREATE。
    2. 批量提交
    COMMITCOUNT,保證insert的數據在COMMITCOUNT以後進行一次commit,這對於大數據量的導入文件來說是一個不錯的方法,
    例:Import from filename of del COMMITCOUNT 50000 insert into tabname;

    3. 批量插入
    MODIFIED BY COMPOUND把文件中的 COMPOUND 行記錄作為一組一起導入,這個操作可以和上邊的批量提交一起使用,比較理想。
    例:Import from filename of del MODIFIED BY COMPOUND =50 insert into tabname;
    4. 導入記錄限制
    ROWCOUNT:只導入rowcount 條數據,有時候,業務邏輯需要只導入部分數據,那麼ROWCOUNT是一個不錯的選擇,只是在我的測試中ROWCOUNT一直沒有起過作用,呵呵,誰熟悉這裡,幫我完善下。
    例:Import from filename of del ROWCOUNT 10000 insert into tabname;
    5. 導入起點
    RESTARTCOUNT:從導入文件的第RESTARTCOUNT條記錄開始導入
    例:Import from filename of del RESTARTCOUNT 55 ROWCOUNT 10000 insert into tabname;--從55條開始,導入10000條數據
    6. 有警告數據的條數限制
    WARNINGCOUNT:當導入的數據中,有警告或錯誤(例如類型不匹配,列不對應等造成的)並且條數超過WARNINGCOUNT是就會停止import。
    例:Import from filename of del WARNINGCOUNT 10 insert into tabname;
    7. 禁止發出行警告
    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)
    建議不要對自增序列的表進行import操作,因為import對於自增序列,只有MODIFIED BY IDENTITYIGNORE和MODIFIED BY IDENTITYMISSING的2中操作,這2中操作都會改變自增序列的原值,這樣如果導出表和表之間有基於自增序列的關聯關系的話,就失去了數據本身的意義,所以建議盡量少用基於import的自增表的操作,那該怎麼做?可以用load老代替import,我們下來在load的操作中會講到!
    關於Load
    1. 字符串間隔,列間隔,小數點表示
    CHARDEL/COLDEL/DECPT
    例:LOAD CLIENT FROM 'F:s1.del' OF DEL MODIFIED BY CHARDEL(COLDEL= DECPT? INSERT INTO "DB2ADMIN"."ZXTABLES"
    2.數據庫記錄中存在換行符,導致數據無法裝入的情況
    MODIFIED BY DELPRIORITYCHAR
    Db2默認load優先級策略為,record delimiter, character delimiter, column delimiter,這樣record delimiter得優先級最高,所以原始文件如果有換行的話load就認為是新的record,如果用戶在某些情況下行裡面包含了換行符(比如論壇裡面的一條帖子,不可能把換行符刪掉的),就必須用delprioritychar改變默認的優先級別,確保""之間的數據不管有沒有換行符都被認為是同一條記錄
    例:LOAD CLIENT FROM 'F:s1.del' OF DEL MODIFIED BY DELPRIORITYCHAR INSERT INTO DB2ADMIN.ZXTABLES
    3.load後表空間暫掛的處理
    Copy YES/ NONRECOVERABLE
    對於DMS表空間,load默認為copy NO 模式,此模式下,load完成後,表空間會處於暫掛狀態,這時候只能查表中的數據,需要對表空間進行一次備份,才可以對表進行update、insert等操作,那麼我們可以使用如上2個命令,對於Copy YES,load完成以後會自動進行一次備份操作;NONRECOVERABLE 指出load不可恢復,此命令符不會產生表空間暫掛,也不會自動進行表空間備份,但是他有一個缺點就是,不能恢復,當數據庫進行回滾的時候,不能還原,危險等級還是比較高一點,不過個人覺得也NONRECOVERABLE比較實用。
    例: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類型文件到多分區數據庫
    partitioned db configmode load_only_verify_part part_file_location
    當數據在2個不同數量節點的數據庫之間移動,如果還想使用load來進行IXF的數據裝載就比較棘手了,當時查遍IBM的官方文檔均無所獲,給支了一招,現分享給大家。

*
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved