欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

DB2中理解系统时间和业务时间

程序员文章站 2022-04-20 23:41:19
...

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 仅访问基础表,因此影响将降低。
 当前数据的联机加载、重组、索引创建和其他维护操作不会因历史表而减速。
 可以分别为基础表和历史表选择物理存储选项(例如,位置、压缩、分区和集群等)。
 基础表和历史表可以具有不同的索引和约束。
 基础表数据和历史表数据的恢复可以分别执行。