tidsresor – med sql server 2016 temporal tables · 2020-03-09 · sql server 2016 temporal tables...
TRANSCRIPT
TIDSRESOR – MED SQL SERVER 2016
TEMPORAL TABLESJOHAN ÅHLÉN, MALMÖ, 2016-10-12
OM MIG
Johan Åhlén• Driver det egna konsultföretaget Visionova Solutions AB
• Microsoft MVP
• Utsetts av Techworld / Computer Sweden till en av Sveriges främsta utvecklare
• F d ordförande i SQLUG
VILKA ÄR NI?
SQL SERVER 2016 VIKTIGASTE NYHETER
• Kraftigt förbättrad In-Memory OLTP
• Live Query Statistics
• Query Store (”svarta lådan”)
• Always Encrypted
• Stretch Databases
• Integration med R
• …och… Temporal Tables (Obs!!! Blanda inte ihop med ”temporary” tables!)
VAD ÄR TEMPORAL TABLES?
Vad finns för alternativ?
VAD KAN TEMPORAL TABLES ANVÄNDAS TILL?
Några exempel
• Change Data Capture
• ”Undo” funktion
• Data Auditing (säkerhet)
• Slowly-Changing Dimensions
HUR FUNKAR DET?
Starttid Sluttid
Current
History
SYSUTCDATETIME()
Primary key
System-versioned Temporal Table
EXEMPEL: SKAPA TABELL
CREATE TABLE [dbo].[Inventory](
[ProductId] nvarchar(20) PRIMARY KEY CLUSTERED,
[QuantityInStock] int NOT NULL,
[QuantityReserved] int NOT NULL,
[SysStartTime] datetime2(0) GENERATED ALWAYS AS ROW START NOT NULL,
[SysEndTime] datetime2(0) GENERATED ALWAYS AS ROW END NOT NULL,
PERIOD FOR SYSTEM_TIME ([SysStartTime], [SysEndTime])
)
WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = [dbo].[Inventory_History]));
EXEMPEL: ÄNDRA BEFINTLIG TABELL
ALTER TABLE [dbo].[Inventory] ADD
[SysStartTime] datetime2(0) GENERATED ALWAYS AS ROW START HIDDEN NOT NULL,
[SysEndTime] datetime2(0) GENERATED ALWAYS AS ROW END HIDDEN NOT NULL,
PERIOD FOR SYSTEM_TIME ([SysStartTime], [SysEndTime]);
ALTER TABLE [dbo].[Inventory]
SET (SYSTEM_VERSIONING = ON);
Vad betyder HIDDEN?
DEMOTAJM!
HUR LÄSA FRÅN TEMPORAL TABLES?
LÄSA FRÅN TEMPORAL TABLES
SELECT …FROM …FOR SYSTEM_TIME AS OF ’2016-10-12 09:00:00’
Point-in-time queries
LÄSA FRÅN TEMPORAL TABLES
SELECT …FROM …FOR SYSTEM_TIME …
Interval queries
LÄSA FRÅN TEMPORAL TABLES
SELECT …FROM …FOR SYSTEM_TIME ALL
Hämta rubbet…
DEMOTAJM!
GÖRA STRUKTURFÖRÄNDRINGAR I TEMPORAL TABLES
Är det några problem?
BEGRÄNSA HISTORIKEN I TEMPORAL TABLES
Är det några problem?
SCENARIO: CHANGE DATA CAPTURE (CDC)
Operation Tid Data
INSERT …
UPDATE …
DELETE …
UPDATE …
CHANGE DATA CAPTURE - TRADITIONELL
CHANGE DATA CAPTURE – MED TEMPORAL TABLES
• Fungerar även på In-Memory tabeller
• Fungerar även i Azure SQL Databases (molnet)
• Fungerar även på Standard Edition
• Effektivare.
HUR GÖR VI?
Tid
INSERT UPDATE DELETE INSERT DELETE
DEMOTAJM!
KAN VI FÅ NETTOFÖRÄNDRINGAR?
Tid
Nettoförändring
TRE TYPER AV NETTOFÖRÄNDRINGAR
Tid
INSERT
UPDATE
DELETE
DEMOTAJM!
SCENARIO: ”UNDO”
HUR GÖR JAG EN UNDO?
1.Gå in direkt i ”current” och ”history” och ändra/radera poster (dålig idé!)
2.Gör en MERGE från en Point-In-Time query.
3.Gör en ”omvänd CDC” från sluttiden till starttiden.
DEMOTAJM!
MER INFO!
• Microsofthttps://msdn.microsoft.com/en-us/library/dn935015.aspx
• SQL Server Centralwww.sqlservercentral.com
• Min bloggwww.johanahlen.info
TACK!
Johan Åhlén
Läs mer på min blogg:www.johanahlen.info