Prévia do material em texto
RESUMO TRANSAÇÕES As propriedades desejáveis, conhecidas pela sigla ACID, são as seguintes: Atomicidade: representa uma unidade atômica de processamento. Cada transação deve ser executada por completo ou não ser executada. Em outras palavras, cada operação presente dentro de uma transação deve ser executada com sucesso ou nenhuma delas será executada (sofrem rollback). Não deve existir a possibilidade de apenas parte de uma transação ser concluída com sucesso. Consistência: a correta execução de uma transação deve levar o banco de dados de um estado consistente para outro estado igualmente consistente. Desta forma, conserva-se a consistência interna do banco de dados. Dentro deste contexto, todas as restrições de integridade devem ser respeitadas. Isolamento: as atualizações não devem ser tornadas visíveis para outras transações até o commit. Uma transação não deve ter conhecimento sobre a execução das demais. Podemos dizer que um conjunto de transações é isolado entre si caso o efeito da execução delas concorrentemente seja o mesmo da execução de cada uma delas sequencialmente. Durabilidade: sempre que o banco de dados for modificado e essas mudanças forem efetivadas, elas não podem ser perdidas por causa de falhas subsequentes. Estados de uma transação: • Ativa: poderá emitir operações de read e write. • Parcialmente efetivada: alguns protocolos de restauração precisam garantir que uma falha de sistema não impossibilite a gravação permanente dos dados. Uma possibilidade é a gravação das alterações nos logs. Nesta etapa são feitas algumas verificações para garantir a continuação da execução. • Efetivada (committed state): uma vez atendida todas as verificações da etapa anterior, é possível executar o commit que se encarregar de gravar os dados em um armazenamento não volátil. • Falha: se uma das verificações falhar ou se a transação for interrompida em seu estado ativo. A transação deverá ser revertida para desfazer os efeitos das operações de write já efetivadas no banco de dados. • Encerrada: Quando a transação deixa o sistema. Uma transação T alcança seu ponto de efetivação (commit point) quando todas as suas operações que acessam o banco de dados foram executadas com sucesso e o efeito de todas elas estiver gravado no log. Após o ponto de efetivação, a transação é dita efetivada e seu efeito será gravado de modo permanente no banco de dados. A ordem de execução das operações de transações distintas executando concorrentemente de forma intercalada é conhecida como plano de execução ou escalonamento. Duas operações são ditas em conflito se elas satisfazem todas as três condições seguintes: 1. Pertencerem a transações diferentes, 2. Acessarem o mesmo item X, e 3. Pelo menos uma das operações sobre o item X ser um escrever_item(X). O padrão SQL define quatro níveis de isolamento de transação (Read uncommitted, Read committed, Repeatable read, Serializable) em termos de três fenômenos que devem ser evitados entre transações simultâneas. Os fenômenos não desejados são: dirty read (leitura suja) A transação lê dados escritos por uma transação simultânea não efetivada (uncommitted). [1] nonrepeatable read (leitura que não pode ser repetida) A transação lê novamente dados lidos anteriormente, e descobre que os dados foram alterados por outra transação (que os efetivou após ter sido feita a leitura anterior). [2] phantom read (leitura fantasma) A transação executa uma segunda vez uma consulta que retorna um conjunto de linhas que satisfazem uma determinada condição de procura, e descobre que o conjunto de linhas que satisfazem a condição é diferente por causa de uma outra transação efetivada recentemente. [3] Os quatro níveis de isolamento de transação, e seus comportamentos correspondentes, estão descritos na tabela abaixo: Níveis de isolamento da transação no SQL Nível de isolamento Dirty Read Nonrepeatable Read Phantom Read Read uncommitted Possível Possível Possível Read committed Impossível Possível Possível Repeatable read Impossível Impossível Possível Serializable Impossível Impossível Impossível