Publicado el Dejar un comentario

Listar las tablas y su número de registros o filas en Informix 11.

Para generar un listado de las tablas y el número de registros o filas en cada una de ellas, contenidas en una base datos de Informix 11 se logra con la siguiente consulta:

select tabname as tabla, owner as propietario, nrows as registros from systables where  tabname not like ‘sys%’ and owner in (‘informix’,’prueba’);

La sentencia sql anterior, regresará el nombre de la tabla, el nombre del propietario de la tabla y el número de registros en cada una de ellas de las tablas que no sean del sistema (las que inician con sys) y cuyos propietarios sean los usuarios informix o prueba.

Sin embargo, la sentencia anterior no mostrará los últimos cambios registrados en las tablas en algunos casos. Para ello es necesario, antes de ejecutar la sentencia anterior la siguiente sentencia sobre la base de datos:

update statistics;

Dicha sentencia actualizará la información de las tabla systables.

¡Saludos!

Publicado el Dejar un comentario

Informix: -23103 – code-set conversion function failed due to illegal sequence or invalid value

Resulta que necesitaba duplicar una base de datos informix en mi trabajo para probar unas nuevas implementaciones al sistema en producción.  La versión de informix en producción era 9.x. Me baje la versión de desarrollo de Informix que es gratuita pero versión 11.x. El sistema operativo de producción es Solaris 10. Mi ambiente de desarrollo Windows 7. Instalé la versión de desarrollo de Informix con algunos pequeños detalles pero al final la instaló y funcionó. Me pude conectar a ella sin problema.

Los operadores de la base de datos en producción me pasó el respaldo completo de la base de datos generada con el comando dbexport, una carpeta formada con el nombre de la base de datos más la extensión exp, Adentro trae los datos y los c comandos para crear la base de datos completa. Después de crear el Dbspace donde iba a estar la Base de Datos de Desarrollo me dispuse a crear la Base de Datos con el respaldo proporcionado.

Ejecuté el comando dbimport nombre_base_de_datos nombre_-d dbspace, el comando inició sin problemas, me aparecía en pantalla los comandos que iba ejecutando, la creación de las tablas y la carga de datos, de pronto se detuvo en la carga de los datos de una tabla, el mensaje que me arrojó fue:

“-23103 – code-set conversion function failed due to illegal sequence or invalid value”

Pues a investigar de que se trataba. El problema era el Locale de la base de datos que estaba importando y el locale del ambiente DOS desde donde estaba ejecutando el comando dbimport. Cada base de datos guarda el locale en el que fue creado. Echando un vistazo a las variables de la ventana DOS donde estaba ejecutando el comando, me aparecieron con el valor por omisión de la instalación de Informix, éstas eran CLIENT_LOCALE=en_US.8859-1 y DB_LOCALE=en_US.8859-1. La primera variable de ambiente le indica a Informix el locale del cliente, la segunda variable el locale de la base de datos.

Para obtener en que locale se creó la base de datos hay que ejecutar en la base de datos sysmatser de informix el siguiente comando:

select * from sysdbslocale where dbs_dbsname = 'nombre_base_de_datos';

La columna dbs_collate es la que andamos buscando, esta columna indica el que locale está la base de datos que queremos importar. En mi caso me arrejó en_US.819. Me fui a ventana de DOS donde estaba ejecutando el comando de importación, borre la Base de Datos creada parcialemente por medio de comando dbaccess.

Establecí las variables de ambiente de la siguiente forma: SET CLIENT_LOCALE=en_US.8859-1 y SET DB_LOCALE=en_US.819

Y nuevamente ejecuté el comando dbimport y asunto arreglado.

Espero y les sea de utilidad.