GARANTIR DESCONTO

Fórum Transações em Firebird #59748

14/05/2008

0

Minha dúvida é simples.
Gostaria de saber qual a diferença entre o método Commit e CommitRetaining, Rollback e RollbackRetaing, quando se usa uma transação em um Banco de Dados.

Obrigado.


Jonathan Bispo

Jonathan Bispo

Responder

Posts

16/05/2008

Eniorm

Commit
todos os objetos query ou dataset que estiverem associados a essa transação serão fechados, necessitando depois serem abertos

CommitRetaining
commita os dados mas mantem as querys abertas.

O mesmo vale para o RollBack/Retaining


Responder

Gostei + 0

16/05/2008

Jonathan Bispo

Poxa, só isso...
rsrs...

Valeu Enio.

Muito obrigado.


Responder

Gostei + 0

16/05/2008

Eniorm

se vc dar uma pesquisadinha no google vai ver que as diferenças não são somente isso não rsrsrs tem muito mais coisas, e é mais recomendado o uso do Commit/RollBack do que o Retaining.

abraço


Responder

Gostei + 0

17/05/2008

Emerson Nascimento

[quote:eea22a7e27=´Enio Marconcini´]Commit
todos os objetos query ou dataset que estiverem associados a essa transação serão fechados, necessitando depois serem abertos

CommitRetaining
commita os dados mas mantem as querys abertas.

O mesmo vale para o RollBack/Retaining[/quote:eea22a7e27]

Na verdade....
- Commit grava fisicamente as alterações e fecha a transação - a [b:eea22a7e27]transação[/b:eea22a7e27], não a query.
- CommitRetaining grava fisicamente as alterações e mantém a [b:eea22a7e27]transação [/b:eea22a7e27]aberta (não recomendado).

o mesmo ocorre para o RollBack.

- RollBack descarta as alterações e fecha a [b:eea22a7e27]transação[/b:eea22a7e27] - a transação, não a query.
- RollBackRetaining descarta as alterações e mantém a [b:eea22a7e27]transação[/b:eea22a7e27] aberta (não recomendado).


Responder

Gostei + 0

17/05/2008

Jonathan Bispo

Mas, por mais rara que fosse, haveria alguma situação onde seria mais viável utilizar CommiRetaining / RollbackRetaining do que Commit / Rollback?


Responder

Gostei + 0

19/05/2008

Eniorm

Na verdade.... - Commit grava fisicamente as alterações e fecha a transação - a [b:fc3c25af12]transação[/b:fc3c25af12], não a query.


Bem comentado... mas consequentemente, a query é fechada tbm :D


Responder

Gostei + 0

19/05/2008

Pestana_

[quote:b0ac5b92cb=´Enio Marconcini´]Commit todos os objetos query ou dataset que estiverem associados a essa transação serão fechados, necessitando depois serem abertos CommitRetaining commita os dados mas mantem as querys abertas. O mesmo vale para o RollBack/Retaining


Na verdade....
- Commit grava fisicamente as alterações e fecha a transação - a [b:b0ac5b92cb]transação[/b:b0ac5b92cb], não a query.
- CommitRetaining grava fisicamente as alterações e mantém a [b:b0ac5b92cb]transação [/b:b0ac5b92cb]aberta (não recomendado).

o mesmo ocorre para o RollBack.

- RollBack descarta as alterações e fecha a [b:b0ac5b92cb]transação[/b:b0ac5b92cb] - a transação, não a query.
- RollBackRetaining descarta as alterações e mantém a [b:b0ac5b92cb]transação[/b:b0ac5b92cb] aberta (não recomendado).[/quote:b0ac5b92cb]

Ola Emerson!

quando você fala que (CommiRetaining / RollbackRetaining) não são recomendados é por causa de quando haver uma queda de energia o banco não seja prejudicado, é isso?

já andei procurando máterial que fale sobre o assunto, mas até agora não cheguei à uma colclusão real!

você poderia me ajudar respondendo sobre isso?


Obrigado!
Pestana.


Responder

Gostei + 0

19/05/2008

Emerson Nascimento

Ola Emerson! quando você fala que (CommiRetaining / RollbackRetaining) não são recomendados é por causa de quando haver uma queda de energia o banco não seja prejudicado, é isso? já andei procurando máterial que fale sobre o assunto, mas até agora não cheguei à uma colclusão real! você poderia me ajudar respondendo sobre isso? Obrigado! Pestana.

Eles não são recomendados porque mantém a transação aberta e os registros abertos e em ´edição´ no DB por um tempo desnecessário. Esse compromentimento pode ser inaceitável, dependendo do controle transacional (pessimista ou otimista). A recomendação é que uma transação fique o menor tempo possível aberta, para não comprometer o uso dos registros por outros usuários. Se você estiver utilizando transações com controle pessimista, o registro fica travado - travado mesmo; ninguém usa - enquanto a transação estiver aberta.

P.S: o CommitRetaining grava fisicamente os dados e mantém a transação aberta, o que indica que não haverá perda de dados se cair a energia, por exemplo. Porém, o registro pode ficar travado (como explicado acima) ou ainda poderia haver serialização desnecessária do registro - por conta de a transação estar aberta - o que causaria a gravação de sujeira no banco de dados (registro serializado, transação aberta), sendo necessário um garbage collection para e eliminar esses resíduos desnecessários.


Responder

Gostei + 0

03/06/2008

Pestana_

ou ainda poderia haver serialização desnecessária do registro - por conta de a transação estar aberta - o que causaria a gravação de sujeira no banco de dados (registro serializado, transação aberta), sendo necessário um garbage collection para e eliminar esses resíduos desnecessários.


Emerson, muito obrigado consegui entender, havendo somente o trecho acima que ficou obscuro pra mim. não querendo abusar de sua bondade você poderia explicar?


Obrigado!


Responder

Gostei + 0

22/02/2017

Helton Garrido

Bom dia meus amigos, tenho um sistema rodando em Rede e uso essas duas opções só que elas estão me dando problemas. Veja o código de gravação a baixo.

If (DM.tblparticular.State in [DsInsert, DsEdit]) Then
DM.tblparticular.Edit;
DM.tblparticular.Post;
DM.IBTransaction1.CommitRetaining;
DM.IBTransaction1.RollBackRetaining;
DM.tblparticular.Refresh;

Gostaria de uma ajuda dos amigos programadores, onde estou errando...
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar