José Antônio da Cunha

Documentos relacionados
Banco de Dados I Introdução SQL

26/04/2017 Triggers no SQL Server: teoria e prática aplicada em uma situação real

Lista 02 Sistema de Banco de Dados CAP 241 Computação Aplicada I

DDL DML DCL DTL Tipos Numéricos: INT FLOAT DOUBLE Tipos String: CHAR VARCHAR BINARY BLOB TEXT Tipos Data e Hora: DATE TIME TIMESTAMP YEAR

Banco de Dados. -Aprendendo conceitos -Usando o SQL Conf para: -Conectar no banco de dados -Criar, alterar, excluir e consultar estruturas de tabelas

A Linguagem SQL. Tecnologia de Base de Dados. MSc. Eugénio. Macumbe

A linguagem SQL

Avisos. Sumário. Atividade em lab Aula 29. Atividade em lab Aula 29. Programando com SQL Triggers EXERCÍCIO LAB SP. Vista da segunda prova

Revisão / Exercícios. Prof. Márcio Bueno. {bd2tarde,bd2noited}@marciobueno.com

Sistemas de Bases de Dados Relacionais Introdução ao SQL. Interrogações diversas sobre a Base de Dados Northwind - Parte II

S U B G R U P O S D M L E D Q L : A L T E R A N D O E A P A G A N D O D A D O S E M U M A T A B E L A

Projeto de Banco de Dados: Empresa X

TECNOLOGIA EM SISTEMAS PARA INTERNET PROJETO DE BANCO DE DADOS

Banco de Dados. Professora: Luciana Faria

Roteiro 9 - SQL Básico: chave estrangeira, operadores de comparação e operadores booleanos

MODELAGEM DE DADOS -INTRODUÇÃO AO SQL. Prof. Angelo Augusto Frozza, M.Sc.

f. Exemplo: verificar condição de aprovação de alunos

Sumário: 1) Trabalhando com Constraints: - NOT NULL - UNIQUE - PRIMARY KEY - FOREIGN KEY - DEFAULT

Preparação. Linguagem de Manipulação de Dados (DML) Estudo Dirigido 10/12/2013

Tarefa Orientada 8 Criação de tabelas

Fundamentos de Banco de Dados Postgre com Sql

FACULDADE INGÁ Unidade de Ensino Superior Ingá Ltda Ciência da Computação TRIGGERS. Prof. Erinaldo Sanches Nascimento

Modelagem Física e SQL

Manipulação de Dados com SQL

Modelagem Física e SQL

Faculdade Pitágoras 16/08/2011. Curso Superior de Tecnologia: Banco de Dados Sistemas para Internet

Faculdade Pitágoras. Curso Superior de Tecnologia: Banco de Dados. Disciplina: Banco de Dados Prof.: Fernando Hadad Zaidan SQL

Professor Leonardo Larback

LINGUAGEM SQL. SQL Server 2008 Comandos iniciais

FTIN FORMAÇÃO TÉCNICA EM INFORMÁTICA. Módulo de Programação Prof. Bruno Maciel

Atualização e Inserção de Dados. SQL Avançado. Pedro F. Carvalho OCP Oracle g

Para criarmos um banco de dados no MySql, utilizamos à instrução:

Linguagem SQL (Parte II)

Preparação criar tabela. Linguagem de Manipulação de Dados (DML) Estudo Dirigido 12/11/2018

PHP INTEGRAÇÃO COM MYSQL PARTE 1

Curso de Ciência da Computação

SQL Básica. Andre Noel

BANCO DE DADOS. Para a criação de um banco de dados, através de scripts SQL, deve-se usar a seguinte sintaxe: CREATE DATABASE <nome_banco_de_dados>

SQL. Autor: Renata Viegas

A U L A 1 0 C R I A N D O V I E W S V I E W S ( V I S Õ E S )

BANCO DE DADOS TRIGGERS (GATILHOS) Prof. Fabiano Papaiz IFRN

A linguagem SQL

Aula de SQL Comandos DDL. André Luiz de Oliveira Eduardo Raul Hruschka

