Temporal tables and time-travel query
support was added in DB2 10 for z/OS. With temporal tables a time period is
attached to the data to indicate when it was valid or changed in the database.
A traditional database stores data implied to be valid at the current
point-in-time; it does not track the past or future states of the data.
Temporal support makes it possible to store different database states and to
query the data as of those different states. That means different DDL to
support temporal data, as well as different SQL syntax to query it.
Using built-in DB2 temporal capabilities
is much easier than coding for it yourself, but as with most new features there
were some additional tweaks that customers asked for. DB2 12 for z/OS delivers
on making it easier for organizations to adopt and use temporal DB2 data and
queries by supporting:
- temporal referential constraints,
- more flexible time periods, and
- logical transactions.
Let’s examine each of these areas in a
bit more depth. First up, let’s take a look at temporal referential constraints.
Prior to DB2 12, temporal referential integrity required triggers or stored
procedures to implement. But with DB2 12, you can define a temporal referential
constraint for a temporal table that contains a BUSINESS_TIME period by
specifying the PERIOD BUSINESS_TIME clause in the definition of the constraint.
This should improve data integrity for temporal tables and increase temporal uptake
for DB2 customers.
The second new temporal feature is improved
flexibility
for defining the application period in temporal tables. The application
period is defined with two date/time columns, one specifying the beginning of
the period and the other specifying the end of the period. Prior to DB2 12, the
beginning value of a period had to be inclusive, and the end value had to be exclusive.
So for a period beginning at 2017-01-01 and ending 2019-10-01, 2017-01-01 is
part of the period but 2019-10-01 is not part of the period. This type of
period is called an inclusive-exclusive period.
In DB2 12, you can create an
application-period temporal table with a BUSINESS_TIME period that is
inclusive-inclusive. That means that the end value is considered to be part of
the period, instead of outside the period definition.
Generally speaking, the inclusive-exclusive
definition is preferred (and is the default) because it complies with the SQL
standard. However, if your data already exists as inclusive-inclusive, or it
makes more sense to your business users, then DB2 12 support for
inclusive-inclusive will make it easier for your organization to use DB2
temporal tables and time travel queries.
Finally, DB2 12 offers temporal
logical transactions on system temporal tables (that is, those using SYSTEM_TIME
periods). With this new feature, DB2 supports logical units of temporal work
that are not determined by COMMIT and ROLLBACK. That means that values for
row-begin and row-end columns are determined by applications based on a
built-in global variable that you can set.
So overall, DB2 12 for z/OS makes using
temporal tables easier and more flexible with these three compelling new
features.