[firebase-br] Como faz pra Matar transações no Firebird 2.5

Rodrigo Gomes da Silva rodrgomes em gmail.com
Seg Jul 15 17:04:39 -03 2013


Não é possivel vc forcar termino da transação sem matar conexão, e
dependendo de como esteja sendo usado o banco é possivel que vc tenha de
matar conexões que nem seja diretamente envolvida com a transação.

O motivo q vc não ve a transação é este ai.. por exemplo se a 6049228 esta
travada e a conexão dela ja "morreu",  enq as transacoes menores que
a 6049228 não forem finalizadas, esta 6049228 não vai ser descartada por
questão de versionamento de transações.

Agora sobre cair a conexão no meio de um bloco update/insert/delete é muito
difícil, ja q o grupo é executado em fração de segundos... o ideal é vc
SOMENTE abrir a transação qnd tiver passado por todas entradas do usuario e
não ter mais nenhuma espera por parte do usuario ate finalizar a
transação... isto evita que vc tenha o erro de "concurrent update
concurrent transaction number " a não ser que tenha algum
update/insert/select lento como alterar milhares de registros ao mesmo
tempo.


Em 15 de julho de 2013 16:34, <cpd em itauto.com.br> escreveu:

> Até Assim , não vejo problemas na forma que estou utilizando , vendo que a
> transação deve ser acionada pra atualizar um bloco de instruções
> (Update , Insert e Delete ) e que tambem que pode acontecer de cair a
> conexão bem no meio dela , e travando alguns registros , então nessa
> necessidade é que preciso do comando pra listar as transações abertas e
> exclui-las quando nescessario , tentei o comando abaixo , mais
> não me retorna os dados da TRANSAÇÃO que esta travada , alguem sabe me
> dizer como faz pra trazer exatamente a que fica me retornando
> no erro :[concurrent update concurrent transaction number is 6049228] ,
> tentei pelo comando abaixo , mais me retornar uma numeracao
> toda diferente , agradeço quem puder ajudar .
>
>
>
> select MON$STATEMENT_ID, MON$TIMESTAMP, cast(substring(mon$sql_text from 1
> for 250 ) as char(250)) from mon$statements
>
> where mon$sql_text is not null> and mon$state = 1 -- Ativo
>
> Após obter o ID e ver a SQL, então executo o comando abaixo:
> delete from mon$statements where MON$STATEMENT_ID = XXX*
>
> Desde já agradeco .
> Adilson Pazzini
>
>



Mais detalhes sobre a lista de discussão lista