Teste Exemplo Revisão da tentativa 1

Revisão de Bancos de Dados

Triggers(Gatilhos) Tiago Alves de Oliveira

Rápida revisão do Modelo Relacional

A U L A 3 S U B G R U P O S D M L E D Q L : I N S E R I N D O E P E S Q U I S A N D O D A D O S E M U M A T A B E L A

Utilizando o Postgres - comandos SQL para a manipulação de dados

O modelo relacional encontra-se padronizado pela indústria de informática. Ele é chamado de

Tarefa Orientada 17 Scripts

PSI Linguagem de Definição de dados. Módulo 15

Subsistema de Integridade Semântica

Sumário. SQL - Criação de Tabelas. Structured Query Language. SQL Versões. André Restivo. October 18, 2010

BANCO DE DADOS. info 3º ano. Prof. Diemesleno Souza Carvalho

(1,n) venda. (1,1) realizacao. cliente. (0,n) (1,1) contem. produto. Laboratório de Banco de Dados Exercicios

Banco de Dados. Linguagem SQL

FTIN FORMAÇÃO TÉCNICA EM INFORMÁTICA. Módulo de Programação Prof. Flávio Dantas

Tarefa Orientada 9 Base de Dados Pagamentos

AULA 8. Ambientes Visuais 8.1. OBJETIVO DA AULA SQL (Structured Query Language)

UFG - Instituto de Informática

Programando em SQL. Triggers, Stored Procedures e funções. Profa. Késsia Marchi

Banco de dados POO Márcio Delamaro. Programação Orientada a Objetos Prof Marcio Delamaro ICMC/USP

Linguagem de Consulta Estruturada (SQL)

SQL (Tópicos) Structured Query Language

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE INTRODUÇÃO A SQL

Introdução à linguagem SQL

BANCO DE DADOS GERENCIAL 1 A U L A 2

PROGRAMA. 3.SQL Básico. 3.1 Criação de tabelas 3.2 Queries simples 3.3 Subqueries 3.4 Agregação. Prof. Dr. Marcos Tsuzuki

Transacções. Vitor Vaz da Silva

MySql. Introdução a MySQL. Andréa Garcia Trindade

Banco de dados. Conteúdo: DDL Prof. Patrícia Lucas

BANCO DE DADOS SQL. Aprendendo a manipular dados. Banco de dados utilizado: PostgreSQL.

BANCO DE DADOS BANCO DE DADOS. Prof. Patrícia Lucas 3º Trimestre

Introdução à Engenharia da Computação. Banco de Dados Professor Machado

C A P I T U L O 10 F U N Ç Õ E S I N T E R N A S P H P P A R A B A N C O D E D A D O S

Linguagem SQL (Parte I)

Uma solução possível para garantir, em ambiente APEX, a consistência duma estrutura ISA, total e disjuntiva.

Bases de Dados. DDL Data Definition Language

Como criar um banco de dados usando o mysql

Linguagem SQL Parte I

BCD29008 Banco de dados

Definição do esquema da base de dados. o esquema da BD é composto pelas definições de todas as tabelas da BD.

SQL PostgreSQL. I Criação de Tabelas. Disciplina: SCC0241 Bases de Dados Professor: Eduardo Hruschka Estagiária PAE: Dayse de Almeida

Subsistema de Integridade Semântica

Banco de Dados. José Antônio da Cunha CEFET RN

IMPLEMENTAÇÃO DE BANCO DE DADOS

Unidade 5 05/11/2008. Curso Superior de Tecnologia: Banco de Dados Sistemas para Internet Redes de Computadores

LINGUAGEM SQL Linguagem usada em SGBD para: Definir estrutura de dados; Modificar dados em um banco de dados; Especificar restrições de segurança; Rea

SQL. Prof. Roger Cristhian Gomes

SQL E MYSQL - COMANDOS BÁSICOS

BANCO DE DADOS. Vinícius Pádua

CREATE TABLE AUTOR ( cod_autor int not null primary key, nome_autor varchar (60) )

