Error -229 en Inscripciones a exámenes

Paso un problema que reportamos a Técnicos, pero entiendo que es de Informix.
El resumen de la historia es el siguiente:
Estamos en inscripcion a examenes, y tenemos un problema con el control ctr_correlativaiex, que nos devuelve un error -229, que según lo que veo en Informix es un problema de tablas temporales, pero no puedo detectar donde y como solucionarlo.

Esta defiinido un dbspace temporal, y en el onconfig esta correctamente nombrado.

DBSPACETEMP dbs_temp

bspaces
ddress number flags fchunk nchunks flags owner name
5c857d0 1 0x1001 1 2 N informix rootdbs
5c85eb8 2 0x1 2 2 N informix dbs_datos
6084018 3 0x1 3 1 N informix dbs_mig
6084160 4 0x2001 4 7 N T informix dbs_temp

Reiniciamos el servidor y seguimos con el mismo problema, sin siquiera poder procesar una inscripcion a examen.
Espero su ayuda de forma urgente.

aca envio la salida del onstat -d.
No veo que esten llenos los dbspaces y NO puedo procesar ni una sola inscripcion a examen.

Informix Dynamic Server 2000 Version 9.21.TC4 – On-Line – Up 01:01:15 – 1469888 Kbytes

Dbspaces
address number flags fchunk nchunks flags owner name
25c857d0 1 0x1 1 2 N informix rootdbs
25c85eb8 2 0x1 2 2 N informix dbs_datos
26084018 3 0x1 3 1 N informix dbs_mig
26084160 4 0x2001 4 7 N T informix dbs_temp
260842a8 5 0x1 5 3 N informix dbs_logs
260843f0 6 0x1 6 1 N informix dbs_prueba
26084538 7 0x1 8 2 N informix dbs_mig203
26084680 8 0x1 9 1 N informix dbs_g203
260847c8 9 0x1 10 9 N informix dbs_semanal
26084910 10 0x1 11 1 N informix dbs_fomec
10 active, 2047 maximum

Chunks
address chk/dbs offset size free bpages flags pathname
25c85918 1 1 0 7680 4449 PO- C:\IFMXDATA\alum_w2000\rootdbs_dat.000
25cc46e0 2 2 0 500000 492571 PO- C:\IFMXDATA\alum_w2000\dbs_datos.000
25cc4848 3 3 0 500000 497697 PO- C:\IFMXDATA\alum_w2000\dbs_mig_dat.000
25cc49b0 4 4 0 250000 249947 PO- C:\IFMXDATA\alum_w2000\dbs_temp.000
25cc4b18 5 5 0 25000 947 PO- C:\IFMXDATA\alum_w2000\dbs_logs.000
25cc4c80 6 6 0 500000 497797 PO- C:\IFMXDATA\alum_w2000\dbs_pru_dat.000
25cc4de8 7 2 0 250000 249997 PO- C:\IFMXDATA\alum_w2000\dbs_datos.001
25c85a80 8 7 0 500000 17592 PO- C:\IFMXDATA\alum_w2000\dbs_mig_dat203.000
25c85be8 9 8 0 500000 915 PO- C:\IFMXDATA\alum_w2000\dbs_g203.000
25c85d50 10 9 0 500000 58 PO- C:\IFMXDATA\alum_w2000\dbs_semanal.000
25cb5630 11 10 0 50000 26765 PO- C:\IFMXDATA\alum_w2000\dbs_fomec.000
25cb5798 12 5 0 25000 997 PO- C:\IFMXDATA\alum_w2000\dbs_logs.001
25cb5900 13 9 0 50000 1 PO- C:\IFMXDATA\alum_w2000\dbs_semanal.001
25cb5a68 14 7 0 125000 113752 PO- C:\IFMXDATA\alum_w2000\dbs_mig_dat203.001
25cb5bd0 15 9 0 50000 15 PO- C:\IFMXDATA\alum_w2000\dbs_semanal.002
25cb5d38 16 9 0 125000 0 PO- C:\IFMXDATA\alum_w2000\dbs_semanal.003
25cb5ea0 17 4 0 25000 24997 PO- C:\IFMXDATA\alum_w2000\dbs_temp.001
26083018 18 9 0 25000 2 PO- C:\IFMXDATA\alum_w2000\dbs_semanal.004
26083180 19 4 0 25000 24997 PO- C:\IFMXDATA\alum_w2000\dbs_temp.002
260832e8 20 4 0 250000 249997 PO- C:\IFMXDATA\alum_w2000\dbs_temp.003
26083450 21 9 0 31250 1 PO- C:\IFMXDATA\alum_w2000\dbs_semanal.005
260835b8 22 9 0 62500 0 PO- C:\IFMXDATA\alum_w2000\dbs_semanal.006
26083720 23 9 0 62500 1 PO- C:\IFMXDATA\alum_w2000\dbs_semanal.007
26083888 24 4 0 25000 24997 PO- C:\IFMXDATA\alum_w2000\dbs_temp.004
260839f0 25 9 0 375000 324629 PO- C:\IFMXDATA\alum_w2000\dbs_semanal.008
26083b58 26 4 0 250000 249997 PO- C:\IFMXDATA\alum_w2000\dbs_temp.005
26083cc0 27 4 0 500000 499997 PO- C:\IFMXDATA\alum_w2000\dbs_temp.006
26083e28 28 1 0 262144 249333 PO- C:\IFMXDATA\alum_w2000\rootdbs_dat.001
26fa5e70 29 5 0 25000 24997 PO- c:\IFMXDATA\alum_w2000\dbs_logs.002
29 active, 2047 maximum

