Adriano Maranhão TRANSAÇÕES · 2011. 5. 1. · De toda forma, em nenhum dos casos o processo B...

Preview:

Citation preview

TRANSAÇÕES

Adriano Maranhão

DEFINIÇÃO

Transação é uma unidade atômica de trabalho

que atua sobre um banco de dados. Uma

transação pode ser constituída por uma ou

mais operações de acesso à base de dados.

Todas as operações devem ser bemsucedidas,

caso contrário os efeitos da transação devem

ser revertidos.

COMMIT

Uma transação bem-sucedida termina quando

um comando COMMIT é executado. O comando

COMMIT finaliza e efetiva todas as alterações

feitas na base de dados durante a transação.

ROLLBACK

Se uma transação aborta antes de o comando COMMIT ser executado, a transação deve ser desfeita, isto é, todas as mudanças feitas durante a transação devem ser desconsideradas. O processo de recuperação automática que permite desfazer as alterações feitas contra a base é chamado ROLLBACK.

O ROLLBACK retorna a situação dos objetos da base alterados na transação à mesma situação em que se encontravam no início da transação.

O ROLLBACK reverte os efeitos de uma transação como se ela nunca tivesse existido.

LOCKS

Locks são recursos de compartilhamento de dados, que permitem que o dado seja atualizado e pesquisados dentro de um ambiente multi-usuáriode maneira segura e que lhes garante confiabilidade e integridade.

Através dos locks é possível garantir que somente um usuário esteja atualizando o dado em um determinado momento, que vários usuários possam pesquisar o mesmo dado ao mesmo tempo, etc.

TIPOS DE LOCKS

locks exclusivos: ou XLOCKS, usados para garantir o uso de um determinado dado por um único usuário. É especialmente utilizado em casos de atualizações.

locks compartilhados: ou SLOCKS, usados para permitir que mais de um usuário acesse o mesmo dado ao mesmo tempo. É especialmente utilizado em casos de pesquisa em tela, por exemplo. Os SLOCKS garantem que um usuário possa consultar (e somente consultar) um dado se houver outros usuários acessando o mesmo dado para consulta.

LOG DE TRANSAÇÕES

O Log de transações, embora possa ser

encontrado também em SGBDs OLTP.

Normalmente trata-se de um arquivo que

registra todo o desenvolvimento de cada

transação ocorrida ou em curso. Sua

importância está na capacitação de efetuação

de rollcks e rollforwords, que possibilitam

desfazer e refazer transações.

ROLLFORWORD

Quando da reinicialização de um banco de dados após uma falha, algumas transações podem ter sido perdidas na memória, embora um comando Commit já tenha sido emitido. Isto quer dizer que no log de transações a transação é considerada completa. No entanto, os efeitos não foram registrados em definitivo na base de dados.

Isto quer dizer que esta transação deve ser completada novamente. Usando o log de transações o SGDB "sabe" que partes da transação ainda não foram gravados em definitivo. As etapas que ainda faltam ser gravadas são então executadas até ser encontrado o comando COMMIT gravado no log de transações. A este processo chamamos refazer a transação ou rollfoward.

SYNCPOINT

Cada operação que constitui uma transação podeser mantida em memória (gerenciada porpaginadores, cache managers, etc) e registradacontra o log de transações, sendo gravada contraa base em intervalos de tempo pré- eterminados.Quando terminado o intervalo, todos os efeitos daalterações mantidos em memória são gravadosefetivamente contra a base, sem prejuízo dogerenciamento de lock em curso. A este "alarme"que permite disparar a efetivações contra a basechamamos syncpoint.

EXEMPLO var t : TTransactionDesc;

begin

// dbExpress

try

t.IsolationLevel := xilREADCOMMITTED;

SQLConnection.StartTransaction( t );

// Aqui seriam feitos os updates, deletes e inserts

SQLConnection.Commit( t );

except

SQLConnection.Rollback( t );

end;

// ADO

try

ADOConnection.BeginTrans;

// Aqui seriam feitos os updates, deletes e inserts

ADOConnection.CommitTrans;

except

ADOConnection.RollbackTrans;

end;

// BDE

try

Database.StartTransaction;

// Aqui seriam feitos os updates, deletes e inserts

Database.Commit;

except

Database.Rollback;

end;

// IBX

try

IBTransaction.StartTransaction;

// Aqui seriam feitos os updates, deletes e inserts

IBTransaction.Commit;

except

IBTransaction.Rollback;

end;

end;

NÍVEL DE ISOLAMENTO

Existem basicamente dois níveis principais de

isolamento nos bancos de dados:

Read Commited (Ler apenas dados gravados)

Dirty Read (Leitura suja, pode ler dados

pendentes)

VANTAGENS E DESVANTAGENS?

Leitura suja é uma prática muito perigosa e não costuma ser o ‘default’. O processo A poderia dar um rollback na transação e aquele status dos dados se tornaria completamente inconsistente. De toda forma, em nenhum dos casos o processo B poderia alterar os dados em andamento no processo A. Repetindo: dois processos não podem jamais alterar o mesmo registro ao mesmo tempo, isso não ocorre sob nenhuma hipótese. Se o processo B tentar escrever no registro em questão, ainda pendente no processo A, o banco de dados retornaria um ERRO.

Recommended