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

DB2 UDB V8.1 管理學習筆記 (三) - 目錄視圖、約束與監控

     編輯:DB2 教學

系統目錄視圖架構

約束與檢查暫掛

  • 現有資料不滿足約束時,無法定義該約束。
  • 大量匯入可暫時關閉約束檢查 (SET INTEGRITY ... OFF),表進入 CHECK PENDING 狀態,匯入完成後再啟用檢查。

常用目錄查詢速查

Schema用途權限
SYSIBM基礎系統目錄表 (內部使用)建議不直接存取
SYSCAT公開只讀視圖,PUBLIC 有 SELECT 權限查詢目錄資訊的推薦方式
SYSSTAT可更新的目錄視圖,影響優化器統計謹慎使用 (如 RUNSTATS 更新)
SYSFUN使用者定義函數--

欄位修改限制

  • 僅能修改 VARCHAR 類型,且只能增加長度,不能減少。

檢視表結構

DESCRIBE TABLE TABLE_NAME
-- 或
DESCRIBE SELECT * FROM SCHEMA.TABLE_NAME

索引進階特性

  • UNIQUE:強制插入值唯一。
  • ALLOW REVERSE SCANS:索引加入反向指標,支援雙向掃描。
  • INCLUDE 欄位:CREATE UNIQUE INDEX ON EMP (EMPNO) INCLUDE (LASTNAME, FIRSTNAME),額外欄位不參與排序/唯一性,但可滿足覆蓋索引查詢。
  • CLUSTER:CREATE INDEX IX_DEPT ON EMP (WORKDEPT) CLUSTER,嘗試維持資料物理順序與索引順序一致。

CHECK PENDING 狀態解除

-- 全部立即檢查 (若有違規會報錯)
SET INTEGRITY FOR TABLE_NAME ALL IMMEDIATE CHECKED

-- 全部立即檢查但不驗證現有資料 (快速解除狀態)
SET INTEGRITY FOR TABLE_NAME ALL IMMEDIATE UNCHECKED

鎖定與日誌控制

  • 取得表排他鎖:LOCK TABLE TABLE_NAME IN EXCLUSIVE MODE,COMMIT 釋放。
  • 關閉表日誌:ALTER TABLE TABLE_NAME ACTIVATE NOT LOGGED INITIALLY (僅對建立後首個單位工作有效) 或建表時指定 NOT LOGGED INITIALLY。
  • 刪除表:DROP TABLE SCHEMA.TABLE_NAME。
  • 重命名表:RENAME TABLE OLD TO NEW。
  • 取得目前時間戳:SELECT CURRENT TIMESTAMP FROM SYSIBM.SYSDUMMY1。

概要表 (MQT) - 類似 Oracle Materialized View

-- 可重新整理的概要表
CREATE SUMMARY TABLE SUM_TBL AS (SELECT * FROM SRC WHERE COL1='AAA')
DATA INITIALLY DEFERRED REFRESH DEFERRED;

-- 重新整理
REFRESH TABLE SUM_TBL;
  • DATA INITIALLY DEFERRED:建表時不載入資料。
  • REFRESH DEFERRED:手動執行 REFRESH TABLE 更新。

全域暫存表 (DGTT)

DECLARE GLOBAL TEMPORARY TABLE SESSION.TMP_EMP
AS (SELECT * FROM EMPLOYEE) DEFINITION ONLY
EXCLUDING IDENTITY COLUMN ATTRIBUTES
ON COMMIT DELETE ROWS
NOT LOGGED;
  • 僅存在於當前 Session,Commit 時自動清空資料 (ON COMMIT DELETE ROWS)。
  • NOT LOGGED:不寫日誌,效能佳。
  • 定義儲存於 SESSION Schema,實際資料在使用者暫存表空間。

視圖與別名管理

CREATE VIEW V_NAME AS SELECT * FROM TBL WHERE ...;
DROP VIEW V_NAME;
-- 查看視圖定義
SELECT TEXT FROM SYSCAT.VIEWS WHERE VIEWNAME='V_NAME';

CREATE ALIAS ALIAS_NAME FOR PRO_NAME;  -- PRO_NAME 可為 TABLE/VIEW/ALIAS/NICKNAME

Sequence 管理

CREATE SEQUENCE SEQ_NAME START WITH 1 INCREMENT BY 1 NO MAXVALUE NO CYCLE CACHE 24;
ALTER SEQUENCE SEQ_NAME ...;  -- 可修改 START/INCREMENT/MAXVALUE/CYCLE/CACHE
DROP SEQUENCE SEQ_NAME;

資料移動工具支援格式

查詢目的SQL
使用者擁有多少表SELECT * FROM SYSIBM.SYSTABLES WHERE CREATOR='USER'
使用者函數SELECT * FROM SYSIBM.SYSFUNCTIONS
使用者 View 數SELECT * FROM SYSIBM.SYSVIEWS WHERE CREATOR='USER'
DB2 版本資訊SELECT * FROM SYSIBM.SYSVERSIONS
使用者 TriggerSELECT * FROM SYSIBM.SYSTRIGGERS WHERE SCHEMA='USER'
表空間狀態SELECT * FROM SYSIBM.SYSTABLESPACES
Sequence 狀態SELECT * FROM SYSIBM.SYSSEQUENCES
Schema 狀態SELECT * FROM SYSIBM.SYSSCHEMATA
索引狀態SELECT * FROM SYSIBM.SYSINDEXES
表欄位定義SELECT * FROM SYSIBM.SYSCOLUMNS WHERE TBNAME='AAAA'
資料類型定義SELECT * FROM SYSIBM.SYSDATATYPES
緩衝池狀態SELECT * FROM SYSIBM.SYSBUFFERPOOLS

監控架構

  • 快照監控:特定時間點資料庫活動快照 (GET SNAPSHOT)。
  • 事件監控:記錄事件發生歷程 (CREATE EVENT MONITOR)。

監控資料元素類型

工具支援格式不支援
IMPORTDEL, ASC, IXF, WSF--
EXPORTDEL, IXF, WSFASC
LOADDEL, ASC, IXFWSF
DB2MOVEIXFASC, DEL, WSF

監控堆大小估算

(NUM_MON_APPS+1) * (NUM_DBS*(800+(NUM_TABLES_ACCESSED*20)) +
 ((NUM_APPS_CONNECTED+1)*(200+(NUM_TABLESPACES*100)))) / 4096
-- 受 MON_HEAP_SZ 參數控制

事件監控器操作

-- 建立寫入檔案的表事件監控器
CREATE EVENT MONITOR TBL_MON FOR TABLES WRITE TO FILE 'D:\TEMP';

-- 啟用/停用
SET EVENT MONITOR TBL_MON STATE 1;
SET EVENT MONITOR TBL_MON STATE 0;

-- 查詢狀態
SELECT EVMONNAME, EVENT_MON_STATE(EVMONNAME) FROM SYSCAT.EVENTMONITORS;

-- 刪除
DROP EVENT MONITOR TBL_MON;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
類型說明
Counter (計數器)活動發生次數
Gauge (測量)項目目前值
Watermark (水位)最大/最小達到值
Information (資訊)活動參考細節
Timestamp (時間點)發生日期時間
Time (耗時)活動花費時間