Transações em Banco de Dados
Deinições
Unidade lógica de processamento em um SGBD, composta de uma ou mais operações. De forma abstrata e simplificada, uma transação pode ser encarada como um conjunto de operações de leitura e escrita de dados.
Uma transação é uma unidade da execução de programa que acessa e possivelmente atualiza vários itens de dados. Uma transação precisa ver um banco de dados consistente.
Durante a execução da transação, o banco de dados pode ser temporariamente inconsistente. Quando a transação é completada com sucesso (é confirmada), o banco de dados precisa ser consistente.
Problemas
Durante a execução da transação alguns problemas podem acontecer, é necessário tratar estas situações com o objetivo de manter o BD consistente.
Dois problemas principais para resolver:
Propriedades
Existem requisitos que sempre devem ser atendidos por uma transação.
– Atomicidade
– Consistência
– Isolamento
– Durabilidade ou Persistência
Atomicidade
– ou todas as operações da transação são efetivadas com sucesso no BD ou nenhuma delas se efetiva
– desfazer as ações de transações parcialmente executadas
Consistência
Isolamento
– T1 não deve sofrer interferências de outras transações executadas em forma de corrência.
Durabilidade
Durabilidade
– nenhuma falha posterior ocorrida no BD deve perder essas modificações
– refazer transações que executaram com sucesso em caso de falha no BD
Estados
O estado de uma transação é monitorado constantemente pelo SGBD. Tal estado representa a situação na qual se encontra a transação em um momento específico.
Estados possíveis de uma transação:
Ativa – O estado inicial; a transação permanece nesse estado enquanto está executando.
Parcialmente confirmada – Depois que a instrução final foi executada.
Com Falha – Depois da descoberta de que a execução normal não pode mais prosseguir.
Abortada – Depois que a transação foi revertida e o banco de dados foi restaurado ao seu estado anterior ao início da transação.
Duas opções após ter sido abortada:
- Reiniciar a transação; pode ser feito apenas se não houver qualquer erro lógico interno
- Excluir a transação – erro lógico interno
Confirmada ( Commited )– Após o término bem sucedido.
Execuções simultâneas (Concorrentes)
Várias transações podem ser executadas simultaneamente no sistema.
As vantagens são:
- Melhor utilização do processador e do disco, levando a um melhor throughput de transação: uma transação pode estar usando a CPU enquanto outra está lendo ou escrevendo no disco;
- Tempo de médio de resposta reduzido para transações: as transações curtas não precisam esperar atrás das longas.
Esquemas de controle de concorrência – mecanismos para obter isolamento; ou seja, para controlar a interação entre as transações concorrentes a fim de evitar que elas destruam a consistência do banco de dados.
Throughput: número de transações executadas em determinada quantidade de tempo.
Escalonamento
Sequências de instruções que especificam a ordem cronológica em que as instruções das transações concorrentes são executadas.
- Um escalonamento para um conjunto de transações precisa consistir em todas as instruções dessas transações.
- Precisam preservar a ordem em que as instruções aparecem em cada transação individual.
Uma transação executada com sucesso terá uma instrução commit como a última instrução.
Uma transação não finalizada com sucesso terá a instrução abort como a última instrução.
Serialização
Cada transação preserva a consistência do banco de dados.
Portanto, a execução serial de um conjunto de transações preserva a consistência do banco de dados.
Implementação
Um banco de dados precisa fornecer um mecanismo que garanta que todos os escalonamentos possíveis sejam seriais e recuperáveis.
Transações explícitas
Transações explícitas seguem o conceito formal de transações onde devemos indicar o seu início através do comando BEGIN TRANSACTION e o seu término através dos comandos COMMIT ou ROLLBACK.
Transações automáticas
Modo padrão de muitos SBGD’s. Cada instrução Transact-SQL individual é confirmada na conclusão. Você não precisa especificar nenhuma instrução para controlar transações.
Se uma instrução for concluída com sucesso, será confirmada; se encontrar qualquer erro, será revertida.
Transações implícitas
Transações implícitas são as que ocorrem automaticamente quando enviamos os comandos INSERT,UPDATE e DELETE para o BD. Essas transações são chamadas de implícitas pois não precisamos indicar o início através de um comando BEGIN TRANSACTION ou um térmico através do comando COMMIT ou ROLLBACK.
Comandos:
Insert, Update, Delete, Create, Drop, Alter, entre outros.
Finalizando Transações
COMMIT - A efetivação da transação, garante que a transação seja realizada com sucesso.
ROLLBACK – Falhas ou cancelamento, desfazem todas as modificações feitas na transação retornando os dados ao estado anterior ao início da transação.
CONCLUÍDA: É o estado final de toda e qualquer transação. Nesse estado, a transação deixa de ser executada e as informações armazenadas temporariamente são descartadas.
Classificação das Falhas
- Ações executadas durante a operação normal do sistema
- Ações executadas pos‐falha.
Silberschatz (1999).