tidsresor – med sql server 2016 temporal tables · 2020-03-09 · sql server 2016 temporal tables...

Post on 20-May-2020

3 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

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

top related