5. Gerenciamento de Transações

 

5.1. Modelo de transação

 

Uma transação é uma unidade de programa que acessa e possivelmente atualiza vários ítens de dados. Requeremos que uma transação não viole qualquer restrição de consistência do banco de dados. Isto é, se o banco era consistente quando uma transação iniciou, o banco precisa estar consistente quando a transação terminar sua execução com sucesso. Entretanto, durante a execução de uma transação, pode ser necessário temporariamente permitir a inconsistência. Esta inconsistência temporária, ainda que necessária, pode levar a dificuldades se ocorrer falhas.

 

Exemplo bancário

 

Considere algo como um sistema bancário simplificado de diversas contas e um conjunto de transações que acesse e atualize aquelas contas. Seja B uma transação que transfira R$50 da conta A para a conta B. Esta transação pode ser definida como:

 

T:         read (A,a1)

a1 = a1 - 50

write (A,a1)

read (B,b1)

b1 = b1 + 50

write (B, b1)

 

Caso ocorra uma falha durante a execução de T, o banco poderá entrar em um estado inconsistente.

 

5.2. Estados de uma transação

 

Uma transação precisa estar em um destes estados definidos abaixo.

 

Ativo à  define o estado inicial de uma transação.

Parcialmente executado à  depois que a última instrução foi executada.

Falho à  depois da descoberta de que uma execução normal não pode mais prosseguir.

Abortado à  depois que a transação foi rolada para trás e o banco de dados foi restaurado ao seu estado anterior para o início da transação.

Executado à depois de completada com sucesso.

 

Figura 5.1: Estados de uma transação.

 

 

 

Uma transação entra em um estado falho depois de determinado que a transação não mais prossiga com sua execução normal (por exemplo, devido a erros de hardware ou a erros lógicos). Tal transação precisa ser rolada para trás. Uma vez que isso é feito, a transação entra no estado abortado. Neste ponto, o sistema tem duas opções:

 

1.            Reiniciar a transação. Isto ocorre apenas se a transação foi abortada como resultado de algum erro de hardware ou software que não foi criado através de uma lógica interna da transação. Uma transação reiniciada é considerada como sendo uma nova transação.

 

2.            Matar a transação. Isto ocorre por algum erro lógico interno que pode ser corrigido apenas reescrevendo o programa aplicativo, ou devido a uma má entrada ou pelo fato de que um dado desejado não foi encontrado no banco de dados.

 

5.3. Definindo transações em SQL

 

Iniciando uma transação: Begin Work.

 

Finalizando uma transação: Commit Work.

 

Desfazendo uma transação: Rollback Work.

 

Embora o padrão seja descrito como mostra acima, a maioria dos SGBD’s define transações como mostra a seguir:

 

Iniciando uma transação: Begin Transaction.

 

Finalizando uma transação: Commit Transaction.

 

Desfazendo uma transação: Rollback Transaction.

Free Web Hosting