首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

DB2 資料移動利器:LOAD 裝入命令深度解析與實戰範例

     編輯:DB2 教學

LOAD 命令概述

LOAD 命令格式與 IMPORT 類似,關鍵字為 LOAD,但參數更豐富,詳細用法請參考 DB2 文件。兩者皆將輸入檔案資料移入目標表,差異將在實例中逐一說明。LOAD 前目標表必須已存在。LOAD 效能優於 IMPORT,原因稍後結合實例詳細解釋。LOAD 操作不記錄日誌,無法使用日誌檔案進行前滾恢復。

LOAD 四大階段

  1. 裝入階段:資料存入表中,收集並排序索引鍵。DBA 可指定生成一致點的時間間隔,作為檢查點。中斷時可從最後一致點重新開始。
  2. 建立階段:基於裝入階段收集的索引鍵資訊建立索引。錯誤時從建立階段重啟。
  3. 刪除階段:違反唯一或主鍵約束的行被刪除並複製到例外表(若指定),訊息檔案記錄拒絕資訊。
  4. 索引複製階段:若指定系統暫存表空間並選擇 READ ACCESS 選項,索引資料從系統暫存表空間複製回目標表空間。

四階段皆為操作一部分,全部完成才算結束。各階段產生訊息協助 DBA 分析解決問題。IMPORT 每插入一行檢查約束並記日誌,LOAD 則批次處理。

LOAD 獨有功能實戰範例

範例 12:從游標類型檔案裝入

DECLARE mycur CURSOR FOR SELECT * FROM org;
CREATE TABLE org2 LIKE org;
LOAD FROM mycur OF CURSOR INSERT INTO org2;

除游標外,尚支援檔案、管道、裝置裝入;IMPORT 僅支援檔案。

範例 13:例外表應用

使用者定義的例外表儲存違反唯一約束與主鍵約束的行。未指定例外表時,違規行將被捨棄無法恢復。

CREATE TABLE STAFF1 LIKE STAFF;
INSERT INTO STAFF1 SELECT * FROM STAFF WHERE ID <= 160;
CREATE TABLE STAFFEXP LIKE STAFF1;
ALTER TABLE STAFFEXP ADD COLUMN TIME TIMESTAMP;
CREATE UNIQUE INDEX IDXSTAFF ON STAFF1(ID);
EXPORT TO D:STAFF.TXT OF DEL SELECT * FROM STAFF;
LOAD FROM D:STAFF.TXT OF DEL INSERT INTO STAFF1 FOR EXCEPTION STAFFEXP;

因 STAFF1 有唯一索引,部分資料違反約束無法插入,自動導向例外表 STAFFEXP。注意:例外表必須預先定義,LOAD 無法自動建立。

範例 14:DUMP 檔案處理格式錯誤資料

格式不正確的行會被拒絕,指定 DUMPFILE 檔案類型修飾符可將被拒記錄單獨存放。

LOAD FROM D:STAFF.TXT OF DEL MODIFIED BY DUMPFILE=d:dump 
     INSERT INTO STAFF1 FOR EXCEPTION STAFFEXP;

結果報告顯示轉換錯誤(如字串無法轉 SMALLINT),違反唯一約束的資料進入例外表。表進入「裝入掛起」狀態,需重新啟動或終止:

# 終止裝入,恢復表正常可用
LOAD FROM D:STAFF.TXT OF DEL TERMINATE INTO STAFF1;

# 修正來源檔案後重新啟動
LOAD FROM D:STAFF.TXT OF DEL RESTART INTO STAFF1;

範例 15:防止產生警告訊息

使用 NOROWWARNINGS 檔案類型修飾符禁止警告訊息,大量警告時可大幅提升裝入效率:

LOAD FROM D:STAFF.TXT OF DEL MODIFIED BY NOROWWARNINGS INSERT INTO STAFF1;

範例 16:裝入過程中生成統計資料

STATISTICS 選項在裝入時生成統計資料供優化器決定最佳執行計畫。支援不同詳細層級:

# 最詳細統計(表與索引)
LOAD FROM D:STAFF.TXT OF DEL REPLACE INTO STAFF1 
     STATISTICS YES WITH DISTRIBUTION AND DETAILED INDEXES ALL;

# 簡略統計
LOAD FROM D:STAFF.TXT OF DEL REPLACE INTO STAFF1 
     STATISTICS YES AND INDEXES ALL;

注意:STATISTICS 僅與 REPLACE 相容,不相容 INSERT。結果需查詢系統表查看。

範例 17:解除檢查掛起狀態

裝入資料違反檢查約束導致表進入檢查掛起狀態:

CONNECT TO sample;
CREATE TABLE STAFF1 LIKE STAFF;
ALTER TABLE STAFF1 ADD CONSTRAINT CHK CHECK(DEPT < 100);
# 修改資料檔使最後一行 DEPT=150 違反約束
LOAD FROM D:STAFF.TXT OF DEL INSERT INTO STAFF1;
SELECT * FROM STAFF1;  -- 錯誤 SQL0668N 原因代碼 1

# 解除檢查掛起
SET INTEGRITY FOR STAFF1 CHECK IMMEDIATE UNCHECKED;
SELECT * FROM STAFF1;  -- 正常可用,違規資料保留

範例 18:效能調優參數

大量資料時 LOAD 明顯優於 IMPORT:不逐行插入檢查約束、直接寫入資料庫頁、不寫日誌。

關鍵效能控制選項:

  • COPY YES/NO 與 NONRECOVERABLE:NONRECOVERABLE 標記表為無效;COPY NO(預設)導致表空間備份掛起;COPY YES 變更存至磁帶/目錄/TSM,表空間不進入備份掛起。
  • FASTPARSE:減少資料檢查,適用已知正確的 DEL/ASC 檔案。
  • ANYORDER:不遵循輸入順序裝入,SMP 系統上 CPU_PARALLELISM > 1 時提升效能。
  • DATA BUFFER:指定 4K 記憶體頁面數作為內部緩衝區,大緩衝區提升效能。
  • CPU_PARALLELISM:SMP 系統指定解析/轉換/格式化資料的進程/執行緒數。
  • DISK_PARALLELISM:指定寫入磁碟的進程/執行緒數。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved