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

DB2 基礎知識:SQL 管理例程實戰——透過 SQL 直達 DB2 管理核心

     編輯:DB2 教學

前言:SQL 管理例程——基於 SQL 的管理命令入口

IBM DB2 UDB SQL 管理例程包含一組內建表函數、過程、標量函數,執行各類 DB2 管理任務:執行操作(如重組表)、檢索報表(如返回系統快照數據結果集)、返回應用使用的單一值(如當前連接應用 ID)。使基於 SQL 的應用能發出管理命令,無需經 CLP 解析。部分例程無參數,部分有輸入/輸出參數。表函數以可查詢表形式返回結果集。

常用 SQL 管理例程速查表

例程名稱類型描述範例
ADMIN_CMD過程用 SQL CALL 執行 DB2 CLP 管理命令。支援:DESCRIBE、EXPORT、PRUNE HISTORY/LOGFILE、REORG INDEXES/TABLE、RUNSTATS、UPDATE DATABASE CONFIGURATIONCALL 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

兩個完整實戰範例

範例 1:嵌入式 SQL 應用捕獲表快照填充資料庫表

在 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 表頁面與寫入行數增長。

範例 2:調用 ADMIN_CMD 執行 DB2 EXPORT

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 的易用替代品。文中描述眾多例程並提供工作實例,含過程調用示例程式、使用表函數結果集影響表更新的示例程式。

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