DB2 V9 引入表分區,ALTER TABLE ... ATTACH/DETACH PARTITION 實現零資料移動的滾入/滾出,大幅提升大型資料庫管理效能。NSE (Net Search Extender) 透過文本索引實現高效全文搜尋,索引由文檔重要詞項組成,建立後需更新(初始更新)方可使用。

db2start
db2text start
db2 CREATE DB MYDB
db2 CONNECT TO MYDB
export DB2DBDFT=mydb
db2text enable database for text
啟用資料庫自動建立 DB2EXT、SYSIBMTS 綱下目錄表。
CREATE TABLE part.multipart (
pk INTEGER NOT NULL PRIMARY KEY,
year INTEGER NOT NULL,
value INTEGER NOT NULL,
comment VARCHAR(128)
) PARTITION BY RANGE (year) (STARTING 2000 ENDING 2004 EVERY 1);
INSERT INTO part.multipart VALUES
(1,2001,1,'blue and grey'), (2,2001,1,'yellow or red'),
(3,2002,1,'red checkered with blue'), (4,2002,1,'white and black'),
(5,2003,1,'grey or green');
-- 分區表建文本索引必須指定 administration tables in
db2text "create index part.multiind for text on part.multipart(comment) administration tables in USERSPACE1"
預設使用 index configuration(auxlog ON) 啟用輔助日誌。非分區表預設 auxlog OFF。分區表設 OFF 雖允許但不建議(失去完整性同步)。
建立索引後新增目錄表(以索引 ID 322707 為例):
DB2EXT.TLOGIX322707:主日誌表(記錄 UPDATE)DB2EXT.TEVENTIX322707:事件表(更新資訊/問題)SYSIBMTS.SYSTSAUXLOG_IX322707:輔助登台表(記錄 INSERT/DELETE)SYSIBMTS.SYSTSMQT_IX322707:特殊 MQT,完整性架構一部分db2text "update index part.multiind for text"
db2 "select * from part.multipart where contains(comment, '\"blue\"')=1"
-- 回傳 pk 1, 3
-- 新增 3 筆、刪除 pk=3、更新 pk=5
INSERT INTO part.multipart VALUES (6,2001,1,'new blue and grey'), (7,2001,1,'new yellow or red'), (8,2002,1,'new red checkered with blue');
DELETE FROM part.multipart WHERE pk=3;
UPDATE part.multipart SET comment='update grey or green' WHERE pk=5;
-- 更新索引前搜尋:刪除項消失,新增/更新項未被索引捕獲
-- 查詢日誌表:
SELECT * FROM DB2EXT.TLOGIX322707; -- 1 筆:pk=5 (UPDATE)
SELECT * FROM SYSIBMTS.SYSTSAUXLOG_IX322707; -- 4 筆:pk=6,7,8 (INSERT), pk=3 (DELETE, OPERATIONTYPE=-1)
-- 更新索引後:
db2text "update index part.multiind for text"
-- 搜尋 blue/new/update 均正確回傳
-- 日誌表資料已清空
驗證:UPDATE 進主日誌,INSERT/DELETE 進輔助日誌,更新索引後同步完美、日誌自動清空。
-- 準備 data.del (year=2005 7 筆資料)
ALTER TABLE part.multipart ADD PARTITION STARTING 2005 ENDING 2005;
LOAD FROM data.del OF DEL INSERT INTO part.multipart;
-- 7 筆載入成功,但查詢報 SQL0668N reason code 1(表處於 Set Integrity Pending 狀態)
此時需執行 SET INTEGRITY FOR part.multipart IMMEDIATE CHECKED 完成完整性檢查,文本索引同步機制將自動捕獲 LOAD 載入的新分區資料(透過輔助日誌),後續更新索引即可搜尋。
| 特性 | 傳統觸發器模式 | V9.7 完整性處理模式 |
|---|---|---|
| 捕獲範圍 | 僅 IUD | IUD + LOAD + ATTACH/DETACH PARTITION |
| 日誌結構 | 單一主日誌表 | 主日誌表 + 輔助登台表 |
| 分區表預設 | 不支援 | auxlog ON(強制啟用) |
| 非分區表預設 | auxlog OFF | auxlog OFF(可選啟用) |
| 索引一致性 | 易因非 IUD 操作失效 | 全路徑捕獲,強一致性 |
administration tables in 子句並保持 auxlog ONDB2EXT.TEVENTIX* 事件表偵測同步異常SET INTEGRITY ... IMMEDIATE CHECKED 觸發輔助日誌捕獲