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

DB2 LOAD FROM CURSOR 實戰:高效跨表空間與跨數據庫數據遷移指南

     編輯:DB2 教學

簡介

傳統的 DB2 數據遷移通常包含三個步驟:從源數據庫導出數據到臨時文件、在系統間傳輸文件、再將數據導入或載入目標數據庫。當數據量龐大時,EXPORT 實用程序生成交換文件耗時極長,且還需處理不同編碼頁與作業系統的兼容性問題。

DB2 LOAD 實用程序的 FROM CURSOR 選項提供了一種更優雅的解決方案:它允許直接將 SQL 查詢的結果集作為載入操作的數據源,完全省去了生成臨時文件的環節。這不僅大幅縮短遷移時間,還簡化了跨表空間、跨數據庫的數據轉移流程。本文將透過實例演示如何使用命令行處理器 (CLP) 與 ADMIN_CMD 預存程序兩種介面執行 LOAD FROM CURSOR 操作。

場景一:將表移動到另一個表空間

當表空間頁面大小不合適、需更換緩衝區池,或早期版本受限於表空間大小上限時,往往需要將表遷移至新表空間。DB2 9.1 起引入大表空間,大幅提高了大小限制,但調整表空間配置的需求依然常見。

準備工作:建立範例環境

首先建立 SAMPLE 數據庫(清單 1),其中包含 SALES 表,預存於 USERSPACE1 表空間。透過查詢系統編目視圖可確認表所屬表空間(清單 2、3)。

C:>db2sampl
Creating database "SAMPLE"...
Connecting to database "SAMPLE"...
Creating tables and data in schema "FECHNER"...
'db2sampl' processing complete.
C:>db2 "SELECT TABLES.TABSCHEMA, TABLES.TABNAME, TBSPACES.TBSPACE 
FROM SYSCAT.TABLES AS TABLES, SYSCAT.TABLESPACES AS TBSPACES 
WHERE TABLES.TBSPACEID = TBSPACES.TBSPACEID AND TABNAME = 'SALES'"
TABSCHEMA TABNAME TBSPACE
FECHNER   SALES   USERSPACE1

目標表空間 IBMDB2SAMPLEREL 同樣為大表空間,適合作為遷移目標。

建立目標表並執行遷移

在目標表空間建立結構相同的空表 SALES_TMP(清單 4),再宣告游標讀取源表數據,最後執行 LOAD FROM CURSOR 將數據直接載入新表(清單 5)。

C:>db2 "CREATE TABLE FECHNER.SALES_TMP LIKE FECHNER.SALES IN IBMDB2SAMPLEREL"
DB20000I The SQL command completed successfully.
C:>db2 "DECLARE C1 CURSOR FOR SELECT * FROM FECHNER.SALES"
DB20000I The SQL command completed successfully.
C:>db2 "LOAD FROM C1 OF CURSOR MESSAGES C:load_sales_tmp.msg 
INSERT INTO FECHNER.SALES_TMP NONRECOVERABLE"
Number of rows read = 41
Number of rows loaded = 41
...

注意:使用 NONRECOVERABLE 選項意味著該載入操作無法在前滾恢復中重做,操作完成後應盡快執行資料庫或表空間備份。

完成遷移:刪除舊表、重命名新表

資料驗證無誤後,刪除原 SALES 表並將 SALES_TMP 重命名為 SALES(清單 6)。再次查詢編目確認表已遷移至 IBMDB2SAMPLEREL(清單 7)。

C:>db2 "DROP TABLE FECHNER.SALES"
C:>db2 "RENAME TABLE FECHNER.SALES_TMP TO SALES"

場景二:跨數據庫複製表數據

LOAD FROM CURSOR 同樣支援跨數據庫遷移,主要有兩種路徑:

  • 方法一:在目標數據庫啟用聯合資料庫機制,透過 DRDA 包裝器訪問源數據庫。
  • 方法二:直接使用 LOAD FROM CURSOR 的遠程訪問特性(需配置節點與數據庫目錄)。

本文詳細演示方法一:建立目標數據庫 MYSAMPLE,啟用 FEDERATED 參數並重啟實例;使用 db2look 提取源表 DDL 並在目標庫建立空表;配置節點目錄、數據庫目錄;建立包裝器、伺服器定義、用戶映射與別名(清單 8-14);最後透過別名查詢遠程表並載入本地。

總結

LOAD FROM CURSOR 以「零臨時文件」特性,成為 DB2 環境下高效、靈活的數據遷移利器。無論是表空間調整還是異構數據庫同步,均能顯著降低操作複雜度與耗時。結合 ADMIN_CMD 更可嵌入應用程式或預存程序,實現自動化遷移流程。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved