Fórum Transações em Firebird #59748
14/05/2008
0
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
Curtir tópico
+ 0Posts
16/05/2008
Eniorm
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
Gostei + 0
16/05/2008
Jonathan Bispo
rsrs...
Valeu Enio.
Muito obrigado.
Gostei + 0
16/05/2008
Eniorm
abraço
Gostei + 0
17/05/2008
Emerson Nascimento
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).
Gostei + 0
17/05/2008
Jonathan Bispo
Gostei + 0
19/05/2008
Eniorm
Bem comentado... mas consequentemente, a query é fechada tbm :D
Gostei + 0
19/05/2008
Pestana_
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.
Gostei + 0
19/05/2008
Emerson Nascimento
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.
Gostei + 0
03/06/2008
Pestana_
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!
Gostei + 0
22/02/2017
Helton Garrido
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...
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)