DB2 不再僅僅面向 DBA。長久以來,DB2 因杰出的核心 DBMS 功能而聞名于世,而如今,DB2 使開發(fā)人員也能夠利用它的強大特性。這方面的一個示例就是直接在模式內(nèi)實現(xiàn)基于時間的信息。這是通過 DB2 10 for Linux, UNIX, and Windows 中新增的時態(tài)表來實現(xiàn)的。
DB2 不再僅僅面向 DBA。長久以來,DB2 因杰出的核心 DBMS 功能而聞名于世,而如今,DB2 使開發(fā)人員也能夠利用它的強大特性。這方面的一個示例就是直接在模式內(nèi)實現(xiàn)基于時間的信息。這是通過 DB2 10 for Linux, UNIX, and Windows 中新增的時態(tài)表來實現(xiàn)的。
利用時態(tài)表,您能夠輕松地跟蹤和分析業(yè)務中的變化,準確對比兩個時間點的數(shù)據(jù)。該功能允許您有效執(zhí)行和跟蹤數(shù)據(jù)更正,支持您在過去執(zhí)行數(shù)據(jù)更改,也就是說,使之作為過去的某個特定時間點而“生效”,同時記錄執(zhí)行更改的時間。時態(tài)表提供了顯示過去任意時間點數(shù)據(jù)的能力,也能顯示相同事務中的哪些信息發(fā)生過更改,更改是在何時執(zhí)行的,因此能夠促進審計與合規(guī)性。
時態(tài)表是什么?
時態(tài)表允許您將基于時間的狀態(tài)信息與 DB2 管理的數(shù)據(jù)關聯(lián),并使之與應用程序邏輯保持無關。DB2 中的時態(tài)表功能允許跟蹤數(shù)據(jù)更改(版本控制),支持自定義業(yè)務數(shù)據(jù)存儲和操作(以及兩者的結合)。
時態(tài)表分為兩種類型:系統(tǒng)和應用程序。DBA 可以使用雙時態(tài)表,同時利用兩種類型的功能。
時態(tài)表能簡化過去、現(xiàn)在和未來任意給定時間點的數(shù)據(jù)報告,因而有助于加強業(yè)務洞察。這種功能可提高開發(fā)人員的生產(chǎn)力(DB2 內(nèi)的處理時間管理意味著更少的編碼工作,更簡單的編碼意味著維護成本的降低),因此可降低成本。時態(tài)表也能減少合規(guī)性工作,支持更好地跟蹤數(shù)據(jù)更改。時態(tài)表提供了基于標準的技術,能在整個企業(yè)的范圍內(nèi)實現(xiàn)一致性和出色的數(shù)據(jù)質(zhì)量。時態(tài)表深度集成所有特性,包括分區(qū)、壓縮和視圖。
系統(tǒng)時態(tài)表
系統(tǒng)表支持以操作時間(即操作系統(tǒng)時間)為依據(jù)的基于時間的功能。系統(tǒng)時態(tài)表利用歷史表,存儲數(shù)據(jù)的歷史版本。
您該如何實現(xiàn)系統(tǒng)時態(tài)表?首先,使用 SYSTEM_TIME 屬性創(chuàng)建或更改一個基礎表,包含以下三個具體生成列:
行起始列:行數(shù)據(jù)成為當前數(shù)據(jù)的時間
行結束列:行數(shù)據(jù)不再屬于當前數(shù)據(jù)的時間
事務起始 ID 列:影響該行的事務的起始執(zhí)行時間。
接下來,創(chuàng)建一個完全相同的表,作為歷史表。該表必須使用與基礎表完全相同的布局。但您可以按照自己的需求配置歷史表,例如分區(qū)、壓縮或存儲位置。
第三步是使用 Alter 語句將歷史表與基礎表相關聯(lián),并為基礎表添加版本控制,即: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;
系統(tǒng)表函數(shù)
發(fā)生變化時,DB2 會自動將基礎表中的行遷移到歷史表,并根據(jù)需要更新三個時間列?;A表和歷史表的所有管理都是自動、透明的,無需任何編碼。編寫查詢時,僅需引用基礎表,DB2 將根據(jù)日期范圍,自動訪問歷史表。
系統(tǒng)時態(tài)表提供了多種收益:
對于僅訪問當前數(shù)據(jù)的應用程序,DB2 僅訪問基礎表,因此影響將降低。
當前數(shù)據(jù)的聯(lián)機加載、重組、索引創(chuàng)建和其他維護操作不會因歷史表而減速。
可以分別為基礎表和歷史表選擇物理存儲選項(例如,位置、壓縮、分區(qū)和集群等)。
基礎表和歷史表可以具有不同的索引和約束。
基礎表數(shù)據(jù)和歷史表數(shù)據(jù)的恢復可以分別執(zhí)行。
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com