[SOLUCIONADO] indice corruptos sga_datos_censales

Hola:

Tenemos los siguientes indices corruptos de la tabla sga_datos_censales, al ejecutar la consulta:

E:\INFORMIX>oncheck -cI prod264h:sga_datos_censales

Please Drop and ReCreate Index 676_3423 for prod264h:dba.sga_datos_censales.
Please Drop and ReCreate Index 676_4769 for prod264h:dba.sga_datos_censales.

Como busco la estructura que tienen?. para volver a crearlos

Muchas gracias!!!

Posiblemente ese indice por no tener un nombre definido sino que es un nombre que se asignó automáticamente tenga que ver con un indice generado por una primary key o una foreign key.

La tabla es la 476 que corresponde a sga_datos_censales

Podes ver que campos de la tabla son usados por ese indice, fijate en los campos part1, part2, … part16 de la consulta:


select t.tabname, i.* from sysindexes as i, systables as t where i.idxname (' 676_3423', ' 676_4769')
and t.tabid = i.tabid; -- tienen un blanco al comienzo del nombre...

En el campo idxtype te dira si es un indice unico (U - seguro esta relacionado con la pk de la tabla) o un indice duplicado (D - posiblemente relacionado con una foreign key)

Luego busca a que columnas hace referencia en esos campos partx

select * from syscolumns where tabid = 676;

Conociendo los campos podrias ver a que tabla hace referencia si fuera un indice de una foreign key o si es el indice de la primary key de esa tabla.

Esta consulta recupera las fk que tiene la tabla sga_datos_censales y podras ver cada foreign key que indice asociado tiene, fijate si encontras los que te informa ahi:


  SELECT informix.systables.tabname,   
         informix.systables.tabid,   
         informix.sysconstraints.constrid,   
         informix.sysconstraints.constrname,   
         informix.sysconstraints.constrtype,   
         informix.sysconstraints.idxname,   
         informix.sysindexes.idxtype,  
         informix.sysreferences.primary,  
         informix.sysreferences.ptabid,
         informix.sysreferences.delrule,
			st.tabname
    FROM informix.sysconstraints,   
         informix.systables,   
         informix.sysindexes,  
         informix.sysreferences,
         informix.systables st   
   WHERE ( informix.systables.tabid = informix.sysconstraints.tabid ) and  
         ( informix.sysconstraints.idxname = informix.sysindexes.idxname ) and  
         ( informix.sysconstraints.constrtype = 'R') and  
         ( informix.sysconstraints.constrid = informix.sysreferences.constrid ) and  
         ( informix.sysreferences.ptabid = st.tabid ) and  
         ( ( informix.systables.tabname = 'sga_datos_censales' ) )    

En este caso deberias borrar las foreign key relacionadas con estos indices y volverlas a crear ya que automaticamente crerará estos indices.

Hola

Salvo que sean tablas de ustedes, deben ser la fk de las otras dos tablas de datos censales.

Emilio

Hola a todos

Para complementar un poco la respuesta de Ale, tambien podes hacer un:

dbschema -d prod264h -t sga_datos_censales

Eso te va a dar el SQL completo de esa tabla , entre otras cosas la pk y las fks de la tabla (en el caso de fks, te da los alter table para crearlas), no te va a mostrar los nombres de los indices, porque como dice Ale, son nombres que pone informix porque se trata de indices creados implicitamente.

Lo importante es que pudas asociar los nombres de los indices que estan mal, con la PK o FK a la que pertenecen y puedas entonces recrear dicha PK o FK

saludos
Ignacio

muchas gracias!!!