Consulta Informix 11.0

Buenos días, esteoy teniendo el siguiente inconveniente al correr el siguiente script :

begin work;
SET CONSTRAINTS ALL DEFERRED;
set triggers for sga_det_acta_curs disabled;
set triggers for sga_actas_cursado disabled;
delete from sga_det_acta_curs where sga_det_acta_curs.acta = ‘294’;
delete from sga_actas_cursado where sga_actas_cursado.acta = ‘294’;
set triggers for sga_det_acta_curs enabled;
set triggers for sga_actas_cursado enabled;
SET CONSTRAINTS ALL IMMEDIATE;
commit work;

El error que recibo es el siguiente :

242: Could not open database table (dba.sga_actas_cursado).
106: ISAM error: non-exclusive access.

Les comento las precauciones que tomé :
Verificar que no haya otros usuarios y/o conexiones abiertas.
Pasar a single user.
Reiniciar el servidor.

Igual sigue dando el mismo error, sin embargo en la base de test (de hace solo unos días ) no dá ningún error.
Desde ya muchas gracias por la ayuda.
Raúl Merino

IUC Cemic .

Hola Raul

Desde donde estás queriendo ejecutar eso?
probá:
1.- abrir una consola en el servidor
2.- pasar al informix a single user
3.- conectarte con dbaccess (te deja?)
4.- ejecutar esos comandos
5.- salir del dbaccess
6.- volverlo a multiuser

Emilio

Gracias Emilio, así es como lo estaba haciendo y dió los errores que comenté.

Raúl.

podrías probar de cambiar el estado del acta a abierto y tratar de borrarla despues.

Igual resultado.

Raúl.

mmm…

fijate en el hilo

http://foro.comunidad.siu.edu.ar/index.php?topic=4306.msg16750

Otra puede ser un update statistics sobre toda la base de datos.

Emilio : Te adjunto el resultado de el onstate y el oncheck que figura en el hilo que sugerís.

Gracias.
Raúl.


oncheck.txt (8.5 KB)

onstat.txt (2.32 KB)

Hola Raul

fijate si cambiando el modo de lock te funciona

– **************************************************************
– LOCK MODE de la tabla sga_actas_cursado
– **************************************************************
ALTER TABLE sga_actas_cursado LOCK MODE (ROW);
ALTER TABLE log_actas_cursado LOCK MODE (ROW);

Emilio

Emili

No Emilio, Sigue con el mismo error.

Raúl.

set triggers for sga_actas_cursado disabled;
update sga_actas_cursado set estado =‘A’ where sga_actas_cursado.acta = ‘294’;
set triggers for sga_actas_cursado enabled;

funciona?

Sí funciona. Es extrañisimo. Como puede ser?

Raúl.

Emilio : Fui corriendo las sentencias sql de a una y el error lo dá al hacer

set triggers for sga_actas_cursado enabled;

Alguna idea ?

Gracias.
Raúl.

No. ni idea.
ahora, con el acta abierta no podés borrar los registros?

Emilio

El delete lo hace pero al hacer el set triggers for sga_actas_cursado enabled; dá el error otra vez.

me parece que, si está abierta, te deja borrarla sin deshabilitar triggers.

Bueno por fin solucionado. Al pretender borrar sin deshabilitar los triggers
me decí que la pk todavía estaba referenciada, busqué en la informacion dela tabla y me apareció la tabla sga_cambios_curpen
en la cual había registros con el acta que yo pretendía borrar. La incluí en el script y borró prefectamente.

Gracias por todo.

Raúl.

raúl:

El

set triggers for sga_actas_cursado enabled;

muchas veces no funciona hasta que no se hace commit de la transacción. No tengo bien en claro cuando es que funciona y cuando no dentro de la transacción, pero a mi me pasa que a veces funciona y otras no. Quizás tenga que ver con que se modifique la clave principal o no en la transacción.

Saludos

Gustavo

Hola gente, estoy teniendo este mismo problema (un borrado masivo, con constraints defferred y deshabilitacion de triggers y teniendo problemas con exclusividad de una tabla lateral).

Intenté todo lo que Uds. han sugerido. Inclusive pasarlo a modo exclusivo (oninit -j). El problema es cuando habilito los triggers. Ahí falla todo.

Probé pasar la base a diferentes modos de logging (por si eso estuviera molestando de alguna manera).

Tenemos Informix 11.70

Estuvimos viendo este tema con Alejandro también.

Saludos!

Para estos casos, hacer:
BEGIN WORK;
SET CONTRAINTS ALL DEFERRED; – Para que las constraints de FK, CK se evaluen en el COMMIT.

– Deshabilitar los triggers de las tablas involucradas

– Realizar los updates/deletes que necesiten hacer

COMMIT WORK;

– Habilitar los triggers… (que este afuera de la transaccion (begin work - commit work), porque si se pone dentro de la transaccion antes del commit a veces da el error que mencionan…