DB2中理解系統時間和業務時間

db2 不再僅僅面向 dba。長久以來,db2 因杰出的核心 dbms 功能而聞名于世,而如今,db2 使開發人員也能夠利用它的強大特性。這方面的一個示例就是直接在模式內實現基于時間的信息。這是通過 db2 10 for linux, unix, and windows 中新增的時態表來實現的。

db2 不再僅僅面向 dba。長久以來,db2 因杰出的核心 dbms 功能而聞名于世,而如今,db2 使開發人員也能夠利用它的強大特性。這方面的一個示例就是直接在模式內實現基于時間的信息。這是通過 db2 10 for linux, unix, and windows 中新增的時態表來實現的。

利用時態表,您能夠輕松地跟蹤和分析業務中的變化,準確對比兩個時間點的數據。該功能允許您有效執行和跟蹤數據更正,支持您在過去執行數據更改,也就是說,使之作為過去的某個特定時間點而“生效”,同時記錄執行更改的時間。時態表提供了顯示過去任意時間點數據的能力,也能顯示相同事務中的哪些信息發生過更改,更改是在何時執行的,因此能夠促進審計與合規性。

時態表是什么?

時態表允許您將基于時間的狀態信息與 DB2 管理的數據關聯,并使之與應用程序邏輯保持無關。DB2 中的時態表功能允許跟蹤數據更改(版本控制),支持自定義業務數據存儲和操作(以及兩者的結合)。

時態表分為兩種類型:系統和應用程序。DBA 可以使用雙時態表,同時利用兩種類型的功能。

時態表能簡化過去、現在和未來任意給定時間點的數據報告,因而有助于加強業務洞察。這種功能可提高開發人員的生產力(DB2 內的處理時間管理意味著更少的編碼工作,更簡單的編碼意味著維護成本的降低),因此可降低成本。時態表也能減少合規性工作,支持更好地跟蹤數據更改。時態表提供了基于標準的技術,能在整個企業的范圍內實現一致性和出色的數據質量。時態表深度集成所有特性,包括分區、壓縮和視圖。

系統時態表

系統表支持以操作時間(即操作系統時間)為依據的基于時間的功能。系統時態表利用歷史表,存儲數據的歷史版本。

您該如何實現系統時態表?首先,使用 SYSTEM_TIME 屬性創建或更改一個基礎表,包含以下三個具體生成列:

? 行起始列:行數據成為當前數據的時間
? 行結束列:行數據不再屬于當前數據的時間
? 事務起始 ID 列:影響該行的事務的起始執行時間。

接下來,創建一個完全相同的表,作為歷史表。該表必須使用與基礎表完全相同的布局。但您可以按照自己的需求配置歷史表,例如分區、壓縮或存儲位置。

第三步是使用 Alter 語句將歷史表與基礎表相關聯,并為基礎表添加版本控制,即:ALTER TABLE policy_info ADD VERSIONING USE HISTORY TABLE hist_policy_info。
例如:

CREATE TABLE policy_info
(
policy_id CHAR(4) NOT NULL,
coverage INT NOT NULL,
sys_start TIMESTAMP(12) NOT NULL GENERATED ALWAYS AS ROW BEGIN,
sys_end TIMESTAMP(12) NOT NULL GENERATED ALWAYS AS ROW END,
ts_id TIMESTAMP(12) NOT NULL GENERATED ALWAYS AS
TRANSACTION START ID,
PERIOD SYSTEM_TIME (sys_start, sys_end)
) IN policy_space;
CREATE TABLE hist_policy_info
(
policy_id CHAR(4) NOT NULL,
coverage INT NOT NULL,
sys_start TIMESTAMP(12) NOT NULL,
sys_end TIMESTAMP(12) NOT NULL,
ts_id TIMESTAMP(12) NOT NULL
) IN hist_space;
ALTER TABLE policy_info ADD VERSIONING USE HISTORY TABLE hist_policy_info;

系統表函數

發生變化時,DB2 會自動將基礎表中的行遷移到歷史表,并根據需要更新三個時間列。基礎表和歷史表的所有管理都是自動、透明的,無需任何編碼。編寫查詢時,僅需引用基礎表,DB2 將根據日期范圍,自動訪問歷史表。

系統時態表提供了多種收益:

? 對于僅訪問當前數據的應用程序,DB2 僅訪問基礎表,因此影響將降低。
? 當前數據的聯機加載、重組、索引創建和其他維護操作不會因歷史表而減速。
? 可以分別為基礎表和歷史表選擇物理存儲選項(例如,位置、壓縮、分區和集群等)。
? 基礎表和歷史表可以具有不同的索引和約束。
? 基礎表數據和歷史表數據的恢復可以分別執行。

? 版權聲明
THE END
喜歡就支持一下吧
點贊13 分享