Problemas con servidor en produccion

Hola gente, tenemos un problema con un servidor. Todos los dias se cuelga y hay que reiniciarlo.

En el log de informix encontre esto al momento de colgarse:

06:05:02 Assert Failed: btposition: isfirst but pg_prev != 0 06:05:02 Informix Dynamic Server Version 7.30.UC7 06:05:02 Who: Session(18, dba@siu-medi, 4894, 0) Thread(50, sqlexec, 0, 1) File: rsbtree.c Line: 315 06:05:02 Results: Possible inconsistencies in index 'bdmedicina:"".# 573_4907' 06:05:02 Action: Run 'oncheck -cI bdmedicina:"".# 573_4907' 06:05:02 See Also: /tmp/af.32e83d 06:05:02 Assert Failed: ptmap 06:05:02 Informix Dynamic Server Version 7.30.UC7 06:05:02 Who: Session(18, dba@siu-medi, 4894, 0) Thread(50, sqlexec, 0, 1) File: rspartn.c Line: 1827 06:05:02 Results: Could not complete operation on 'bdmedicina:"".' 06:05:02 Action: Run 'oncheck -cDI bdmedicina:"".' 06:05:02 See Also: /tmp/af.32e83d, shmem.32e83d.1

A las 6 de la mañana tengo automatizado el UPDATE STADISTICS
Parece que en ese momento se cuelga.

Luego probe el oncheck -cDI y da error y se pone offline el motor

dba@siu-medi:~> oncheck -cI bdmedicina:sga_equiv_otorgada

Validating indexes for bdmedicina:dba.sga_equiv_otorgada…
Index 573_2796
Index 573_4907
Error reading from network
Abnormal end !!!

Parece que hay un indice roto en esa tabla pero no lo puedo arreglar.

Hola, suena como que hay indices que estan corruptos. Lo mejor es armar esa tabla desde cero nuevamente.

Fijate si podes hacer :
1- desde CMD ejecuta un dbschema -d bdmedicina -t sga_equiv_otorgada sga_equiv_otorgada.sql. Asegurate que el archivo sga_equiv_otorgada.sql tenga todo el DDL de la tabla.
2- En dbaccess ejecuta un UNLOAD de la tabla bdmedicina:sga_equiv_otorgada a un archivo plano,
3- Verifica que la cantidad de lineas en el archivo plano (wc -l), sea igual a la cantidad de filas de la tabla (select count(*) from tabla)
4- Luego desde dbaccess habria que crear esa tabla con otro nombre (modificando el nombre de la tabla en el archivo sga_equiv_otorgada.sql )
5- Cargarle los datos desde el archivo generado en 2) con LOAD
6- Por ultimo si la carga de datos anduvo OK, renombra la tabla original a sga_equiv_otorgada_old y renombra la nueva tabla a sga_equiv_otorgada

Si el script de Update statistics ignora la tabla sga_equiv_otorgada_old, todo deberia andar OK
Si el script de Update statistics tambien quiere correr upd stat para la tabla sga_equiv_otorgada_old, vas a tener que borrar la tabla sga_equiv_otorgada_old

Cualquier duda, decime
saludos
Ignacio

Hola Ignacio, gracias por responder

Lo voy a probar y te cuento

tengo una duda en el paso 6.

Si renombro la tabla sga_equiv_otorgada a sga_equiv_otorgada_old que pasa con las referencias de otras tablas? pasan a referenciar a sga_equiv_otorg_old?

Luego cuando renombre la tabla que llene con el LOAD a sga_equiv_otorgada nadie la va a referenciar por que todas las tablas van a referenciar a sga_equiv_otorgada_old.

Creo que va a pasar eso o me equivoco, o no entendi bien el paso 6

Hola Gustavo, Estamos sincronizados, porque justo anoche me estaba acordando de esto mismo, y no recordaba si te habia mencionado lo de acomodar las FK o no. Efectivamente, al renombrar la tabla todas las FKS van a seguir apuntando a la tabla vieja, y deberias recrearlas nuevamente apuntando a la nueva tabla.

Igualmente Mientras no haya modificaciones a los datos, los indices asociados a las FK, van a seguir usandose inclusive si hay queries entre la tabla nueva y las que tienen las referencias.

saludos
Ignacio