adriano maranhão transaÇÕes · 2011. 5. 1. · de toda forma, em nenhum dos casos o processo b...

12
TRANSAÇÕES Adriano Maranhão

Upload: others

Post on 02-Jan-2021

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Adriano Maranhão TRANSAÇÕES · 2011. 5. 1. · De toda forma, em nenhum dos casos o processo B poderia alterar os dados em andamento no processo A. Repetindo: dois processos não

TRANSAÇÕES

Adriano Maranhão

Page 2: Adriano Maranhão TRANSAÇÕES · 2011. 5. 1. · De toda forma, em nenhum dos casos o processo B poderia alterar os dados em andamento no processo A. Repetindo: dois processos nã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.

Page 3: Adriano Maranhão TRANSAÇÕES · 2011. 5. 1. · De toda forma, em nenhum dos casos o processo B poderia alterar os dados em andamento no processo A. Repetindo: dois processos não

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.

Page 4: Adriano Maranhão TRANSAÇÕES · 2011. 5. 1. · De toda forma, em nenhum dos casos o processo B poderia alterar os dados em andamento no processo A. Repetindo: dois processos nã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.

Page 5: Adriano Maranhão TRANSAÇÕES · 2011. 5. 1. · De toda forma, em nenhum dos casos o processo B poderia alterar os dados em andamento no processo A. Repetindo: dois processos não

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.

Page 6: Adriano Maranhão TRANSAÇÕES · 2011. 5. 1. · De toda forma, em nenhum dos casos o processo B poderia alterar os dados em andamento no processo A. Repetindo: dois processos não

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.

Page 7: Adriano Maranhão TRANSAÇÕES · 2011. 5. 1. · De toda forma, em nenhum dos casos o processo B poderia alterar os dados em andamento no processo A. Repetindo: dois processos não

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.

Page 8: Adriano Maranhão TRANSAÇÕES · 2011. 5. 1. · De toda forma, em nenhum dos casos o processo B poderia alterar os dados em andamento no processo A. Repetindo: dois processos não

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.

Page 9: Adriano Maranhão TRANSAÇÕES · 2011. 5. 1. · De toda forma, em nenhum dos casos o processo B poderia alterar os dados em andamento no processo A. Repetindo: dois processos não

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.

Page 10: Adriano Maranhão TRANSAÇÕES · 2011. 5. 1. · De toda forma, em nenhum dos casos o processo B poderia alterar os dados em andamento no processo A. Repetindo: dois processos não

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;

Page 11: Adriano Maranhão TRANSAÇÕES · 2011. 5. 1. · De toda forma, em nenhum dos casos o processo B poderia alterar os dados em andamento no processo A. Repetindo: dois processos não

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)

Page 12: Adriano Maranhão TRANSAÇÕES · 2011. 5. 1. · De toda forma, em nenhum dos casos o processo B poderia alterar os dados em andamento no processo A. Repetindo: dois processos não

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.