Transações George Azevedo da Silva José Antônio da Cunha.

Slides:



Advertisements
Apresentações semelhantes
Introdução Gdes. bancos de dados: Concorrência: Transação:
Advertisements

Banco de Dados Prof. Antonio.
Triggers Renata Viegas.
SQL Structured Query Language (continuação)
Banco de Dados SQL TRIGGERS (Gatilhos)
SISTEMAS DE INFORMAÇÃO Sistemas de Bancos de Dados 2º Semestre – 2010 Pedro Antonio Galvão Junior Fone:
SISTEMAS DE INFORMAÇÃO Sistemas de Bancos de Dados 2º Semestre – 2010 Pedro Antonio Galvão Junior Fone:
Sistemas de Informação Redes de Computadores
Visões Marilde Santos.
Restrições de Integridade
Sumário 1 Processamento de Consultas 2 Introdução a Transações
Oficina sobre banco de dados
SQL procedural – parte 2.
Transações.
PostgreSQL.
Aula R Prof. Naércio Filho Técnico em Informática
Bancos de Dados SQL Server 2012 SQL DML - Data Manipulation Language)
PL/SQL, Procedures e Funções
Design Patterns / Acesso ao banco de dados (java.sql)
Tipos de Linguagens do Banco de Dados
(Linguagem de Consulta Estruturada)
Primeira aula de PL/SQL Parte II
SEGUNDA FASE / S2B MIC PERNAMBUCO SEGUNDA FASE / S2B MIC PERNAMBUCO
Oracle 9i: SQL e PL/SQL Bruno Celso Cunha de Freitas
Linguagem de Definição de Dados
1 15/4/ :36 FMU – 1. Semestre – Tecnologia – Analise e Desenvolvimento de Sistemas Professor: Eduardo Silvestri Aluno:Clóvis de Oliveira- RA
DELETE, UPDATE, COMMIT, ROLLBACK
Sumário 1 Processamento de Consultas 2 Introdução a Transações
Daniel Paulo Atualizando e excluindo Dados Comando UPDATE – Altera registros da tabela UPDATE tabela SET nome_coluna = expressao.
Daniel Paulo SQL Server 2014 Módulo II Daniel Paulo
Daniel Paulo SQL Server 2014 Módulo II Daniel Paulo
Banco de Dados -Aprendendo conceitos -Usando o SQL Conf para:
Aula 13 - Triggers. Triggers no SGBD Postgres  Os Triggers (Gatilhos) são funções preparadas para serem disparadas no caso de alguma alteração ocorrer.
1 Programação de Banco de Dados José Antônio da Cunha George Azevedo da Silva.
Linguagem de Programação de Banco de Dados Procedimentos Armazenados.
2/6/2016 José Antônio da Cunha - CEFET - RN1 Programação de Banco de Dados Funções.
Prática de Banco de Dados Créditos: Prof. Jefferson Silva Adaptações: Prof. Nécio de Lima Veras.
Programação para Internet Aula 11 SQL (Introdução a linguagem, comandos de modificação: Create, Drop, Alter, Insert, Delete, Update)
Linguagem de Programação de Banco de Dados George Azevedo da Silva José Antônio da Cunha IFRN.
Criando um Banco de Dados no PHPMyAmin
Banco de Dados José Antônio da Cunha CEFET – RN.
Gerência e Tecnologia de Banco de Dados Processamento de Transações
Banco de Dados Prof. MSc Wagner Siqueira Cavalcante
Prof. MS Virgílio fries muller
Persistência de dados e padrão DAO
Tema 1: Conceitos fundamentais de banco de dados
Disciplina de Banco de Dados II
Recursos de Programação
Prof. Wellington Franco Sub-Rotinas:Funções e Procedimentos
3.1 Classes e Objetos Em um programa orientado a objetos normalmente existem vários objetos de um mesmo tipo. Por exemplo, um programa de controle de.
TQS - Teste e Qualidade de Software (Software Testing and Quality) Teste Envolvendo Acesso a Bases de Dados João Pascoal.
FUNDAMENTO DE PROGRAMAÇÃO
O que é um banco de dados? Antes precisamos entender o que são dados.
Banco de Dados CURSOR.
Daniel Paulo SQL Server 2016 Módulo II Daniel Paulo
BANCO DE DADOS Araújo Lima Out / 2017 Araújo.
BANCO DE DADOS Araújo Lima Outubro / 2017 Araújo.
Daniel Paulo SQL Server 2016 Módulo II Daniel Paulo
Daniel Paulo SQL Server 2016 Módulo II Daniel Paulo
SQL Uma breve pesquisa.
Banco de Dados Prof. MSc Wagner Siqueira Cavalcante
DML Disciplina: banco de Dados José Antônio da Cunha 16/01/2019
MS-SQL Server Structure Query Language
PL/SQL Triggers e Procedures
Módulo III Capítulo 2: SQLite
Prática - BD Distribuído
Disciplina: Banco de Dados II
Daniel Paulo SQL Server 2016 Módulo II Daniel Paulo
BANCO DE DADOS.
Modelagem de Banco de Dados
Transcrição da apresentação:

Transações George Azevedo da Silva José Antônio da Cunha

O que é Transação? É uma unidade lógica de processamento que tem por objetivo preservar a integridade e a consistência dos dados de um sistema. ContaCorrente ContaAplicação retirar DébitoCrédito Este requerimento de “ou faz tudo ou não faz nada” é chamado de atomicidade.

Transações Para que você realize esta unidade de processamento com atomicidade, você deve abrir a transação, realizar as operações com dados, verificar se algum problema ocorreu. Se todas as operações com dados tiverem sido realizadas com sucesso, você deve confirmar a operação. Caso algum problema tenha ocorrido, você deve garantir que nada seja feito.

Observe o esquema em seguida: Criar a unidade de processamento realizar o DÉBITO checar a ocorrência de erro se ocorreu algum erro: 1 – desfaça qualquer operação que tenha sido feita até este ponto. 2 – interrompa o processamento aqui. Realizar CRÉDITO checar a ocorrência de algum erro. se ocorreu erro 1 – Desfaça qualquer operação que tenha sido feita até este ponto. 2 – interrompa o processamento aqui. Se não ocorrer nenhum problema Confirme a operação

Transação Para realizar o processamento anterior, você precisa utilizar três comandos: 1.Begin Transaction – cria uma transação, ou seja, cria uma unidade de processamento lógico; 2.Roolback Transaction – encerra a transação e desfaz qualquer operação que tenha sido realizada com dados; 3.Commit Transaction – encerra a transação e efetiva qualquer operação que tenha sido realizada com dados.

Observe agora o esquema seguinte: BEGIN TRANSACTION realizar o débito checar a ocorrência de erro se ocorreu algum erro: 1 – ROLLBACK TRANSACTION 2 – RETURN Realizar CRÉDITO checar a ocorrência de algum erro. se ocorreu erro 1 – ROLLBACK TRANSACTION 2 – RETURN Se não ocorrer nenhum problema COMMIT TRANSACTION

É uma variável global (função) “alimentada” pelo próprio SQL Server após a realização de qualquer comando da linguagem Transact_SQL. Se não ocorrer erro = 0 Caso ocorra erro = n erro (existente na tabela sysmessages)

Sendo assim é com a variável que você verifica a ocorrência de erros durante o processamento dos seus dados. Observe o seguinte esquema:

BEGIN TRANSACTION Realizar o DÉBITO IF <> 0 BEGIN ROLLBACK TRANSACTION RETURN END Realizar o CRÉDITO IF <> 0 BEGIN ROLLBACK TRANSACTION RETURN END COMMIT TRANSACTION

RAISERROR() Você pode usar função RAISERROR() para enviar uma mensagem em português mais significativa para a aplicação. Exec sp_addmessage 50001, 16, ‘ocorreu um erro de processamento na operação %s ‘ Exec sp_addmessage 50002, 16, ‘conta não encontrada na operação %s ‘ Tabela sysmessages

RAISERROR() BEGIN TRANSACTION Realizar o DÉBITO IF <> 0 BEGIN ROLLBACK TRANSACTION RAISERROR(50001, 16, 1, ‘DÉBITO’) RETURN END Realizar o CRÉDITO IF <> 0 BEGIN ROLLBACK TRANSACTION RAISERROR(50001, 16, 1, ‘CRÉDITO’) RETURN END COMMIT TRANSACTION

Criando a Tabela ContaSaldo Tabela Conta Saldo ContaSaldo

Comando de Transferência create proc int AS int BEGIN TRANSACTION -- Realiza Debito Update ContaSaldo Set Saldo = Saldo Where Conta IF <> 0 BEGIN ROLLBACK TRANSACTION RAISERROR(50001, 16, 1, 'DÉBITO') RETURN END

