A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

SQL Saturday #512 Salvando dados históricos com as Temporal Tables do SQL Server 2016 Felipe de Assis

Apresentações semelhantes


Apresentação em tema: "SQL Saturday #512 Salvando dados históricos com as Temporal Tables do SQL Server 2016 Felipe de Assis"— Transcrição da apresentação:

1 SQL Saturday #512 Salvando dados históricos com as Temporal Tables do SQL Server 2016 Felipe de Assis Felipe.assis@outlook.com

2 Speaker Bio Felipe de Assis -Consultor SQL Server na DataEX (SP) -MCTS, MCITP, MCSA, MCSE Data Plataform -http://felipedba.wordpress.com -Felipe.assis@outlook.comFelipe.assis@outlook.com -Felipe.assis@dataex.com.brFelipe.assis@dataex.com.br @felipespas https://www.linkedin.com/in/fdassis

3 Patrocinadores

4 Links  http://facebook.com/devSQL  devsql-subscribe@yahoogrupos.com.br  SQL Server Discovery Day  http://www.eventbrite.com/e/sql-discovery-day- tickets-25185568714  Utilize nossa hashtag no twitter: #SqlSatRJ

5 SQL Server Discovery Day http://www.eventbrite.com/e/sql-discovery-day-tickets-25185568714 25/06

6 Macro Agenda 1.Introdução 2.Criando Tabelas Temporais 3.Demonstração 1 4.Manipulando dados 5.Possíves Aplicações 6.Demonstração 2 7.Considerações Finais 8.Conclusão

7 Introdução  O que são as Temporal Tables?  Um novo tipo de tabela disponível no SQL 16  Qual o objetivo?  Manter histórico de mudanças dos dados

8 Por que armazenar dados históricos?  Realizar auditoria sobre as modificações/exclusões realizadas  Consultar dados referentes à um específico ponto no tempo (Point In Time)  Analisar tendências ao longo de um período  Controlar versionamento de registros em tabelas (dimensão) em um ambiente DW  Recuperar dados acidentalmente modificados/excluídos

9 Por falar em histórico, antes do SQL 16...  Como manter dados históricos nas versões anteriores do SQL Server?  Estratégias  Triggers criadas pelo DBA/Dev  Adaptações em Stored Procedures  Mudanças em códigos AD-HOC  Recursos  Change Data Capture  Change Tracking  SQL Audit

10 Principais Características  Implementação transparente às aplicações  Nova cláusula: HIDDEN  Disponível em todas as edições do SQL 16  System-Versioned: Validade dos registros controlada pelo próprio SQL Server  Compatível com outras features  In-Memory OLTP, Columnstore Indexes, Strech DB, Compressão de dados, Particionamento de Tabelas

11 Criando uma Tabela Temporal: Modo Automático CREATE TABLE Temporal ( Column01 INT NOT NULL PRIMARY KEY, Column02 VARCHAR(100), Column03 DATETIME, Column04 DECIMAL(10,2), StartDate DATETIME2 GENERATED ALWAYS AS ROW START NOT NULL, EndDate DATETIME2 GENERATED ALWAYS AS ROW END NOT NULL, PERIOD FOR SYSTEM_TIME (StartDate, EndDate) ) WITH (SYSTEM_VERSIONING = ON) Definição das colunas que farão o controle de versão dos registros Configuração do recurso (Tabela de histórico criada automaticamente) Configuração do recurso (Tabela de histórico criada automaticamente) Primary Key requerida

12 Implantando a Feature em uma Tabela já existente CREATE TABLE Historico ( Column01 INT NOT NULL, Column02 VARCHAR(100), Column03 DATETIME, Column04 DECIMAL(10,2), StartDate DATETIME2 NOT NULL, EndDate DATETIME2 NOT NULL ) CREATE TABLE Temporal ( Column01 INT NOT NULL PRIMARY KEY, Column02 VARCHAR(100), Column03 DATETIME, Column04 DECIMAL(10,2) ) ALTER TABLE Temporal ADD StartDate DATETIME2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL DEFAULT CAST(GETDATE() AS DATETIME2), EndDate DATETIME2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL DEFAULT CAST('9999-12-31 23:59:59.9999999' AS DATETIME2), PERIOD FOR SYSTEM_TIME (StartDate, EndDate) ALTER TABLE Temporal SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.Historico)) GO Configuração do recurso Colunas Temporais Parâmetro HIDDEN Colunas Temporais Parâmetro HIDDEN Tabela de Histórico Passo Opcional Tabela de Histórico Passo Opcional