Nos contestó Ingnacio Bisso, y nos dió algunas pistas, pero todavía seguimos con el problema.

Esperamos asistencia.
Muchas gracias.

Pueden verificar si el dbspace temporal se esta usando?
Corran onstat -d -r 1
Esto hará que se ejecute el onstat -d cada un segundo, y vayan viendo si la columna free de los chunks del dbspace tepmoral va decrementando o no. Con eso primero veran si el dbspace temporal se usa, y si es que quedan vaciós los 4 chunks que tiene el dbspace temporal, entonces deberia dar error el llenarse el ultimo y no tener mas espacion temporal.

Por otro lado no debería usar tanto espacio en dbspace temporal. Tienen actualizadas las estadisticas en la base?

Este control llama al proceso sp_correlativas.

  1. Pueden hacer un trace a este proceso?

  2. En este procedure se crean dos tablas temporales:
    temp_mensajes
    tmp_hist_acad_mat

Podrian agregar la sentencia WITH NO LOG en el create, es decir, reeemplazar:


CREATE TEMP TABLE  tmp_mensajes (orden smallint, mensaje varchar(255));
CREATE TEMP TABLE  tmp_hist_acad_mat (materia varchar(5), resultado varchar(2));

por


CREATE TEMP TABLE  tmp_mensajes (orden smallint, mensaje varchar(255)) WITH NO LOG;
CREATE TEMP TABLE  tmp_hist_acad_mat (materia varchar(5), resultado varchar(2)) WITH NO LOG;

Y ver si el problema persiste.

Igualmente, de estar usandose bien el dbspace temporal, hay algun proceso que lo esta llenando. Eso puede ser a que las estadisticas no esten actualizadas o tengan algun problema de falta de algun indice… etc.

Una inscripción a examen tarda mucho (cuando la misma se ejecuta sin problemas)?

Alejandro,
te comento que YA AGREGUE TODOS LOS WITH NO LOG, ya que me parecia ese era el problema, pero no se soluciono.
Realice el onstat -d -r 1, y NO se llena nos temporales.
¿Por donde sigo?
Veo que al realizar un onstat - g sql sesid me da:
Last parsed SQL statement :
execute procedure mme_muestramensaje ( '800321,correlativaiex,-229 - ’ )

User-created Temp tables :
partnum tabname rowsize
800048 tmp_mensajes 258
100056 temp_actas 12
100056 tmp_hist_acad 13
400002 temp_matinsexa 366
400002 tmp_materias 425
Hay 5 tablas temporales y el sp_correlativas solo crea 2 ¿donde se generan las restantes?
Espero su ayuda.
Saludos.

Marcela Vera

En el proceso que evalua las materias genericas, se crean: (sp_resultgencurs)
tmp_hist_acad;
tmp_cursadas;
tmp_inscrip;

Este procedure de correlativas llama a otros sp.

En que dbspace esta la base?
Al poner WITH NO LOG, las tablas temporales las crea en dbspace temporal, sino las creará en el rootdbs o en la carpeta tmp del sistema del filesystem.
http://publib.boulder.ibm.com/infocenter/idshelp/v10/index.jsp?topic=/com.ibm.sqls.doc/sqls324.htm

Te fijaste si no es alguno de estos dos dbspcaes los que se llenan?

Tienen creado en el raiz del informix la carpeta “tmp” si es asi, el usuario informix tiene permisos de escritura?

Este dbspace ya no tiene espacio, no sera aca donde esta la base?
26084680 8 0x1 9 1 N informix dbs_g203

Unico Chunk:
25c85be8 9 8 0 500000 195 PO- C:\IFMXDATA\alum_w2000\dbs_g203.000

Alejandro,
agregue un chunck en el dbspace dbs_g203 que es en el cual esta la BD y comenzo a funcionar… al menos por estos 5 minutos que esta generado se estan inscribiendo los alumnos a examen
La carpeta tmp esta creada y con permisos.
Gracias por la ayuda, lo sigo monitoreando y les confirmo si era ese el problema.
Saludos

Marcela Vera

Claro, si ese era el dbspace de la base, entonces ese era el problema! solo tenia 195 paginas libres!!!

Muchísimas gracias Alejandro
El problema fue resuelto.
Que nos diera error en las ‘tablas temporales’ nos hacía fijar solamente en ese dbspace y no mirábamos los otros …

Saludos
Juan Carlos

El problema lo vieron a traves de ese error en la creación de tabla temporal y fue que esas tablas temporales al no tener la sentencia WITH NO LOG, al crearse la tabla temporal, informix necesita llevar log de los datos de la tabla temporal, con lo cual no usa el dbspace temporal (dbspace que veian que no se usaba o al menos no se llegaba a llenar) y hace que use el dbspace donde esta la base de datos que era la que estaba casi sin espacio físico disponible.