Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   General SQL Error (https://www.clubdelphi.com/foros/showthread.php?t=14082)

ander 09-09-2004 08:07:01

General SQL Error
 
Despues de dos años conectado a un servidor con Oracle Database,el programa de Delphi ha empezado a dar un error.
General SQL Error.
[Microsoft][ODBC SQL Server Driver][SQL Server]Transaction(Process Id 18 was deadlocked on lock ,resources with another process and has been chosen as the deadlock victim.Rerun the transaction.EDBEngineError.
Podríais explicarme porque puede suceder esto y como puedo solucionarlo.
Gracias

Neftali [Germán.Estévez] 09-09-2004 10:28:19

Cita:

Empezado por ander
Transaction(Process Id 18 was deadlocked on lock ,resources with another process and has been chosen as the deadlock victim.Rerun the transaction.EDBEngineError.

Bueno el error parece claro, ¡¡DEADLOCK!! (palabra maldita) y eso quiere decir que ¡¡Tienes un problema!! :(
Normalmete el Deadlock se produce cuando dos transacciones interfieren la una con la otra y ambas quedan esperando a que la otra acabe, de forma que ninguna puede acabar ya que ambas están esperando lo mismo.
(1) Si no has tocado nada de código que altere el comportamiento, sólo se me ocurre que con el tiempo, y el crecimiento de las tablas (y por lo tanto el incremento de tiempo en las SQL), dos consultas que antes tenías y que no se pisaban (no interferían) ahora se estén "pisando" y provoquen el error.

La solución es que busques qué dos operaciones te están produciendo el DeadLock, puede ser el mismo proceso que lanzan dos personas, o dos procesos diferentes, pero que utilizan tablas comunes y una vez identificado, tendrás que modificar el código.

(2) Si has tocado código ultimamente, revisa modificaciones sobre procesos que alteren las mismas tablas.

Ya se que la explicación es muy genérica, pero sin más detalles...

ander 09-09-2004 14:08:39

Deadlook
 
En cuanto a modificar el código ¿a que te refieres?.
Por lo que me has explicado, se que se estan pisando,pero ¿como puedo hacer que no se pisen o que no se interfieran ?
Es la primera vez que se me dá este caso y no se de donde agarrarlo.

Neftali [Germán.Estévez] 09-09-2004 16:05:07

Cita:

Empezado por ander
En cuanto a modificar el código ¿a que te refieres?.
Por lo que me has explicado, se que se estan pisando,pero ¿como puedo hacer que no se pisen o que no se interfieran ?
Es la primera vez que se me dá este caso y no se de donde agarrarlo.

Pues eso; Tampoco puedo ser mucho más concreto sin conocer el código, pero está claro que el error no va a desaparecer sólo; Una vez tengas localizado el error y el proceso o procesos que intervienen y que están provocando el error, pues deberás revisar cómo se gestionan las transacciones en ese trozo de código y si eso es correcto, pues intentar hacer el proceso de alguna otra forma (por trozos, subdividirlo,...);
Ya se que la explicación es muy genérica, pero es que la solución a un problema de DeadLock no es en absoluto genérica, sino todo lo contrario (depende del código que lo está provocando).
Lo más importante es que consigas saber de dónde viene el error y reproducirlo (qué dos procesos al mismo tiempo lo provocan, o qué proceso lanzado lo provoca, o qué dos cosas realizadas consecutivamente lo provocan,...)


La franja horaria es GMT +2. Ahora son las 11:25:13.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi