Buscar

O que é o commit em duas fases?

Código

{Commit em duas fases refere-se a uma transação que pode utilizar dois ou mais bancos de dados (multi-database), que podem estar localizados em servidores diferentes.

Durante uma transação em bancos com essa característica garante-se que o Commit seja realizado em todos os bancos participantes ou em nenhum, ou seja, ou grava tudo ou não grava nada.

Por exemplo, se sua aplicação atualiza dados em 2 banco de dados e você faz um commit, o recurso de commit em duas fases previne situações como a de um dos bancos ficar indisponível e suas mudanças serem atualizadas somente em um dos bancos envolvidos.

Se qualquer um dos bancos em uma transação multi-database falhar no commit (realizando assim o roll back), a transação é marcada com o status de "limbo" em todos os bancos. Mais tarde você pode utilizar o utilitário de linha de comando GFIX ou o Interbase Server Manager para Windows para resolver a questão de transações em limbo.

Sim, o InterBase suporta o commit de duas fases. Existem algumas maneiras de implementa-lo.
Você continua fazendo o commit ou roll back de uma transação em um ambiente multi-database normalmente, como se fosse uma transação comum. O Interbase realiza todo o trabalho transparentemente, sem você precisar fazer mais nada.

Posso implementar um commit de duas fases via Delphi e components VCL?

O BDE (Borland DataBase Engine) não contempla os recursos do InterBase para transações entre bancos de dados (cross-database). O BDE trabalha somente com o contexto de uma banco por vez. Ainda, Delphi/Jbuilder/C++Builder não oferecem nenhuma maneira para usar commit de duas fases, isso é responsabilidade do banco e não da ferramenta.

Em uma arquitetura cliente-servidor com clientes baseados em BDE, você deverá ter dois datasources, cada uma com sua própria transação.

Você pode realizar operações em ambos banco de dados, mas a transação para cada um deles é independente da outra.

Posso acessar esse recurso via Delphi, usando chamadas diretas as APIs do Interbase? Posso acessar esse recurso com programas SQL embutidos? Quando você inicia uma transação via API, você deve especificar uma lista de manipuladores ao invés de um único manipulador.

Com ESQL (Embeded SQL) por padrão todas as transações que você inicia já são multi-database e usam todos os bancos abertos, a menos que você limite a lista através da cláusula USING.


Observação: Por Celso Rodrigues
cdelphi@terra.com.br }

Publicidade

Vote na dica




Quantidade de votos: 0 votos
Aceitação: 0%


Detalhes da dica

Categoria: Banco de dados
Adicionada dia: 29/12/03
Por: Ranato
Visualizada: 7899 vezes

Planeta Delphi - Tudo sobre programação Delphi Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009