IBM DB2 UDB SQL 管理例程包含一組內建表函數、過程、標量函數,執行各類 DB2 管理任務:執行操作(如重組表)、檢索報表(如返回系統快照數據結果集)、返回應用使用的單一值(如當前連接應用 ID)。使基於 SQL 的應用能發出管理命令,無需經 CLP 解析。部分例程無參數,部分有輸入/輸出參數。表函數以可查詢表形式返回結果集。
| 例程名稱 | 類型 | 描述 | 範例 |
|---|---|---|---|
| ADMIN_CMD | 過程 | 用 SQL CALL 執行 DB2 CLP 管理命令。支援:DESCRIBE、EXPORT、PRUNE HISTORY/LOGFILE、REORG INDEXES/TABLE、RUNSTATS、UPDATE DATABASE CONFIGURATION | CALL SYSPROC.ADMIN_CMD('DESCRIBE SELECT * FROM STAFF')CALL SYSPROC.ADMIN_CMD('EXPORT TO /home/melnyk/output/sales.del OF DEL MESSAGES /home/melnyk/output/export.msg SELECT * FROM SALES') |
| ADMIN_LIST_HIST | 表函數 | 從歷史文件返回信息 | SELECT eid, operation, start_time FROM TABLE(SYSPROC.ADMIN_LIST_HIST()) AS listhistory |
| APPLICATION_ID | 標量函數 | 返回當前連接應用 ID (VARCHAR(128)) | SELECT APPLICATION_ID() AS appl_id FROM SYSIBM.SYSDUMMY1 |
| ENV_GET_INST_INFO | 表函數 | 返回實例信息 | SELECT inst_name, is_inst_partitionable, num_dbpartitions, inst_ptr_size FROM TABLE(SYSPROC.ENV_GET_INST_INFO()) AS instanceinfo |
| ENV_GET_PROD_INFO | 表函數 | 返回安裝產品信息 | SELECT installed_prod, prod_release FROM TABLE(SYSPROC.ENV_GET_PROD_INFO()) AS productinfo |
| ENV_GET_SYS_INFO | 表函數 | 返回系統信息 | SELECT os_name, host_name, total_memory FROM TABLE(SYSPROC.ENV_GET_SYS_INFO()) AS systeminfo |
| GET_DBM_CONFIG | 表函數 | 兩行返回數據庫管理器配置(磁盤值/內存值) | SELECT dbmconfig_type, numdb, diaglevel FROM TABLE(SYSFUN.GET_DBM_CONFIG()) AS dbmcfg |
| GET_DBSIZE_INFO | 過程 | 計算並返回資料庫大小與最大大小(位元組) | CALL SYSPROC.GET_DBSIZE_INFO(?,?,?,0) |
| HEALTH_* | 表函數 | 從快照返回容器/資料庫/管理器/表空間健康指標與歷史信息 | SELECT snapshot_timestamp, SUBSTR(container_name,1,24) AS container_name, hi_id, hi_value, hi_timestamp, hi_alert_state FROM TABLE(SYSPROC.HEALTH_CONT_HI('SAMPLE',-1)) AS health_cont_hi |
| REBIND_ROUTINE_PACKAGE | 過程 | 重新綁定 SQL 過程相關包 | CALL SYSPROC.REBIND_ROUTINE_PACKAGE('P','melnyk.update_inventory','ANY') |
| REG_LIST_VARIABLES | 表函數 | 返回當前使用的 DB2 註冊表設置 | SELECT SUBSTR(reg_var_name,1,24) AS reg_var_name, SUBSTR(reg_var_value,1,12) AS reg_var_value, level FROM TABLE(SYSPROC.REG_LIST_VARIABLES()) AS registryinfo |
| REORGCHK_IX_STATS | 過程 | 返回指示是否需重組索引的統計信息 | CALL SYSPROC.REORGCHK_IX_STATS('S','melnyk') |
| REORGCHK_TB_STATS | 過程 | 返回指示是否需重組表的統計信息 | CALL SYSPROC.REORGCHK_TB_STATS('T','melnyk.employee') |
| SNAP_GET_* | 表函數 | 從各邏輯數據組返回快照信息(表空間容器、資料庫、動態 SQL、儲存路徑、表、表空間、表空間節點信息) | SELECT snapshot_timestamp, SUBSTR(tabschema,1,16) AS tabschema, SUBSTR(tabname,1,16) AS tabname, tab_type, data_object_pages, rows_written, dbpartitionnum FROM TABLE(SYSPROC.SNAP_GET_TAB('SAMPLE',-1)) AS tabinfo |
| SNAPSHOT_* | 表函數 | 返回代理/應用/緩衝池/容器/資料庫/管理器/動態 SQL/FCM/鎖/語句/子區段/表/表重組/表空間快照信息 | SELECT lock_mode, lock_object_type, SUBSTR(table_name,1,16) AS table_name FROM TABLE(SYSPROC.SNAPSHOT_LOCK('SAMPLE',-1)) AS lockinfo WHERE lock_object_type IN (1,2,4,5,6,11,18,19) |
| SNAPSHOT_FILEW | 過程 | 將系統快照數據寫入文件供後續查詢 | CALL SYSPROC.SNAPSHOT_FILEW(1,'SAMPLE',-1); SELECT * FROM TABLE(SNAPSHOT_DBM(CAST(NULL AS INTEGER))) AS snapshot_dbm |
在 SAMPLE 資料庫創建 TABLE_SNAPSHOTS 表(清單 1),用多次調用 SNAP_GET_TAB 捕獲的表快照數據填充。列對應感興趣的快照列。INSERT INTO ... SELECT ... FROM TABLE(SYSPROC.SNAP_GET_TAB('SAMPLE',-1)) 嵌套在 C 程式 MYAPP1(清單 2)中。WHERE 條件排除系統生成表與 TABLE_SNAPSHOTS 自身。
CREATE TABLE table_snapshots (
snapshot_timestamp TIMESTAMP NOT NULL,
tabschema VARCHAR(16), tabname VARCHAR(16), tab_type BIGINT,
data_object_pages BIGINT, rows_written BIGINT, dbpartitionnum SMALLINT );
執行場景:用大量數據文件 staffdata.del (22,767 記錄) 導入 NEWSTAFF 表(Application 1),同步多次運行 MYAPP1 捕獲快照(Application 2),兩個 DB2 命令窗口並行。捕獲數據寫入 TABLE_SNAPSHOTS 可查詢顯示(清單 3):四次快照記錄了導入過程中 NEWSTAFF 表頁面與寫入行數增長。
C 程式 MYAPP2(清單 4)演示調用 ADMIN_CMD 執行 EXPORT。無論何時執行,SALES 表數據導出到 sales.del,消息寫 export.msg。注意:EXPORT 路徑必須是伺服器上有效完全限定路徑;輸出文件基於進程 ID 創建,進程 ID 必須有目錄寫入/執行權限(UNIX 下 chmod 733 <directory-name>)。
EXEC SQL CALL SYSPROC.ADMIN_CMD('EXPORT TO /home/melnyk/output/sales.del OF DEL MESSAGES /home/melnyk/output/export.msg SELECT * FROM SALES');
DB2 UDB SQL 管理例程讓您透過 SQL 便利訪問 DB2 管理函數,在應用中特別有用,代表訪問管理函數 C API 的易用替代品。文中描述眾多例程並提供工作實例,含過程調用示例程式、使用表函數結果集影響表更新的示例程式。