#sqlsatParma
#sqlsat462November 28°, 2015
SQL Server 2016: Temporal Database
paSQuaLe ceglie
@pceglie
http://www.ugiss.org/author/pceglie/
http://pasqualeceglie.wordpress.com
pasqualeceglie@live.com
#sqlsatParma
#sqlsat462November 28°, 2015
Sponsors
#sqlsatParma
#sqlsat462November 28°, 2015
Organizers
getlatestversion.it
#sqlsatParma
#sqlsat462November 28°, 2015
Pasquale Ceglie | @pceglie
•
•
•
•
http://tinyurl.com/pkpjx5b
9th
#sqlsatParma
#sqlsat462November 28°, 2015
Agenda
#sqlsatParma
#sqlsat462November 28°, 2015
- a database with built-in support for handling and archiving
old versions of modified data over the time.
- involves 2 tables:
I. the main Temporal Table
II. a History Table
#sqlsatParma
#sqlsat462November 28°, 2015
A temporal table is a table:
- With a PERIOD definition
- Contains system columns with a datatype of DATETIME2
- Has an associated history table into which the system records
all prior versions of each record with their period of validity.
The value of each record at any point in time can be determined
#sqlsatParma
#sqlsat462November 28°, 2015
Historical data may be critical to business success
Traditional databases fail to provide required insights
Complex, expensive, limited, inflexible, inefficient
No change in programming model
Provides new insights
Time Travel Data Audit
Slowly
Changing
Dimensions
Repair record-level
corruptions
#sqlsatParma
#sqlsat462November 28°, 2015
No change in programming model New insights
INSERT / BULK
INSERT
UPDATE
DELETE
MERGE
DML SELECT * FROM
temporal
Querying
CREATE temporal
TABLE PERIOD
FOR
SYSTEM_TIME…
ALTER
regular_table
TABLE ADD
PERIOD…
DDL
FOR SYSTEM_TIME
AS OF
FROM..TO
BETWEEN..AND
CONTAINED IN
Temporal
Querying
#sqlsatParma
#sqlsat462November 28°, 2015
Temporal table (actual data)
Insert / Bulk Insert
* Old versions
Update */ Delete *
History Table
#sqlsatParma
#sqlsat462November 28°, 2015
Temporal table (actual data)
Temporal Queries *
(Time travel,etc.)
History Table
Regular queries
(current data)
* Include Historical
Version
#sqlsatParma
#sqlsat462November 28°, 2015
DepNum DepName MngrID From To
A001 Marketing 5 2005 2008
A002 Sales 2 2005 2007
A003 Consulting 6 2005 2006
A003 Consulting 10 2009 2012
DepNum DepName MngrID From To
A001 Marketing 6 2008 ∞
A002 Sales 5 2007 ∞
Department (history)
Department (current)
#sqlsatParma
#sqlsat462November 28°, 2015
Department (current + history)
DepNum DepName MngrID
A001 Marketing 5
A001 Marketing 6
A002 Sales 2
A002 Sales 5
A003 Consulting 6
A003 Consulting 10
A001
A002
A003
period of validity current time
∞
∞
2005 2015
A001
A002
A003
#sqlsatParma
#sqlsat462November 28°, 2015
Department (current + history)
DepNum DepName MngrID
A001 Marketing 5
A001 Marketing 6
A002 Sales 2
A002 Sales 5
A003 Consulting 6
A003 Consulting 10
A001
A002
A003
period of validity current time
∞
∞
2005 2015
A001
A002
A003
SELECT * FROM Department
“Get actual row versions”
#sqlsatParma
#sqlsat462November 28°, 2015
A001
A002
A003
period of validity current time
∞
∞
2005 2015
AS OF
A001
A002
A003
Department (current + history)
DepNum DepName MngrID
A001 Marketing 5
A001 Marketing 6
A002 Sales 2
A002 Sales 5
A003 Consulting 6
A003 Consulting 10
SELECT * FROM Department FOR SYSTEM_TIME
AS OF '2006.01.01'
#sqlsatParma
#sqlsat462November 28°, 2015
A001
A002
A003
period of validity current time
∞
∞
2005 2015
A001
A002
A003
BETWEEN..ANDDepartment (current + history)
DepNum DepName MngrID
A001 Marketing 5
A001 Marketing 6
A002 Sales 2
A002 Sales 5
A003 Consulting 6
A003 Consulting 10
SELECT * FROM Department FOR SYSTEM_TIME
BETWEEN '2006.01.01' AND '2007.01.01'
#sqlsatParma
#sqlsat462November 28°, 2015
Title
Department (current + history)
DepNum DepName MngrID
A001 Marketing 5
A001 Marketing 6
A002 Sales 2
A002 Sales 5
A003 Consulting 6
A003 Consulting 10
A001
A002
A003
period of validity current time
∞
∞
2005 2015
A001
A002
A003
CONTAINED IN
SELECT * FROM Department FOR SYSTEM_TIME
CONTAINED IN ('2007.01.01', '2009.01.01')
#sqlsatParma
#sqlsat462November 28°, 2015
A001
A002
A003
period of validity current time
∞
∞
2005 2015
A001
A002
A003
ALLDepartment (current + history)
DepNum DepName MngrID
A001 Marketing 5
A001 Marketing 6
A002 Sales 2
A002 Sales 5
A003 Consulting 6
A003 Consulting 10
SELECT * FROM Department FOR SYSTEM_TIME ALL
CTP 3
#sqlsatParma
#sqlsat462November 28°, 2015
Expression Qualifying Rows
AS OF <date_time>
SysStartTime <= date_time
AND
SysEndTime > date_time
FROM <start_date_time>
TO <end_date_time>
SysStartTime < end_date_time
AND
SysEndTime > start_date_time
BETWEEN <start_date_time>
AND <end_date_time>
SysStartTime <= end_date_time
AND
SysEndTime > start_date_time
CONTAINED IN
(<start_date_time> ,
<end_date_time>)
SysStartTime >= start_date_time
AND
SysEndTime <= end_date_time
ALL All rows
#sqlsatParma
#sqlsat462November 28°, 2015
DEMO
#sqlsatParma
#sqlsat462November 28°, 2015
SELECT * FROM Department
FOR SYSTEM_TIME
AS OF '2010.01.01'
Facts:
1. History is much bigger than actual data
2. Retained between 3 and 10 years
3. “Warm”: up to a few weeks/months
4. “Cold”: rarely queried
Solution:
History as a stretch table:
PeriodEnd < “Now - 6 months”
Azure SQL Database
Optimizations
#sqlsatParma
#sqlsat462November 28°, 2015
System-Versioned Temporal Tables with
Memory-Optimized Tables
#sqlsatParma
#sqlsat462November 28°, 2015
Limitations
- A temporal table must have a primary key defined
- History table cannot have constraints; primary key, foreign key, table or
column constraints
- INSERT and UPDATE statements cannot reference the SYSTEM_TIME period
columns
- TRUNCATE TABLE is not supported while SYSTEM_VERSIONING is ON
- Direct modification of the data in a history table is not permitted
- INSTEAD OF triggers not permitted on current and history table, AFTER
triggers permitted only on CURRENT TABLE
- REPLICATION usage is limited, some objects/properties are not replicated
/*
Temporal Tables are available in Azure SQL Database as a Private Preview
feature. Please note that information about private preview for Temporal is
strictly NDA
*/
#sqlsatParma
#sqlsat462November 28°, 2015
Resources
Getting started
https://msdn.microsoft.com/en-US/library/mt604462.aspx
Considerations / Limitations
https://msdn.microsoft.com/en-us/library/mt604468.aspx
System-Versioned Temporal Tables with Memory-Optimized Tables
https://msdn.microsoft.com/en-US/library/mt590207.aspx
http://sqlmag.com/sql-server/first-look-system-versioned-temporal-tables-part-1-creating-tables-
and-modifying-data
http://blogs.technet.com/b/dataplatforminsider/archive/2015/10/28/sql-server-2016-community-
technology-preview-3-0-is-available.aspx
Useful readings about Triggers
http://www.ugiss.org/2015/08/28/trigger-su-sql-server-utili-o-dannosi/
#sqlsatParma
#sqlsat462November 28°, 2015
Q&A
Questions?
#sqlsatParma
#sqlsat462November 28°, 2015
THANKS!
http://speakerscore.com/SQL16Temporal
#sqlsatParma
#sqlsat462

SQLSat462 Parma 2015