13 DEMONSTRAÇÃO... Cenário comum: Implementação do recurso sobre uma tabela já existente.

14 Inserindo dados nas Temporal Tables 1.Aplicação dispara um INSERT / BULK INSERT / MERGE 2.O registro é inserido na tabela temporal Tabela TemporalTabela Histórico QtdeStartTimeEndTime 102015-11-21 11:009999-12-31 23:59 INSERT MyTable (Qtde) VALUES (10)

15 Atualizando dados nas Temporal Tables 1.Aplicação envia comando UPDATE / MERGE 2.O registro é copiado para a tabela de histórico 3.O registro enfim é atualizado na tabela temporal QtdeStartTimeEndTime 102015-11-21 11:009999-12-31 23:59 QtdeStartTimeEndTime 102015-11-21 11:002016-06-18 13:30 QtdeStartTimeEndTime 152016-06-18 13:309999-12-31 23:59 Tabela Temporal Tabela Histórico UPDATE Temporal SET Qtd = 15 WHERE Codigo = 1 UPDATE Temporal SET Qtd = 20 WHERE Codigo = 1 152016-06-18 13:302016-06-18 13:45 QtdeStartTimeEndTime 202016-06-18 13:459999-12-31 23:59

16 Deletando dados nas Tabelas Temporais 1.Aplicação envia comando DELETE / MERGE 2.O registro é copiado para a tabela histórico 3.O registro enfim é removido da tabela temporal Tabela Temporal Tabela Histórico QtdeStartTimeEndTime 102015-11-21 11:009999-12-31 23:59 QtdeStartTimeEndTime 102015-11-21 11:002015-11-21 11:30 DELETE MyTable WHERE Codigo = 1

17 Selecionando dados: Como funciona? Tabela TemporalTabela Histórico SQL Server 2016 UNION 152015-11-21 11:309999-12-31 23:59 QtdeStartTimeEndTime 102015-11-21 11:002015-11-21 11:30 1.Aplicação dispara comando SELECT usando as novas cláusulas T-SQL 2.As duas tabelas são acessadas e os resultados são combinados

18 Viagens no Tempo via T-SQL Linha do Tempo SELECT Colunas FROM Tabela AS F WHERE Filtro = Predicado Agora SELECT Colunas FROM Tabela FOR SYSTEM_TIME AS OF ’2016-06-17 14:30’ AS F WHERE Filtro = Predicado Ontem, 14h30

19 Novas Cláusulas T-SQL SELECT ColumnsList FROM MyTemporalTable FOR SYSTEM_TIME AS OF '2015-11-21 11:00:00.0000000' WHERE FilterColumn = 1 AS OF FROM...TO BETWEEN...AND CONTAINED IN FOR SYSTEM_TIME @PointInTime @Start... @End ALL

20 Consultando dados da forma tradicional Linha do Tempo 01/01/2016 Agora Value A Value B Value A Query Tradicional (2 rows) Value B ID 1 ID 2 ID 3

21 Usando a cláusula SYSTEM TIME ALL Linha do Tempo 01/01/2016 Agora Value A Value B Value A Value B SYSTEM TIME ALL (5 rows) ID 1 ID 2 ID 3

22 Usando a cláusula SYSTEM TIME AS OF Linha do Tempo 01/01/2016 Agora Value A Value B Value A SYSTEM TIME AS OF (2 rows) Value B ID 1 ID 2 ID 3

23 Usando SYSTEM TIME CONTAINED IN Linha do Tempo 01/01/2016 Agora Value A Value B Value A SYSTEM TIME CONTAINED IN (1 row) Value B ID 1 ID 2 ID 3

24 Usando SYSTEM TIME BETWEEN... AND Linha do Tempo 01/01/2016 Agora Value A Value B Value A SYSTEM TIME BETWEEN... AND (4 rows) Value B ID 1 ID 2 ID 3 Observação: A cláusula FROM...TO é similar à BETWEEN... AND, com apenas uma pequena variação quanto à interpretação do início do intervalo.

