DB2 for z/OS V10 - mit der Zeit reisen oder "temoral tables"

Werbung
(*)
IBM DB2 for z/OS
DB2 Version 10
Kapitel 07: „Zeitreise“
(07_DB2V10_zeitreise.pptx)
(*) ist eingetragenes Warenzeichen der IBM International Business Machines Inc.
Oktober 2012
1
DB2 Version 10 - Zeitreise
DB2 10 for z/OS –
Im Einsatz, wo andere längst aufgeben...
Oktober 2012
2
DB2 Version 10 - Zeitreise
Inhalte:
(7) DB2 10 auf Zeitreise:
•
Automatische Historisierung
•
Abbildung von Geschäftsvorfällen
•
Zeitzonen
Oktober 2012
Sicherheitsadministrator,
Anwendungsentwickler, Endbenutzer
3
DB2 Version 10 - Zeitreise
Temporal Tables
•
Inhalte von Tabellen waren bislang ohne zeitlichen Zusammenhang
•
In V10 gibt es zwei Erweiterungen
•
–
Pflege der Historie von Daten (SYSTEM_TIME)
DB2 legt eine Historisierung von Datensätzen an
–
Zeitliche Spezifikation von Datensätzen (BUSINESS_TIME)
Anwendung gibt die Gültigkeit von Daten zu einer bestimmten Zeit an
Geschäftsvorfälle können zeitlich korrekt abgebildet werden
SYSTEM_TIME und BUSINESS_TIME können kombiniert (Bi-Temporal Tables)
verwendet werden
Oktober 2012
4
DB2 Version 10 - Zeitreise
Architektur für SYSTEM_TIME
Online SQL Anwendung
Aktuelle RowA
RowA Jan-März
Aktuelle RowB
RowA März-Dez
RowB Feb-April
Generierung
RowB April-Nov
der Historie
Transparenter Zugriff
Auf Historie über SQL AS OF
Oktober 2012
Auditing SQL Anwendung
Kann direkt die Historie auslesen
5
DB2 Version 10 - Zeitreise
Vereinfachte DDL für SYSTEM_TIME
CREATE TABLE KFZ (
VERTRAGSNUMMER
KUNDENNUMMER_ID
KASKO_ID
JAEHRL_FAHRLEISTUNG
SYS_START
CHAR(4),
CHAR(4),
CHAR(6),
INTEGER,
TIMESTAMP(12) NOT NULL
GENERATED ALWAYS AS ROW BEGIN,
SYS_END
TIMESTAMP(12) NOT NULL
GENERATED ALWAYS AS ROW END,
CREATE_ID
TIMESTAMP(12)
GENERATED ALWAYS AS TRANSACTION START ID,
PERIOD SYSTEM_TIME(SYS_START, SYS_END));
CREATE TABLE KFZ_SYS_HIST (
VERTRAGSNUMMER
KUNDENNUMMER_ID
KASKO_ID
JAEHRL_FAHRLEISTUNG
SYS_START
SYS_END
CREATE_ID
CHAR(4),
CHAR(4),
CHAR(6),
INTEGER,
TIMESTAMP(12) NOT NULL,
TIMESTAMP(12) NOT NULL,
TIMESTAMP(12));
ALTER TABLE KFZ ADD VERSIONING USE HISTORY TABLE KFZ_SYS_HIST;
Oktober 2012
6
DB2 Version 10 - Zeitreise
Beispiele für SYSTEM_TIME
INSERT INTO KFZ (VERTRAGSNUMMER, KUNDENNUMMER_ID, KASKO_ID,
JAEHRL_FAHRLEISTUNG) VALUES ('A123', '123', 'T150', 18000);
--im Dezember 2010
Tabelle KFZ
VERTRAG KUNDE KASKO JAEHRL SYS_START SYS_END
------- ----- ------ ------ ---------- ----------A123
123
T150
18000 2010-12-01 10000-01-01
UPDATE KFZ SET KASKO_ID='V300' WHERE VERTRAGSNUMMER='A123';
Tabelle KFZ
VERTRAG KUNDE KASKO JAEHRL SYS_START SYS_END
------- ----- ------ ------ ---------- ----------A123
123
V300
18000 2011-03-01 10000-01-01
Automatisch gepflegte Tabelle KFZ_SYS_HIST
VERTRAG KUNDE KASKO JAEHRL SYS_START
SYS_END
------- ----- ------ ------ ----------- ---------A123
123
T150
18000 2010-12-01 2011-03-01
UPDATE KFZ SET JAEHRL_FAHRLEISTUNG=25000 WHERE VERTRAGSNUMMER='A123';
Tabelle KFZ
VERTRAG KUNDE KASKO JAEHRL SYS_START SYS_END
------- ----- ------ ------ ---------- ----------A123
123
V300
25000 2011-06-01 10000-01-01
Oktober 2012
--im März 2011
--im Juni 2011
Automatisch gepflegte Tabelle KFZ_SYS_HIST
VERTRAG KUNDE KASKO JAEHRL SYS_START SYS_END
------- ----- ------ ------ ---------------------A123
123
T150
18000 2010-12-01 2011-03-01
A123
123
V300
18000 2011-03-01 2011-06-01
7
DB2 Version 10 - Zeitreise
Abfragemöglichkeiten
Tabelle KFZ
VERTRAG KUNDE KASKO JAEHRL SYS_START SYS_END
------- ----- ------ ------ ---------- ----------A123
123
V300
25000 2011-06-01 10000-01-01
Automatisch gepflegte Tabelle KFZ_SYS_HIST
VERTRAG KUNDE KASKO JAEHRL SYS_START SYS_END
------- ----- ------ ------ ---------------------A123
123
T150
18000 2010-12-01 2011-03-01
A123
123
V300
18000 2011-03-01 2011-06-01
SELECT * FROM KFZ WHERE VERTRAGSNUMMER='A123';
VERTRAG KUNDE KASKO JAEHRL SYS_START SYS_END
------- ----- ------ ------ ---------- ----------A123
123
V300
25000 2011-06-01 10000-01-01
SELECT * FROM KFZ FOR SYSTEM_TIME AS OF '2010-12-25' WHERE VERTRAGSNUMMER='A123';
VERTRAG KUNDE KASKO JAEHRL SYS_START SYS_END
------- ----- ------ ------ ---------- ----------A123
123
T150
18000 2010-12-01 2011-03-01
DELETE FROM KFZ WHERE VERTRAGSNUMMER='A123';
--im September 2011
SELECT * FROM KFZ FOR SYSTEM_TIME AS OF '2010-12-25' WHERE VERTRAGSNUMMER='A123';
VERTRAG KUNDE KASKO JAEHRL SYS_START SYS_END
------- ----- ------ ------ ---------- ----------A123
123
T150
18000 2010-12-01 2011-03-01
Oktober 2012
8
DB2 Version 10 - Zeitreise
BUSINESS_TIME
•
•
•
•
Geschäftsvorfälle zeitlich korrekt darstellen
Datenmodellierung in der Vergangenheit, Gegenwart und
Zukunft
Bereits bei vielen Kunden manuell implementiert
DB2 bietet nun eine SQL Schnittstelle
Oktober 2012
9
DB2 Version 10 - Zeitreise
Beispiel BUSINESS_TIME
Oktober 2012
10
DB2 Version 10 - Zeitreise
DB2 Tabellen
Jan
Feb
Mrz
Apr
Mai
Jun
Jul
Aug
Sep
Okt
Nov
Dez
Kfz - Vertrag
Oktober 2012
11
DB2 Version 10 - Zeitreise
Anpassung des Vertrags
Oktober 2012
12
DB2 Version 10 - Zeitreise
Anpassung des
Vertrags
Jan
Feb
Mrz
Apr
Mai
Jun
Jul
Aug
Sep
Okt
Nov
Dez
SQL UPDATE
SQL INSERT
SQL INSERT
Anpassung bedeutet in diesem Fall:: UPDATE
INSERT
der ursprünglichen Vertragsdauer : der Vertragsneuerungen
Oktober 2012
INSERT
eines weiteren Zeitraums mit urspr. Vertrag
13
DB2 Version 10 - Zeitreise
Vereinfachte DDL für BUSINESS_TIME
CREATE TABLE KFZ
(
VERTRAGSNUMMER
CHAR(4)
KUNDENNUMMER_ID
CHAR(4)
KASKO_ID
CHAR(6)
JAEHRL_FAHRLEISTUNG
INT
BUS_START
DATE
BUS_END
DATE
PERIOD
BUSINESS_TIME(BUS_START, BUS_END)
)
NOT
NOT
NOT
NOT
NOT
NOT
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
CREATE UNIQUE INDEX IX_KFZ
ON KFZ (VERTRAGSNUMMER, BUSINESS_TIME WITHOUT OVERLAPS);
Oktober 2012
14
DB2 Version 10 - Zeitreise
TIMESTAMP(12)
•
Die Genauigkeit des Timestamp wird auf 12 Stellen erweitert
yyyy-mm-dd-hh.mm.ss.nnnnnnnnnn
•
Special Register CURRENT TIMESTAMP
•
JDBC Treiber arbeitet in der Regel mit TIMESTAMP(9)
–
•
Oktober 2012
CAST nach VARCHAR möglich
Achtung: Immer noch keine Sicherheit für „uniqueness“
15
DB2 Version 10 - Zeitreise
DB2 auf Zeitreise
•
Eine Timezone ist der Unterschied in HH:MM zwischen der lokalen Zeit und der UTC
(oder früher Greenwich Mean Time GMT)
•
± th:tm, where
± positives oder negatives Offset
•
th Stundenunterschied
•
tm Minutenunterschied
TIMESTAMP WITH TIMEZONE
–
–
Oktober 2012
Year-Month-Day-Hour.Minutes.Seconds time zone
2007-11-05-08.00.00-08:00
SQL
•
•
16
DB2 Version 10 - Zeitreise
DB2 auf Zeitreise - Beispiel
CREATE TABLE TABLE1
(C1 TIMESTAMP WITH TIME ZONE, C2 INTEGER);
--SVL
INSERT INTO TABLE1 VALUES ( '2010-08-10-08.00.00-08:00', 1);
SQL
–Deutschland
INSERT INTO TABLE1 VALUES ( '2010-08-10-17.00.00+01:00', 2);
SELECT * FROM TABLE1 WHERE C1 = '2010-08-10-17.00.00+01:00';
C1
C2
-------------------------------- -2010-08-10-08.00.00.000000-08:00 1
2010-08-10-17.00.00.000000+01:00 2
Oktober 2012
17
DB2 Version 10 - Zeitreise
DB2 10 for z/OS –
Im Einsatz, wo andere längst aufgeben...
Oktober 2012
18
Herunterladen