Comando de Transferência -- Realiza Credito Update ContaSaldo Set Saldo = Saldo Where Conta = IF <> 0 BEGIN ROLLBACK TRANSACTION RAISERROR(50001, 16, 1, 'CRÉDITO') RETURN END = 0 BEGIN ROLLBACK TRANSACTION RAISERROR(50002, 16, 1, 'CRÉDITO') RETURN END COMMIT TRANSACTION

Comando de Transferência -- Realiza a transferência de 100 reais da conta 1 para a 2 exec sp_Transferencia 100, 1, 2 -- Realiza a transferência de 50 reais da conta 1 para a 3 exec sp_Transferencia 50, 1, 3 -- Este segundo comando reporta a mensagem de erro

Transação Implícita e Explícita A transação que é iniciada com BEGIN TRANSACTON e encerrada com COMMIT ou ROLLBACK TRANSACTION é chamada de transação explícita. Se você executar um comando DML (INSERT, UPDATE OU DELETE) avulso, ou seja, fora de um BEGIN ou COMMIT TRANSACTION, o SQL Server trata cada um desses comandos como uma transação, ou seja, uma transação implícita. Nesse caso a atomicidade é mantida para cada comando individual.

Transação Implícita e Explícita Se você quiser, pode configurar a sua sessão para trabalhar no modo “transação implícita”. Para tanto, basta executar o seguinte código: SET IMPLICIT_TRANSACTIONS ON ALTER TABLECREATEDROP GRANT REVOKETRANCATE TABLESELECT INSERTUPDATEDELETE SET IMPLICIT_TRANSACTIONS OF

O processamento de uma Transação 1. Quando uma transação inicia, ela é registrada no Transaction log. 2. Assim que ela termina, o SQL Server registra no log o COMMIT ou o ROLLBACK. 3. O processo de CHECKPOINT efetiva as transações com COMMIT e registra no log que a respectiva já foi efetivada. 4. O processo que limpa o log retira desse arquivo as transações que já foram efetivadas pelo CHECKPOINT e as transações com ROLLBACK. 5. Se o sistema for interrompido propositadamente ou não, ao ser reiniciado, o processo chamado RECOVER entra em ação. Ele efetiva as transações que estavam com COMMIT, mas que ainda não haviam sido efetivadas, e desfaz qualquer transação que porventura tenha sido processada pela metade devido à interrupção do sistema. 6. O próximo processo que limpa o log retira desse arquivo as transações que já foram efetivadas pelo CHECKPOINT ou pelo RECOVERY e as transações com ROLLBACK, liberando espaço nesse arquivo.

Transação Aninhada Uma transação pode ser aberta dentro de outra transação. A variável global contém um número que indica quantas transações estão abertas em sua sessão. Veja o exemplo a seguir:

SELECT /* é igual a 0 */ BEGIN TRANSACTION primeira INSERT INTO Teste_Um values (3) IF <> 0 BEGIN ROLLBACK TRANSACTION /*Desfaz a primeira transação*/ RAISERROR(‘Erro da primeira transação’,16,1) RETURN END BEGIN TRANSACTION segunda INSERT INTO Teste_Dois values (‘C’) IF <> 0 BEGIN ROLLBACK TRANSACTION /*Desfaz a segunda transação*/ RAISERROR(‘Erro da segunda transação’,16,1) RETURN END SELECT /* A variável vale 2 */ COMMIT TRANSACTION segunda SELECT /* A variável vale 1 */ COMMIT TRANSACTION primeira SELECT /* A variável vale 0 */

A marca de Save Point Para que você possa confirmar parcialmente uma transação, basta que você atribua um nome a ela. Para que você desfaça uma transação parcialmente, terá que utilizar marcas de “save Point” e desfazer a transação até esta marca: BEGIN TRANSACTION INSERT INTO Teste_Um values (1) /* Esta operação é confirmada */ SAVE TRANSACTION Ponto_A /* marca de SAVE POINT */ INSERT INTO Teste_Dois values (‘A’) SELECT * FROM Teste_Um SELECT * FROM Teste_Dois ROLLBACK TRANSACTION Ponto_A /*Apenas INSERT Teste_Dois é desfeito */ COMMIT TRANSACTION /* Confirma as operações que não foram desfeitas */

Sintaxe BEGIN TRAN [SACTION] [ ) ]. COMMIT TRAN [SACTION] [ ) ]. COMMIT [ WORK ]. ROLLBACK TRAN [SACTION] [[ ) | NomeSavePoint ]. ROLLBACK [ WORK ]. SAVE TRAN [ SACTION ] ( Nome_savapoint)