25 Principais Cenários de Utilização  Auditorias de Dados  Análises do tipo “Point In Time”  Detecção de Anomalias  Slowly-Changing Dimensions (DW)  Recuperação de Dados

26 DEMONSTRAÇÃO... Caso de uso Usando as Tabelas Temporais para auditar modificações

27 Considerações Finais  Tabelas de Histórico não suportam constraints (PKs, FKs, Checks, Defaults, etc)  TRUNCATE e DROP TABLE não são suportados enquanto o recurso estiver ativado  Modificações feitas diretamente nas tabelas de histórico não são permitidas

28 Compatibilidade com Funções / Views  Views: Cláusulas Temporais são automaticamente aplicadas somente nas tabelas onde o recurso tenha sido implantado. CREATE VIEW V_PosicaoEstoques AS SELECT E.Cod_Estq, P.Cod_Prod, P.Nome_Prod, P.Desc_Prod, A.Nome_Armz, A.End_Armz, E.Qtde_Estq FROM Estoques E INNER JOIN Produtos P ON E.Cod_Prod = P.Cod_Prod INNER JOIN Armazens A ON E.Cod_Armz = A.Cod_Armz GO DECLARE @V DATETIME = GETDATE()-10 SELECT * FROM V_PosicaoEstoques FOR SYSTEM_TIME AS OF @V  Functions: Cláusulas Temporais precisam ser adicionadas no código do objeto e os valores passados como um parâmetro. CREATE FUNCTION FN_PosicaoEstoque (@Data DATETIME) RETURNS TABLE AS RETURN( SELECT E.Cod_Estq, P.Cod_Prod,P.Nome_Prod, P.Desc_Prod, A.Nome_Armz, A.End_Armz, E.Qtde_Estq FROM Estoques FOR SYSTEM_TIME AS OF @Data AS E INNER JOIN Produtos P ON E.Cod_Prod = P.Cod_Prod INNER JOIN Armazens A ON E.Cod_Armz = A.Cod_Armz) GO DECLARE @V DATETIME = GETDATE()-10 SELECT * FROM FN_PosicaoEstoque(@V)

29 Compatibilidade com outros Recursos AlwaysOn Availability Groups ColumnStore Index Strech DB Temporal Tables In-Memory OLTP (Hekaton) Data Compression Table Partitioning AlwaysOn Failover Cluster Instances  Pode ser combinado com outros recursos, desde que estejam disponíveis na edição utilizada.

30 Exemplo: Compatibilidade de Recursos Tabela Temporal Tabela Histórico Data Compression Strech DB SQL Server 2016Cloud Computing In-Memory OLTP Columnstore Index Table Partitioning Tabela Tradicional

31 Conclusão  Novo tipo de tabela no SQL 2016  Manter histórico de dados  Disponível em todas as edições  Implementação simples e totalmente transparente às aplicações  Novas cláusulas T-SQL para facilitar a consulta de dados históricos

32 Links e Referências Técnicas  MSDN  https://msdn.microsoft.com/en-us/library/dn935015.aspx https://msdn.microsoft.com/en-us/library/dn935015.aspx  https://msdn.microsoft.com/en- us/library/mt631669.aspx?f=255&MSPPError=-2147217396 https://msdn.microsoft.com/en- us/library/mt631669.aspx?f=255&MSPPError=-2147217396  https://msdn.microsoft.com/en-us/library/mt604468.aspx https://msdn.microsoft.com/en-us/library/mt604468.aspx  SQLMAG (by Itzik Ben-Gan)  http://sqlmag.com/sql-server/first-look-system-versioned- temporal-tables-part-1-creating-tables-and-modifying-data http://sqlmag.com/sql-server/first-look-system-versioned- temporal-tables-part-1-creating-tables-and-modifying-data  http://sqlmag.com/sql-server/first-look-system-versioned- temporal-tables-part-2-querying-data-and-optimization-conside http://sqlmag.com/sql-server/first-look-system-versioned- temporal-tables-part-2-querying-data-and-optimization-conside

33 Patrocinadores

34 OBRIGADO!


Carregar ppt "SQL Saturday #512 Salvando dados históricos com as Temporal Tables do SQL Server 2016 Felipe de Assis"

Apresentações semelhantes


Anúncios Google