Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   no puedo actualizar una tabla (https://www.clubdelphi.com/foros/showthread.php?t=5770)

jzginez 03-12-2003 23:15:10

no puedo actualizar una tabla
 
Hola a todos estoy utilizando ib6 y creo la siguiente consulta de actualización desde el ibconsole

update alumnos
set pago_der = 'S'
where reinscrip = 'S' and baja = 'N'

y despues de 15 minutos sin responder me genera el siguiente error

Deadlock
update conflicts with concurrent update
Statement: update alumnos
set pago_der = 'S'
where reinscrip = 'S' and baja = 'N'

revise mis datos para ver hasta que registro se quedo por si es un error de datos y no hay reguistros modificados, por si este error esta en el primer registro que da la consulta intente sin la clausula where y lo unico que optengo es que se tarde menos en indicarme el error:

Deadlock
Statement: update alumnos
set pago_der = 'S'


este proceso solo lo uso una vez al mes, el mes pasado funciono bien y la unica diferencia es que por petición del cliente tuve que cambiar de lunix a windows 2003.


alguien me puede ayudar porfavos

guillotmarc 03-12-2003 23:37:03

Hola.

El error parece indicar que hay una transacción no finalizada que ha modificado uno de los registros de alumnos, que tu sentencia intenta modificar. Por eso se genera un conflicto (deadlock).

Si tu aplicación mantiene transacciones abiertas mientras se trabaja con los datos, entonces nadie debería trabajar mientras ejecutas este proceso.

En el caso de que la transacción que provoca el problema, no sea debida a una proceso que ejecute otro usuario y que mantiene una transacción abierta, entonces simplemente para y vuelve a arrancar el servidor, a ver si con eso consigues finalizar esa transacción.

Si aún te da ese error, haz un backup y un restore de la base de datos, para eliminar definitivamente cualquier transacción colgada.

Saludos.

Voutarks 03-12-2003 23:38:25

Un deadlock, el error que te da, se produce cuando existe un conflico de transacciones de escritura. TIenes un mágnifico manual donse se habla de ello en http://www.terra.es/personal2/jrodri...nes-0.2.6.pdf, gracias al compañero kinobi.

A mi me ha pasado alguna vez. Es posible que se halla quedado alguna transacción de escritura sin confirmar por ahí, asi que puedes probar a hacer un backup y luego restore de la base de datos, para que haga una limpieza y cierre las transacciones. Tambien puedes usar la instruccióngfix -commit all -user USUARIO -password PASSWORD basededatos.gdb

Voutarks 03-12-2003 23:39:48

Marc, te me has adelantado por un minuto cuando estaba escribiendo el mensaje :D

jzginez 04-12-2003 19:49:09

Gracias a todos lo que saco en conclusión es que respalde mi base de datos, cierre las transacciones y reinicie mi servidor.
Les comento que con sus comentarios lo que puedo imaginar que es el culpable de este error es que esta semana ha fallado el suministro electrico y los usuarios han perdido información que estaban capturando y supongo que esto provoco que alguna transacion no finalizara.

por favor Voutarks podrias verificar tu enlace ya que me dice que la pagina no funciona y i me interesaria ver ese manual

guillotmarc 04-12-2003 20:44:48

Además de respaldar la base de datos, no olvides restaurarla, es el proceso de restaurar el que reconstruye la base de datos. (por cierto, guardate una copia del archivo de datos tal como lo tienes ahora, puesto que a veces no se puede restaurar una base de datos corrupta).

Otra cosa que podrías hacer es cambiar el Interbase 6 por Firebird 1.03. Vas a encontrar muy pocos problemas de compatibilidad (si llegas a encontrar alguno) puesto que són dos bases de datos practicamente gemelas. Pero en Firebird se han solucionado muchos bugs de IB 6.

Además FB 1, trabaja con la caché de escritura desactivada, en cambio en IB 6 está activada, esto aumenta mucho el rendimiento, pero por un problema de Windows, los cambios que se hacen solo te aseguras que pasan en la base de datos cuando se cierra el Servidor. Esto provoca facilmente problemas de corrupción con las caídas de corriente.

NOTA : Prueba primero Firebird 1.03 puesto que seguramente no tendrás que hacer ningún cambio en tu aplicación para que funcione. Si quieres probar Firebird 1.5, tiene bastantes mejoras además de aumentar considerablemente el rendimiento, pero seguramente tendrás que adaptar tu aplicación para que lo soporte.

http://prdownloads.sourceforge.net/f...2.exe?download

Saludos

Voutarks 04-12-2003 22:50:23

Estoy de acuerdo con Marc, que ultimamente es un evangelizador de firebird :D

La direccion del manual estaba bien salvo que si te fijas me entró la coma del final como parte de la misma y por eso no funcionaba. Te la doy otra vez:

http://www.terra.es/personal2/jrodri...ones-0.2.6.pdf

guillotmarc 05-12-2003 09:54:46

:) :) :) :)

jzginez 07-12-2003 02:38:12

quote:
--------------------------------------------------------------------------------
guillotmarc comentó:

Otra cosa que podrías hacer es cambiar el Interbase 6 por Firebird 1.03. Vas .....
------------------------------------------------------------------

Gracias por la sugerencia ya la estaba probando en gran parte por lo expuesto en el hilo sobre
interbase y windows 2003, con respecto a mi problema les comento que realice el respaldo de la base de datos, desinstalé internase, cambie por firebird y a la hora de restaurar la base de datos cambie la extensión .gdb por .fdb, con lo cual como se dice aquí en México (no se en otro país) mate dos pájaros de un tiro logre que mi aplicación fuera un poco mas rápida y la consulta de actualización funciono bien.

Gracias por la dirección Voutarks procurare leer mejor las direcciones y no solo esperar a que funciones cuando las selecciono.


La franja horaria es GMT +2. Ahora son las 13:49:57.

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