Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Duda transacciones. No puedo insertar datos tras un rollback

Estas en el tema de Duda transacciones. No puedo insertar datos tras un rollback en el foro de Mysql en Foros del Web. Tengo dudas sobre como funciona el commit y el rollback en una transaccion. Por lo pronto, no estoy logrando guardar un log de errores tras ...
  #1 (permalink)  
Antiguo 08/09/2011, 09:44
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años
Puntos: 101
Duda transacciones. No puedo insertar datos tras un rollback

Tengo dudas sobre como funciona el commit y el rollback en una transaccion. Por lo pronto, no estoy logrando guardar un log de errores tras hacer un rollback. Y sospecho que esa insercion de datos en el log cae también en el rollback. Digo esto porque recuerdo que me pasó algo raro tambien con un commit un tiempo atras.
  #2 (permalink)  
Antiguo 08/09/2011, 10:11
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Duda transacciones. No puedo insertar datos tras un rollback

Es obvio que si el INSERT se está ejecutando después de iniciar la transacción, el mismo queda contenido entre las acciones afectadas por el ROLLBACK. Eso es una transacción precisamente: Afecta toda operación INSERT/UPDATE/DELETE realizada en esa sesión del usuario.
Al menos en el caso de MySQL. Con otros DBMS puede haber alguna alternativa.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 08/09/2011, 10:14
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años
Puntos: 101
Respuesta: Duda transacciones. No puedo insertar datos tras un rollback

Estoy con mysql.
O sea que el insert necesita un empujon... un COMMIT? Vere si lo puedo hacer funcionar.

Edit: ok, mi Log necesita un COMMIT para funcionar. Esto no traería problemas cuando no este en contexto de transacciones, verdad? Tampoco habría riesgo de que se re-ejecuten comandos anteriores porque ya hice el rollback, cierto?
  #4 (permalink)  
Antiguo 08/09/2011, 10:22
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Duda transacciones. No puedo insertar datos tras un rollback

Supongo que no estás hablando en serio... Un COMMIT confirma todas las operaciones y cierra la transacción.
Toda operación posterior estaría fuera de toda transacción y usar nuevamente COMMIT o ROLLBACK sin inicar una nueva daría error.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 08/09/2011, 10:29
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años
Puntos: 101
Respuesta: Duda transacciones. No puedo insertar datos tras un rollback

Cita:
Toda operación posterior estaría fuera de toda transacción y usar nuevamente COMMIT o ROLLBACK sin inicar una nueva daría error.
A ver. Tengo esto:

- comienzo de transaccion
- operaciones
- ROLLBACK
- insercion en el log

Esa insercion en el log no me funciona. Ese es el problema que tengo.

Siguiendo tu primer respuesta, intente un COMMIT tras hacer la insercion en el Log y ahí si funcionó. O sea que el ROLLBACK no cierra la transaccion. Y la insercion en el Log (que es posterior al ROLLBACK) necesita un empujon. Es raro.
  #6 (permalink)  
Antiguo 08/09/2011, 11:40
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Duda transacciones. No puedo insertar datos tras un rollback

No es raro. Es lo correcto.

Una transacción es un conjunto de operaciones DML que se ejecutan de una forma atómica. Se entiende por atómica que ese conjunto de operaciones se realicen y consoliden como si fuesen una sola, por lo que sólo se confirma cuando la última finaliza.
Lo que sucede al declarar las transacciones es que todas las operaciones quedan en un estado "no confirmado", pero son accesibles por el usuario cuando consulta. Ahora bien, para que las operaciones queden definitivamente asentadas y disponibles para todos los usuarios, debe si o si indicarse COMMIT, o su operación contraria ROLLBACK, que deshace todo. Si no lo haces, y cierras las conexión, se produce un ROLLBACK implícito y todas las modificaciones se cancelan.

Entonces la secuencia es:

Código MySQL:
Ver original
  1. /* Operaciones varias */
  2. IF (condición buscada) THEN
  3.     COMMIT;
  4.     ROLLBACK;

¿Se entiende la idea?

Una cosa que tienes que tener muy en cuenta: Como la caida de una conexión en medio de una transacción genera un ROLLACK implícito, no puedes realizar en la programación de tus aplicaciones cierres de conexiones a MySQL en medio de una transacción.
Tenlo en cuenta para cuando programes.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 08/09/2011, 12:02
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años
Puntos: 101
Respuesta: Duda transacciones. No puedo insertar datos tras un rollback

Si, entiendo la idea. No sabía lo del cierre de conexion durante la transaccion, y lo tendre en cuenta pero de cualquier manera no se aplica a este caso y por otro lado uso try catch para ubicar el COMMIT y el ROLLBACK (pongo el rollback siempre en el catch) .

Voy a ver si mañana puedo resolver el problema, que hoy ya le dedique mucho tiempo. La cuestion, como dije, es que no puedo hacer insercion de datos tras hacer ROLLBACK.
  #8 (permalink)  
Antiguo 08/09/2011, 12:35
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Duda transacciones. No puedo insertar datos tras un rollback

Verifica si tienes problemas de integridad referencial.
Si alguno de los valores cancelados con el ROLLBACK se usa como FK de la tabla que quieres llenar, no podrás por restricciones de clave foránea.
Fuera de eso, cualquier operación posterior al COMMIT o al ROLLBACK debe poderse realizar sin problemas. Eso en tanto no dependa de algo perdido por el ROLLBACK, como digo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 09/09/2011, 13:00
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años
Puntos: 101
Respuesta: Duda transacciones. No puedo insertar datos tras un rollback

Creo que el tema esta resuelto. Lo que estoy haciendo antes de guardar un error en el log es ejecutar : SET autocommit=1

Estuve leyendo que START TRANSACTION fuerza el autocommit a 0, por lo tanto lo que sigue a un COMMIT o a un ROLLBAK va a quedar sujeto a esa regla.

Etiquetas: rollback, transacciones, tras
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:48.