Tecnologias e Linguagens para Banco de Dados I. Mercado de Trabalho. Oportunidades. Profissional da Área de Banco de Dados:

Tarefa Orientada 19 Triggers

Programação em Banco de dados

Banco de Dados Loja Virtual. CLIENTE(ClienteId, PrimNome, UltNome, Endereço, Cidade, Cep, Telefone)

Transcrição:

José Antônio da Cunha CEFET-RN Natal, 10 de maio de 2013 Auditando operações DML com OUPUT Imagine o seguinte cenário: você possui uma tabela muito importante em seu banco de dados e gostaria de implantar uma auditoria de modificação de dados para armazenar todas as informações referente a operação DML (Data Manipulation Language), executadas sobre a tabela. O objetivo é manter um histórico dos dados alterados e excluídos da tabela e principalmente quem executou a ação. Bom, uma técnica bastante utilizada por quem administra o SQL Server 2000 ou superior é o Mirror Table ou Tabela espelho. O problema dessa técnica é que exige a criação sobre a tabela auditada, de uma trigger que monitore as operações de Insert, Update e Delete, e dependendo da utilização da tabela o desempenho de seu sistema pode ser significativamente prejudicado. Para resolver este problema o SQL Server 2005 possui a nova cláusula OUTPUT, que pode ser usada em conjunto com os comandos DML de Insert, Update ou Delete, para retornar os registros afetados pela operação. Conhecendo o método de espelhamento de tabela A técnica Mirror Table consiste em criar duas tabelas idênticas e criar na tabela principal, trigger de Insert, Update e Delete para que na execução de uma dessas operações, a trigger seja disparada e armazene na tabela espelho os dados afetados pela operação. Para demonstrar como essa técnica funciona, vamos supor que precisamos monitorar todas as alterações realizadas sobre a tabela Products do banco de dados Northwind. O primeiro passo é criar uma tabela espelho que tenha exatamente as mesmas colunas da tabela Products. O Script da Listagem 1 criar a tabela Products_Espelho. Listagem 1 CREATE TABLE [dbo].[products_espelho]( [ProductID] [int] IDENTITY(1,1) NOT NULL, [ProductName] [nvarchar](40) NOT NULL, [SupplierID] [int] NULL, [CategoryID] [int] NULL,

[QuantityPerUnit] [nvarchar](20) NULL, [UnitPrice] [money] NULL, [UnitsInStock] [smallint] NULL, [UnitsOnOrder] [smallint] NULL, [ReorderLevel] [smallint] NULL, [Discontinued] [bit] NOT NULL ) ON [PRIMARY] Após a execução do Script temos então uma tabela idêntica à Products para armazenar as informações auditadas. No entanto, a auditoria não fará sentido se não tiver informações sobre o comando executado, quem o executou e a data em que a operação foi executada. Sendo assim, utilize o seguinte script para adicionar mais três colunas na tabela: ALTER TABLE [dbo].[products_espelho] ADD DataAlteracao datetime, ComanndoDML varchar(6), Usuario varchar(50) Criada a tabela espelho, vamos então criar uma trigger sobre a tabela Products, conforme a Listagem 2. Listagem 2 CREATE TRIGGER Products_Update_Delete ON Products FOR UPDATE, DELETE AS --Pega os novos registros INSERT Products_Espelho SELECT *, getdate(), 'INSERT', suser_sname() FROM INSERTED --Pega os registros antigos ou excluídos

INSERT Products_Espelho SELECT *, getdate(), 'DELETE', suser_sname() FROM DELETED RETURN Para demonstrar o funcionamento da auditoria, vamos inserir alguns registros na tabela products. INSERT INTO Products (ProductName, SupplierID, CategoryID, QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel, Discontinued) VALUES ('Batata doce',1,1,'10 caixas',100,50,0,0,0) Se você executar o comando select a seguir, verá que o comando INSERT acima não foi auditada, como esperado, uma vez que o trigger é de UPDATE ou DELETE. select * from Products_Espelho Com o script a seguir, vamos verificar o comportamento do trigger, alterando o preço unitário do produto de R$100,00 para R$95,00. UPDATE Products SET UnitPrice = 95 WHERE ProductName = 'Batata doce' Ao efetuarmos um SELECT na tabela espelho (Products_Espelho), podemos ver o resultado da auditoria para uma operação de Update. Para demonstrar o comportamento da trigger durante uma operação de Delete execute o seguinte script: DELETE FROM Products WHERE ProductName = 'Batata doce' Como vimos, a técnica de auditoria com tabela espelho é bastante simples e pode ser muito útil em algumas situações. No entanto, você deve ficar atento, pois o uso de triggers em aplicações que possuem muitas operações de escritas, normalmente, geram freqüentes bloqueios de conexões, ocasionando possível lentidão para o usuário. Por outro lado, esse tipo de auditoria provoca uma sobrecarga extra. Note que para cada operação de Update está sendo executadas duas operações Insert sobre a tabela espelho. Temos então duas vezes mais sobrecarga para cada transação de modificação de dados. Para um sistema que possui uma alta utilização,isso pode causar um significativo impacto no desempenho do servidor.

Auditando operações DML com a cláusula OUTPUT No SQL Server a partir da versão 2005, temos uma nova cláusula OUTPUT que oferece uma alternativa mais inteligente para auditar operações DML executadas sobre uma tabela. Com a nova cláusula, podemos monitorar as operações de Insert, Update e Delete sem fazer uso do trigger. Para demonstrar a utilização da cláusula OUTPUT, vamos criar uma nova tabela no banco de dados AdventureWorks e inserir alguns registros de teste. Veja o script da Listagem 4. Listagem 4 CREATE TABLE dbo.tb_salario ( SalarioID int identity(1,1) not null primary key, FuncionarioID int not null, Salario money not null, UltimaAtualizacao datetime not null default getdate() ) INSERT INTO TB_Salario VALUES (1245, 4800.00,'15/01/2007') INSERT INTO TB_Salario VALUES (4512, 6700.00,'15-01-2007 17:30:00') INSERT INTO TB_Salario VALUES (2543, 3200.00,'15-01-2007 17:30:00') INSERT INTO TB_Salario VALUES (2544, 3400.00,'15-01-2007 17:30:00') INSERT INTO TB_Salario VALUES (2545, 3800.00,'15-01-2007 17:30:00') Criada a tabela a ser auditada, utilize o script da Listagem 5 para criar a tabela espelho. Listagem 5 CREATE TABLE dbo.tb_salario_espelho ( AuditoriaID int IDENTITY(1,1) NOT NULL PRIMARY KEY, ComandoDML varchar(10), Insert_SalarioID int NULL, Delete_SalarioID int NULL, Insert_FuncionarioID int NULL, Delete_FuncionarioID int null, Insert_Salario money NULL, Delete_Salario money NULL, Insert_UltimaAtualizacao datetime NULL, Delete_UltimaAtualizacao datetime NULL, Insert_Usuario varchar(10) NULL DEFAULT SUSER_SNAME(), Delete_usuario varchar(10) NULL DEFAULT SUSER_SNAME() ) Uma observação muito importante sobre essa tabela é que para receber as linhas da cláusula OUTPUT ela não pode possuir triggers, Check Constraints ou qualquer Foreign Key referenciando suas colunas ou colunas de outra tabela.

Como você deve ter notado no script de criação da tabela TB_Salario_Espelho, essa possui duas versões para as colunas da tabela TB_Salario, a coluna com o prefixo INSERT armazenará os dados inseridos e a coluna com o prefixo DELETE os dados excluídos. Outro ponto de observação são as duas últimas colunas do script, que servem para armazenar o nome do usuário. Agora que você já tem toda a estrutura necessária para fazer auditoria com a cláusula OUTPUT, então escreva os scripts para fazer auditoria para cada comando de INSERT, UPDATE e DELETE na tabela tb_salario usando a cláusula OUTPUT do SQL Server. 1 - Script para o comando INSERT Resposta: 2 - Script para o comando UPDATE Resposta: 3 - Script para o comando DELETE