Posted on 2009-03-25 13:31
Prayer 閱讀(584)
評論(0) 編輯 收藏 引用 所屬分類:
DB2
DB2:數據的傳輸
Db2提供了如下幾個工具用來傳輸數據:
? Export:Export可以將一個select語句所選擇的數據輸出到指定格式的文件;
? Import:與Export相反,Import工具從文件讀取數據,并利用Insert語句將數據插入到表格之中。值得注意的一點是,執行Import指令的過程中,平常單獨支持Insert語句所觸發的限制檢查和觸發器同樣也會工作;
? Load:與Import類似,Load工具同樣用來加載數據,只是它不使用Insert語句,它直接加載數據頁,所以它的數度更快。在Load過程中,表格上定義的各種限制和觸發器將暫時實效,Load數據之后,要使用SET INTEGRITY指令檢查剛剛加載的數據;
? db2move:此工具用來批量移動多個表格;
Export,Import和Load可以使用一下4種格式的數據文件:
? DEL或者ASC:這兩種格式均為文本格式,只包含數據,不包含表結構的定義;
? IXF:這種格式的文件同時包含數據和表結構的定義,索引和主鍵,但是不包含外鍵,限制和觸發器等;
? WSF:這種格式的文件用來與Lotus 1-2-3等電子表格交換數據;
Export:
執行Export需要SYSADM,SYSCTRL,或者SYSMAINT的權利,或者是對輸出的表格或者視圖有CONTROL的權限;
使用Export的例子如下:
? EXPORT TO staff.del OF DEL MESSAGE export.msg
SELECT * FROM Vicky.staff
? EXPORT TO Vicky.ixf OF IXF
METHOD N ( name, dept, salary ) MESSAGE export.msg
SELECT name, dept, salary
FROM Vicky.staff
WHERE salary >= 20000
Import:
執行Import指令可以使用下列幾種模式:
? INSERT:目標表格必須已經存在,現有表格的數據頁不會受到影響;
? INSERT_UPDATE:目標表格必須存在,而且定義有主鍵。如果新輸入的數據與現有數據的主鍵相等,則更新,否則插入;
? REPLACE:目標表格必須存在,所有現存的數據將被刪除;
? CREATE(僅適于IXF文件):目標表格不存在,Import指令會利用IXF文件種的信息建立表格與索引,并插入數據;
? REPLACE_CREATE(僅適于IXF文件):如果目標表格存在,現存數據被刪除,被新數據所取代;如果目標表格不存在,則同CREATE模式;
Import指令根據不同的數據文件格式,需要使用METHOD選項指定數據列字段以及起位置;
? METHOD L:對于ASC格式的文件,必須指定每個字段的起始與結束位置;例如:
IMPORT FROM myfile.asc OF ASC METHOD L ( 1 10, 12 15 )
INSERT INTO vicky.staff
? METHOD N:對于IXF文件,指定字段的名稱;例如:
IMPORT FROM myfile.ixf OF IXF METHOD N ( c1, c2, c3 )
INSERT INTO vicky.staff ( c1, c2, c3 )
? METHOD P:對于DEL和IXF文件,指定字段的號碼;例如:
IMPORT FROM datafile1.del OF DEL METHOD P ( 1, 3, 4)
REPLACE INTO vicky.staff ( c1, c3, c4)
Import使用INSERT語句插入數據,該操作受事務日志所保護,可以在Import語句中使用commitcount選項指定每個事務的插入記錄數,如:
? IMPORT FROM order_item.ixf OF IXF COMMITCOUNT 1000
MESSAGE import.msg INSERT INTO vicky.order_item
還可以使用RESTARTCOUNT指定從第幾筆數據開始導入,如從10001筆開始導入:
? IMPORT FROM order_item.ixf of IXF RESTARTCOUNT 10000
MESSAGE import.msg INSERT INTO vicky.order_item
Load:
Load工具不單可以從文件加載數據,還可以從Pipe中或者是磁帶機等外設中加載數據;使用Load時要注意如下幾點:
? Load數據之前,表格必須存在;
? Load數據前先建立索引;
? Load過程不受事務日志保護,可以指定COPY YES選項使Load結束自動進行備份;
? Load數據后需要用SET INTEGRITY語句將不合乎限制的數據放入例外表格;
? Load過程中觸發器不起作用;
? Load只有在REPLACE模式下才可以自動收集統計信息,此時STATISTICS YES為默認選項;
? Load使用sqllib/tmp為默認臨時空間,可以使用TEMPFILE PATH指定其他目錄;
? 在SMP環境中Load可以指定使用多個CPU;
? 加載過程中可以使用QUERY指令查看加載進度,如:
LOAD QUERY TABLE vicky.staff
使用Load的例子如下:
? LOAD FROM tools.ixf OF IXF MESSAGE load.msg
INSERT INTO vicky.tools
FOR EXCEPTION vicky.badtools
? LOAD FROM tools.ixf OF IXF MESSAGE load.msg
REPLACE INTO vicky.tools
STATISTICS YES WITH DISTRIBUTION AND DETAILED INDEXES ALL
COPY YES TO /opt/backup
Load建立索引時可以指定如下幾種模式(INDEXING MODE):
? REBUILD:對表格中的所有數據重建索引結構;
? INCREMENTAL:將加載數據的索引列加入原有的索引結構中;
? AUTOSELECT:由Load自動選擇采用REBUILD或者INCREMENTAL;
? DEFERRED:延遲建立索引結構(至于什么時候建立索引取決與INDEXREC參數;
SET INTEGRITY的例子:
? SET INTIGRITY FOR vicky.tools, vicky.staff
IMMEDIATE CHECKED
FOR EXCEPTION IN vicky.tools USE vicky.badtools,
IN vicky.staff USE vicky.badstaff
? SET INTEGRITYCONSTRAINTS FOR vicky.staff ALL IMMEDIATE UNCHECKED