Configuracion de conexiones a Informix
Informix's connections setup

Contenido/contents:
Intro
Linux Server setup
Windows client setup
Linux client setup
Final
Pagina principal/Home page

Intro
Los siguientes consejos de conectividad son para configurar un servidor de base de datos Informix IDS 9.30.UC2 en un servidor con RedHat Linux version 8.0. The following tips and tricks are for setting up an Informix IDS server in a linux box runnig RedHat version 8.0.
Por supuesto que si sirve para otras versiones de IDS y de Linux, pero en estas versiones lo tengo trabajando en produccion sin ningun problema. Of course this also works for another IDS and Linux versions, but this is what I have running for now.
La ultima version que probe con este procedimiento fue IDS 9.40.UC2 con RedHat 8, aunque el servidor puede correr en Redhat 9, al tambien utilizar informix 4GL en el mismo servidor me vi limitado a usar la version anterior de Redhat. The last version I test with this procedure was IDS 9.40.UC2 with RedHat 8, although IDS can run in RedHat 9, I also work with 4GL RDS in the same server, so I needed to use the old RedHat version.
Acalaracion: Con las versiones de 4GL a partir de 7.31 ya se puede instalar en RedHat 9, Fedora, CentOS y todos las nuevas distribuciones. El comentario anterior fue porque IBM saco el motor IDS para el nuevo kernel varios meses antes de sacar sus herramientas. Note: Since version 7..31, 4GL can be inatalled en RedHat 9, Fedora Core, CentOS and all the new distributions. The prior remark was for long time between IBM released the IDS for kernel 2.6 and te liberations of the tools.
Linux Server setup
Hay que crear el medio ambiente de trabajo de informix, yo modifico el archivo /etc/profile con las variables requeridas por mi applicacion: We need to make the environment for Informix, I modify the file /etc/profile with te variables needed for my application.
export INFORMIXSERVER=adela_n
export INFORMIXDIR=/opt/informix
export ONCONFIG=onconfig
export SQLHOSTS=$INFORMIXDIR/etc/sqlhosts
export DBDATE=DMY2/
export DBCENTURY=C
export DBEDIT=vim
export DBSCREENOUT=/u/tmp/${USER}.out
PATH=$PATH:$INFORMIXDIR/bin
Me desactivo y vuelvo a activar para que tome los cambios Need to logout/login to make the changes take effect.
logout
Debe de existir el grupo y el usuario informix, si no hay que crearlos con user-id y group-id mayor que 100. There must exist the group and user 'informix', if not, you need to create them with an user-id and group-id greater than 100.
mkdir $INFORMIXDIR
groupadd informix
useradd -g informix -d $INFORMIXDIR informix
Para modificar los parametros de kernel para optimizar el uso de los recursos hay que modificar el archivo /etc/sysctl.conf , yo solo le muevo dos valores para que me tome menos segmentos de memoria pero mas grandes (de 512 megas c/u). To modify the required kernel parameter for tunning, we need to modify the /etc/sysctl.conf file, I only modify two parameters to use fewer quantity of shared memory segments but of larger size (512 MB each).
# Modifica shared memory para informix
kernel.shmmax = 536870912
# Modifica Numero maximo de archivos
fs.file-max = 65536
Para cargar los nuevos valores, ejecutar el comando: To load the new kernel parameters execute the following command:
sysctl -p
Para crear las particiones en el disco para los chunks de informix, antes de existir LVM se tenian que particionar los discos en varios pedazos de 2 Gb, y como linux limita a maximo 15 particiones por disco estabamos llimitado a discos de 30 GB, o habia que crear varios LUNs en el disk array. In order to partition the hard disk for informix chunks, before LVM we need to partition the disk in several 2 Gb slices, and as linux is limited to up to 15 partition per SCSI disk, we were limited to 30 Gb disks, another option was to make several LUNS of 30 Gb in the disk array.
Ya con IDS 9.40 se puden manejar chunks mayores de 2 GB pero como esta guia es on IDS 9.30 voy a usar LVM. Now with IDS 9.40 we can use chunk larger than 2 Gb, but as this guide is for IDS 9.30 I'll use LVM.
Se crea el 'Volumen fisico (Physical Volume) We create the 'Physical Volun in the disk:
[root@tina sysconfig]# pvcreate /dev/sdb1
pvcreate -- physical volume "/dev/sdb1" successfully created
Se crea el volume group usando uno o varios volumenes fisicos We create the 'Volume group' assigning one o several 'physical volumens':
[root@tina sysconfig]# vgcreate vg01 /dev/sdb1
vgcreate -- INFO: using default physical extent size 4 MB
vgcreate -- INFO: maximum logical volume size is 255.99 Gigabyte
vgcreate -- doing automatic backup of volume group "vg01"
vgcreate -- volume group "vg01" successfully created and activated
Y despues de eso ya asignamos el espacio para los chunks Then we can create then 'logical volumens', one per chunk.
[root@tina vg01]# for f in `seq 1 68`; do lvcreate --size 2G vg01; done
lvcreate -- doing automatic backup of "vg01"
lvcreate -- logical volume "/dev/vg01/lvol2" successfully created

lvcreate -- doing automatic backup of "vg01"
lvcreate -- logical volume "/dev/vg01/lvol3" successfully created

lvcreate -- doing automatic backup of "vg01"
lvcreate -- logical volume "/dev/vg01/lvol4" successfully created

...

lvcreate -- doing automatic backup of "vg01"
lvcreate -- logical volume "/dev/vg01/lvol47" successfully created

lvcreate -- only 443 free physical extents in volume group "vg01"
lvcreate -- only 443 free physical extents in volume group "vg01"
lvcreate -- only 443 free physical extents in volume group "vg01"
Una vez creados los volumenes logicos es recomendable asociarlos con dispositivos crudos (raw devices) para evitar el cache del sistema operativo.

Esto lo hacemos modificando el archivo /etc/sysconfig/rawdevices, en el listamos el nombre del dispoitivo crudo y el nombre del dispositivo fisico del disco (logical volume) con el que esta asociado:
Once the chunks are created it's recommended to link then with raw devices to avoid the operating system cache.

We made this in the file /etc/sysconfig/rawdevices, there we list the name of the raw devices and the name of the partition (logical volumen) associated.
[ortiz@adela sysconfig]$ head -10 /etc/sysconfig/rawdevices
# raw device bindings
# format:    
#           
# example: /dev/raw/raw1 /dev/sda1
#          /dev/raw/raw2 8 5
/dev/raw/raw1   /dev/vg01/lvol1
/dev/raw/raw2   /dev/vg01/lvol2
/dev/raw/raw3   /dev/vg01/lvol3
/dev/raw/raw4   /dev/vg01/lvol4
/dev/raw/raw5   /dev/vg01/lvol5
Ahora tenemos que activar el servicio y tambien hay que verificar que este se active cada vez que se prende la maquina: We need to start the service and check tha it is enabled on reboot:
chkconfig --level 345 rawdevices on
service rawdevices start
Ahora hay que modificarle los permisos a los dispoitivos crudos, como yo solo uso estos dispositivos para informix modifico el permiso a toda la carpeta: We also need to change the permitions of the raw devices, as I only use the raw devices for Informix, I change the premitions of the whole directory:
chown informix:informix /dev/raw/raw* chmod 660 /dev/raw/raw
Nos cambiamos al directorio de Informix y limpiamos la mascara de creacion: We change to the Informix directory and set the creation mask.
cd $INFORMIXDIR
umask 0
Instalar los productos Informix en el siguiente orden: We need to install the Informix products in the correct order:
  1. 4GL RDS Developer 7.30.UC7
  2. 4GL RDS Run-time 7.30.UC7
  3. IDS 9.30.UC2
  4. CSDK 2.81.UC3
En esta guia no vamos a ver la instalacion del 4GL, la instalacion del CSDK lo vemos en la instalacion de la maquina cliente linux. The installation of 4GL is now cover here, and the installation of the CSDK is cover in the client section
Instalamos el motor, la opcion --force es por si ya habia instalados otros archivos en el mismo directorio Install the engine, the --force option is in case you already have files from other products.
export RPM_INSTALL_PREFIX=$INFORMIXDIR
rpm -ivh --force /mnt/cdrom/IDS.930UC2.LINUX.rpm
Si al instalar manda un error diciendo "ERROR: INFORMIXDIR does not match the target directory name provided in the rpm command." teclea OVERRIDE y la tecla enter cuando diga "Hit the interrupt key NOW to abort RPM.". If during the install you got the message "ERROR: INFORMIXDIR does not match the target directory name provided in the rpm command." type OVERRIDE and the return key when prompted "Hit the interrupt key NOW to abort RPM.".
Ahora hay que hacer los cambios necesarios al archivo de configuracion del motor $INFORMIXDIR/etc/onconfig para que levante. Make a few changes to the configuration file $INFORMIXDIR/etc/onconfig to make the engine start up.
ROOTNAME        rootdbs          # Root dbspace name
ROOTPATH        /dev/raw/raw1    # Path for device containing root dbspace
ROOTOFFSET      0                # Offset of root dbspace into device (Kbytes)
ROOTSIZE        2000000          # Size of root dbspace (Kbytes)
...
DBSERVERNAME    adela_n          # Name of default database server
DBSERVERALIASES adela_shm        # List of alternate dbservernames
...
NETTYPE         soctcp,4,90,NET
NETTYPE         ipcshm,4,90,CPU
El primer bloque de parametros es para asignarle el area de trabajo para el espacio principal de la base de datos donde se almacenan los catalogos del sistema y las areas reservadas del motor.

Notese que ya estoy asignado el primer dispotivo crudo para el rootdbs.
The first parameter block assigns the work area for the main data space, where the sustem tables and reserved pages of the engine are stored.

Note that I'm assigning the first raw device.
El segundo bloque es el nombre del servidor de la base de datos, DBSERVERNAME debe de coincidir con el valor de la variable $INFORMIXSERVER. Normalmente se agrega un alias para permitir conexiones via memoria compartida y no solo conexiones de red TCP/IP. The second block is the name of the data base server, DBSERVERNAME must match the value of the $INFORMIXSERVER variable. It;s normal to add an alias to accept shared memory connections and not only TCP/IP connections.
El tercer bloque es para decir cuantas conexiones simultaneas a la base de datos permitiremos y con cuantos procesos los vamos a administrar. En este ejemplo se permiten 360 conexiones via red en 4 procesos cada uno manejando 90 conexiones, asi como otras 360 conexiones via memoria compartida. The third block defines how many simultaneus connections to the data base are allowed and with how many processes are served. In this example 360 networks connections are allowed and they're managed with 4 proceses serving 90 connections each, also there're other 360 shared memory connextions allowed.
Hay muchos mas parametros que se pueden ajustar para optimizar el rendimiento, pero esta guia es solo para dejarlo funcionando. Solo quisiera mencionar que con la configuracion de fabrica uno esta limitado a 768 Mb de memoria para Informix, por lo que en mi caso yo modifique el parametro SHMBASE al valor de 0x50000000 y ya puede llegar al limite de los 2 Gb. There're a lot more of paramters that can be tuned, but this guide is just for make it work. I just want to say that the factory configuration allows up to 760Mb of memory for informix use, I set the SHMBASE to 0x50000000 and now I can use up to the 2Gb limit.
Ahora hay que configurar el archivo que lista los servidores conocidos indicado el metodo de acceso a ellos. En este caso el archivo $INFORMIXDIR/etc/sqlhosts debe de contener al menos estos dos renglones: Next, we proceed to configure the file with the list of known servers and the way to access them. In this case the file $INFORMIXDIR/etc/sqlhosts must contain at least the following two lines:
# Archivo sqlhosts resolviendo nombre en /etc/hosts y /etc/services
adela_n         onsoctcp        adela                   sqlexectcp4
adela_shm       onipcshm        adela                   sqlexectcp
La primer columna es el nombre del servidor y coincide con el valor de DBSERVERNAME y de DBSERVERALIASES. The first column is the name of the server and must match the value of DBSERVERNAME and DBSERVERALIASES.
La segunda columna es elprotocolo de comunicacion y es onsoctcp para conexiones via red TCP/IP y onipcsshm para conexiones via memoria compartida para comunicacion entre programas. The second column is the communication protocol and is onsoctcp for TCP/IP network connections and onipcshm for shared memory connections.
La tercera columna es el nombre de la maquina y se debe de resolver a una direccion IP por medio del archivo /etc/hosts o por medio de un servidor DNS. Tambien se puede teclear directamente el numero de direccion IP. The third column is the name of the machine (host) and must resolve to an IP address thru /etc/hosts file or a DNS server.
La cuarta columna es nombre del puerto de comunicacion TCP/IP en el archivo /etc/services, tambien se puede usar el numero de puerto si no se quiere o puede modificar el archivo de servicios. The fourth column is the name of the TCP/IP port in the /etc/services file, you can use the port number insted, if you dont want or can't modify the services file.
Este es un ejemplo del archivo $INFORMIXDIR/etc/sqlhosts con los numeros de direccion IP de la computadora y del puerto en lugar de usar los nombres. This example is for an $INFORMIXDIR/etc/sqlhosts file using IP and port numbers insted of names.
# Archivo sqlhosts con los numeros de direccion y de puerto
adela_n         onsoctcp        192.168.200.10          1974
adela_shm       onipcshm        192.168.200.10          1970
Ya con esto podemos arrancar el motor por primera vez e inicializar las estructuras de control. Si al arrancar el informix dice: WIth this files setup we can now start the engine for the first time and create the control structures in the rootdbs. If during start up we get this message:
[root@tina etc]# oninit -iyv
oninit: relocation error: /var/lib/libpthread.so.0: symbol __on_exit, 
version GLIBC_2.0 not defined in file libc.so.6 with link time reference
Hay que borrar la libreria que tiene el conflicto porque la que incluye el sistema operativo ya es correcta: We need to remove the conflicting library because the one included with the operating system is the correct onw:
rm /var/lib/libpthread.so.0
El proceso de oninit -i hace uso de dbaccess para crear la bases de datos sysmasters y sysutils y puede mandar un error como: The 'oninit -i' process use dbaccess to create the sysmasters and sysutils databases and can also fail with this message:
dbaccess: error while loading shared libraries: libncurses.so.4: cannot open shared 
object file: No such file or directory
En ese caso hay que ligar la libreria curses de la version actual (5) a la requerida (4), o se puede instalar el paquete (rpm) de la version 4. In this case you need to link the version 5 curses library to the required version (4), or you can install the old rpm package.
ln -s /usr/lib/libncurses.so /usr/lib/libncurses.so.4
Despues de eso el comando oninit -ivy debe de terminar sin problemas: After all this the 'oninit -ivy' should end with no problems:
[informix@tina informix]$ oninit -ivy
Checking group membership to determine server run modesucceeded
Reading configuration file '/opt/informix/etc/onconfig'...succeeded
Creating /INFORMIXTMP/.infxdirs ... succeeded
Creating infos file "/opt/informix/etc/.infos.adela_n" ... "/opt/informix/etc/.conf.adela_n" 
... succeeded
Writing to infos file ... succeeded
Checking config parameters...succeeded
Allocating and attaching to shared memory...succeeded
Creating resident pool 97808 kbytes...succeeded
Creating buffer pool 1400002 kbytes...succeeded
Initializing rhead structure...succeeded
Initializing ASF ...succeeded
Initializing Dictionary Cache and SPL Routine Cache...succeeded
Bringing up ADM VP...succeeded
Creating VP classes...succeeded
Onlining 6 additional cpu vps...succeeded
Onlining 3 IO vps...succeeded
Forking main_loop thread...succeeded
Initializing DR structures...succeeded
Forking 4 'soctcp' listener threads...succeeded
Forking 4 'ipcshm' listener threads...succeeded
Starting tracing...succeeded
Initializing 2 flushers...succeeded
Initializing log/checkpoint information...succeeded
Opening primary chunks...succeeded
Opening mirror chunks...succeeded
Initializing dbspaces...succeeded
Validating chunks...succeeded
Creating database partition
Initialize Async Log Flusher...succeeded
Forking btree cleaner...succeeded
Initializing DBSPACETEMP list
[informix@tina informix]$ Checking database partition index...succeeded
Checking location of physical log...succeeded
Initializing dataskip structure...succeeded
Checking for temporary tables to drop
Forking onmode_mon thread...succeeded
Verbose output complete: mode = 5
Despues hay que monitorear el log con el comando 'onstat -m' para ver que se creen bien las bases de datos del sistema, si manda este error After this you need to monitor the log file wuth the 'onstat -m' command to confirm that the databases are created correctly, if you get this error:
...
15:13:47  On-Line Mode
15:13:47  Building 'sysmaster' database ...
15:13:48  Error building 'sysmaster' database.
15:13:48  See '/tmp/buildsmi.1046'.
Hay que revisar el archivo y ver el problema, casi siempre es por la libreria ncurses o por algun parametro incorrecto de onconfig y/o de sqlhosts.

Cuando todo esta bien el onstat -m debera de mostrar
You need to inspect the file and determine the problem, an usual error is for the ncurses library or an incorrect parameter in the onconfig or sqlhost file.

When everything is OK, the 'onstat -m' command should show:
15:23:40  On-Line Mode
15:23:40  Building 'sysmaster' database ...
15:23:51  Booting Language <spl> from module <>
15:23:51  Loading Module <SPLNULL>
15:23:51  Unloading Module <SPLNULL>
15:23:53  Loading Module <SPLNULL>
15:23:57  Unloading Module <SPLNULL>
15:23:59  'sysmaster' database built successfully.
15:24:00  'sysutils' database built successfully.
A partir de este momento el servidor de base de datos ya esta corriendo y puede recibir requerimientos para crear bases de datos, dbspaces, chunks, tablas, etc. From here the database server is running and accepting request to create datbases, dbsapces, chunks, tables, etc.
Ahora si conectados como un usuario normal (NO como root), podemos crear nuestra primera base de datos. Now we need to connect as a nomral user (NO as root), and create our first database.
Recomiendo crear la base de datos de demostracion stores7 ya que esta es usada por varios programas clientes para verificar la conectividad. I recommend the demostration database stores7 because it's used for many client programs for testing.
Teclear el siguiente comando en un directorio de pruebas para poder copiar los scripts SQL de pruebas sin que se revuelvan en tu directorio de trabajo. Type the following command in a spare directory to be able to copy the demo SQL scripts without affecting your directory.
dbaccessdemo7 stores7
Una vez creada podemos usar el programa dbaccess para ejecutar una consulta sencilla a la base de datos. Once created we can use dbaccess to execute a simple query:
[ortiz@adela bin]$ dbaccess stores7 <<!
> select * from call_type
> !

Database selected.



call_code code_descr

B         billing error
D         damaged goods
I         incorrect merchandise sent
L         late shipment
O         other

5 row(s) retrieved.



Database closed.
Windows client setup
Solo es necesario instalar el Informix Ccnnect en las maquinas cliente windows, pero por costumbre yo instalo el CSDK completo en las PC. In the client machines it's only required to install the Informix-Connect, but I get used to install the full CSDK in the PC.
Desde la version 2.?? el CSDK fue diseñado para WIndows XP y genero ciertos pequeños, pero molestos, problemas en la instalacion con Windows 9X. Since version 2.?? the CSDK was designated for Windows XP y caused some minor, but annoying problems installing in windows 9X.
El problema principal fue el cambio del PATH de c:\Informix a c:\Archivos de programas\Informix\Client-SDK. Y esto debido a un 'pequeño' error en su script de instalacion que omite poner entre comillas la ruta nueva en path. The main problem was the change of the installation path from c:\informix to c:\program files\Informix\Client-SDK. Y due to a small error in the installation script wich ommited the quotes in the PATH.
La solucion es modificar el autoxec.bat y encerrar entre comillas la ruta, o cambiar la ruta a c:\archiv~1\informix\client-sdk. Otra alternativa es instalar en el directorio c:\informix. The solution is modify the autoxec.bat and quote the path, or change the directpry to c:\program~\informix\client-sdk. ANother solution is install in older directory c:\informix.
Una vez instalado en el directorio correcto, se procede a usar el programa setnet32 para configurar los parametros del servidor. After CSDK is correctly installed, we proceed with the setnet32 program to setup the server paramters.
Yo primero configuro 'HOST INFORMATION', o maquina donde se esta ejecutando la instancia de informix. First I setup 'HOST INFORMATION', or the box where the server is executing the IDS instance.
En 'current host' se puede teclear el nombre de la maquina si esta bien configurada la red y/o se tiene modificado a mano el archivo de hosts. En mi caso yo tengo otro servidor linux como servidor DNS y todos lo clientes windows/linux tienen configurado mi servidor interno para resolver los nombres. In 'current host' type the name of the machine if the network is correclty setup or if you have modified the host file. I have my own DNS server in another linux box and all my client has this server for name resolution.
No es la idea de este tema la configuracion de resolucion de nombres, simplemente si no se le puede hacer 'ping' por nombre a la maquina, teclee el NUMERO IP del servidor. This guide is not for setting a DNS server, if you can't 'ping' the server by name, type the IP NUMBER of the server box.
En 'user name' teclee el nombre de usuario linux, informix se basa en los usuarios del sistema operativo del servidor (en este caso linux). No hay que dar de alta los usuario en la base de datos, unicamente darles o revocarles permisos segun sea el caso. In 'user name' type the name of the linux user in the server, Informix uses the users from the server operating system (linux in this case). It;s no required to add the users in the database, only grant or revoke the permitions as needed.
En 'password option' yo siempre uso 'password' para que los programas VB u otros que leen de la base de datos no pidan por la contraseña. Pero ahi depende de las politicas de cada empresa. In 'password option' I allways use 'password' because I don't want the VB programs to have hardcoded the password. But here depends of every company preferences.
Una vez 'aplicado' el nuevo 'Host', procedemos al 'Server Information' donde damos de alta los parametros de la instancia IDS. After 'aplying' the new 'host', we proceed to 'Server Information' tab, where are defined the parameters of the IDS instance.
En 'IBM Informix Server' se teclea el nombre del DBSERVERNAME o DBSERVERALIAS al cual nos vamos a conectar, debe de ser el que tenga como segundo parametro en el sqlhosts el protocolo onsoctcp. In the 'IBM Informix Sever' field type the name in DBSERVERNAME or DBSERVERALIASES to connect, must be the name with the second parameter onsoctcp in the sqlhosts file.
Como 'HostName' escogemos de la lista el que acabamos de dar de alta en la pestaña de 'Host Information'. As 'HostName' we choose from the list the one just added in the 'Host Information' tab.
Como 'Protocolname' es 'onsoctcp'. As 'Protocolname' type 'onsoctcp'.
Como 'Service Name' podemos teclear el nombre del servicio SI modificamos a mano el archivo services de la PC, en caso contrario tecleamos EL NUMERO de protocolo. En lo particular yo siempre uso el NUMERO de protocolo. In 'Service Name' we can type the name only IF we modified the services file in the PC, otherwise type the NUMBER. I allways use the protocol number.
Aplicamos los cambios y lo asignamos como servidor principal con 'Make Default Server'. We must Apply the changes y also mark the option 'Make Default Server'.
Por ultimo en la pestaña 'Environment' debemos de escoger la opcion 'Use my settings', ademas de modificar las variables que nuestra aplicacion requiera (DBDATE, DBCENTURY, etc.). Finally, in the 'Environment' tab mark 'Use my settings', also chage the value of the variables required for the appliplcation (DBDATE, DBCENTURY, etc.).
Una vez configurado los parametros de conectividad de informix ya podemos usar el programa ILogin Demo When all the settings configured we can use the ILogin Demo program.
En el menu escojemos 'File', 'Run' y debe de mostrar ya en el campo 'Server' el nombre del servidor por default que marcamos en el setnet32. En caso de que no muestre el servidor, intente apagando y volviendo a iniciar la computadora. In the menu choose, 'File' and 'Run', the program should fill the 'Server' field with the name of the default server chosen with setnet32. If none is shown, restart the windoze box.
El demo requiere que exista la base de datos 'stores7' en el servidor, no he encontrado motivo para que no este y me ha sido util tenerlo para hacer las pruebas por lo cual les recomiendo que la dejan permanentemente. This demo requires the 'stores7' database in the server, I haven't found a reason why should't be, so just keep this database premanently in the server.
Al darle click en 'OK' en menos de un segundo se mostrara la lista de los clientes en la base de datos 'stores7', si hay algun problema el programa DBPing nos puede ayudar a identificar la falla. Cliking the 'OK' button should show in less than a second, a list of customers in the 'stores7' database. In case of problems the DBPing can help us to isolate the failure.
DBPing hace la prueba en tres capas, TCP/IP, I-Connect y ODBC. Primero verificamos a nivel TCP/IP la conectividad entre maquinas. DBPing check the connectivity in three layers: TCP/IP, I-Connect and ODBC. First we should verify the TCP/IP connectivity between machibes.
En el campo 'Host Name' se puede escribir el nombre o la IP del host, intenta con los dos para ver si se resuleven bien los nombres. Si solo sirve el numero, cambia en el setnet32 a usar el numero en lugar del nombre. In the 'Host Name' field type the name or IP number of the host, try both to veridy the name resolution. If only with the number work, correct with setnet32 and use the number insted.
Si funciona bien a nivel TCP/IP podemos probar a nivel I-Connect, teclea unicamente el nombre del servidor en 'Informix Server' y dale click en Ping. If everything is OK at the TCP/IP level, try I-Connect, type the name of the server in the 'Informix Server' field and click on 'ping' buttton.
Si hubiera algun error se puede usar el programa Find Error para localizarlo. In case of error we can use the Find Error program.
Una ves verificada la conectividad se puede crear el ODBC si nuestra aplicacion lo requiere. When everything is tested we can procede to create the ODBC entry if our app requires it.
Linux client setup
Para ejecutar algun programa cliente en una maquina linux que lea datos de un servidor informix ejecutandose en otra (o la misma) maquina, es necesario instalar el producto Informix Connect o el CSDK si se tiene que construir una libreria (como con Perl o PHP). To execute client programs wich access data in a remote (or local) Informix server, you need to install 'Informix Connect' or the CSDK if you need to build a library (as with Perl or PHP).
Para RH9 las versiones anteriores a 2.81.UC2X5 del CSDK mandaban errores de "undefined reference to `__ctype_b'". La version X5 solo era para clientes con soporte pagado, por fortuna ya hicieron 'publica' la version 2.81.UC3 y se puede descargar del sitio de IBM. For RH9 versions of the Informix CSDK older than 2.81.UC2X5 had the problem of "undefined reference to '__ctype_b'". Version X5 was only available for paid support customers only, but now version 2.81.UC3 is available at the IBM site.
Hay que agregar las variables de medio ambiente de Informix. Yo recomiendo en el archivo /etc/profile para que se ejecute cada vez que se conecta un usuario.
Agregar las siguientes instrucciones (o las que requiera su servidor) al final del archivo /etc/profile:
You should setup the Informix environment variables. I sugest in the /etc/profile file wich is executed for every user at logon.
Add the following lines (or the correct ones for your server) as the last lines of the /etc/profile file:
export INFORMIXDIR=/opt/informix
export INFORMIXSERVER=adela_n
export DBDATE=DMY2/
export DBCENTURY=C
export PATH=$PATH:$INFORMIXDIR/bin
Hay que desactivarnos y volvernos a conectar para que tome el nuevo medio ambiente: We need to logout and login again to take the new environment in effect.
logout
Agregamos el grupo y usuario de informix: Add the group and users 'informix':
groupadd informix
useradd -g informix -d $INFORMIXDIR informix
Como IBM cambia las opciones para descargar y la ultima ves me pidio registrarme para descargalo, solo les digo consiganlo. As IBM change the options to download the CSDK and the last time they ask me for my users/password, I only say get the CSDK!
cd $INFORMIXDIR
umask 0
# Download: clientsdk.2.81.UC3.LINUX-I32.tar
# Informix Downloads for Linux (Informix Client SDK V2.81.UC3 32 bit for Linux on Intel)
# Version: 2.81.UC3
# File Size: 67MB
# Languages Included: English US
Este archivo tar contiene al archivo csdk.cpi y varios archivos de documentacion. This tarball contains the file csdk.cpi and the documentation.
tar xvf clientsdk.2.81.UC3.LINUX-I32.tar
Ahora extraemos el contenido del archivo csdk.cpi. Nota, en el manual de instalacion le falta el < en el comando y provocado mas de un dolor de cabeza a los que como yo tenemos mas practica con tar que con cpio. Now we extract the content of the csdk.cpi file. Note, in the Installation Guide there is a < missing in the command and is a headache for people like me with more experince in tar than with cpio.
cpio -icdumB <csdk.cpi
Ahora si procedemos a instalar el CSDK. Y contestamos a las preguntas que nos haga. Now we are ready to install the CSDK:
./installclientsdk
Ahora procedemos a agregarle las librerias al ld. Al final del archivo /etc/ld.so.conf hay que agregar los siguientes directorios: Now we add the libraries to the ld linker. At the end of the /etc/ld.so.conf file add the folowwing lines:
/opt/informix/lib
/opt/informix/lib/esql
/opt/informix/lib/cli
/opt/informix/lib/client
/usr/local/lib
Una ves agregados los directorios hay que ejecutar el comando ldconfig para tome los cambios. We need to execute the ldconfig command to activate the changes in configuration.
ldconfig
Para configurar el archivo $INFORMIXDIR/etc/sqlhosts hay que tener a la mano la configuracion en el servidor o la informacion de como se configuro otro cliente (aunque sea Windows). We only need to configue the $INFORMIXDIR/etc/sqlhosts, we need to have available the server configuration or the configuration information of another client (even a Windoze client works).
El archivo sqlhosts tiene (minimo) cuatro campos:
  1. Campo 1 Nombre del servidor de la base de datos.
  2. Campo 2 Protocolo de comunicacion (en la documentacion de Informix en ocaciones se le llama "nettype" )
  3. Campo 3 Nombre de la maquina/caja que ejecuta el IDS.
  4. Campo 4 Es el nombre del servicio (o numero de puerto TCP).
The sqlhosts file has (at least) 4 fields:
  1. Field 1 is the name of the database server.
  2. Field 2 is the communication protocol (often referred to as "nettype" in Informix's documentation)
  3. Field 3 is the name of the host running the server.
  4. Field 4 is the service name (or port number)
Para el nombre del servidor se usa lo que tenga el parametro DBSERVERNAME o alguno de los nombres del DBSERVERALIASES en el archivo de configuracion del servidor onconfig. Solo hay que tener cuidado en escoger alguno que use el protocolo onsoctcp. The database server is one of the names listed in DBSERVERNAME or DBSERVERALIASES in the configuration file onconfig. Just take care and choose the one using the onsoctcp protocol.
El protocolo de comunicacion siempre va a ser onsoctcp, formado por las iniciales de ONline, sockets TCP/ip. The protocl always is onsoctcp, it's formed with the first letters of ONline, sockets TCPip.
El nombre de la maquina debe de poderse resolver a una IP por medio del archivo /etc/hosts o por medio de DNS, una opcion es teclearle el numero de direccion IP pero es menos flexible a cambios de maquina del servidor. The machine name must be able to be resolved to an IP address thru the /etc/hosts file or a DNS server, another option is type in the IP number, but is less flexible to changes in the server box.
El nombre del servicio debe de coincidir con el que tenga el servidor, bueno realmente el nombre no tiene que coincidir, lo que debe coincidir es el numero equivalente en el archivo /etc/services. Tambien se puede poner el numero del servicio para no tener que modificar el archivo /etc/services. The name of the service must match the service in the server, well, not really, what must match is the port number in the /etc/services file. You can also type the port number an in this way you don't need to modify the /etc/services file.
Ademas hay que verificar que el sistema operativo no tenga habilitado una pared de fuego (firewall) que impida el trafico por el puerto que usa el motor. O para rapido deshabilitarla mientras probamos para descartar esa falla. Also, verify that there's no firewall active in the operating system, this can block the traffic to the server. You can open the port of the server or as quick test solution just disable it while testing.
service iptables stop
Ya con esto podemos probar nuestro primer programa ESQL/C, por supuesto se requiere que ya este creada la base de datos stores7 en el servidor: With all this set up, we can test our first ESQL/C program, of course, ywe need to already have the 'stores7' database in the server.
[ortiz@adela tmp]$ cd $INFORMIXDIR/demo/esqlc
[ortiz@adela esqlc]$ esql demo1.ec
/opt/informix/lib/esql/libifos.so: the use of `mktemp' is dangerous, better use `mkstemp'
[ortiz@adela esqlc]$ ./a.out
DEMO1 Sample ESQL Program running.

Lana            Beatty
Frank           Albertson
Dick            Baxter

DEMO1 Sample Program over.
En caso de que hubiera un error, se puede utilizar la utileria finderr para averiguar la causa de la falla, en el siguiente ejemplo es que el servidor solicitado no existe. In case of error during the execution of a client progra, you can use the finderr utility to lookup the cause of the error, next I force an error using an unknown server.
[cte@adela esqlc]$ INFORMIXSERVER=nada
[cte@adela esqlc]$ ./a.out
DEMO1 Sample ESQL Program running.


Program stopped by WHENEVER STOP
sqlca:
 sqlcode:-25596
 sqlerrm: ''
 sqlerrp: ''
 sqlerrd:
 sqlerrd(1)=0
        (2)=0
        (3)=0
        (4)=0
        (5)=0
        (6)=0
 sqlwarn.sqlwarn0:
        .sqlwarn1:
        .sqlwarn2:
        .sqlwarn3:
        .sqlwarn4:
        .sqlwarn5:
        .sqlwarn6:
        .sqlwarn7:

[cte@adela esqlc]$ finderr 25596
-25596  The INFORMIXSERVER value is not listed in the sqlhosts file or the
Registry.

The default database server name that the INFORMIXSERVER environment
variable specifies must be a valid database server name in the file
$INFORMIXDIR/etc/sqlhosts on UNIX or the registry on Windows. Check
that the specified server is listed in the sqlhosts file or the
registry.
Lo mejor para probar la conectividad es usar un programa cliente, el programa dbaccess solo existe si se instalo el servidor pero en ocaciones requerimos un cliente sencillo para ejecutar consultas rapidas. The best to test the connectivity is use a client progran, dbaccess is only availabe if there's a server but there're times when you need to execute simple queries from the client box.
Para esos casos recomiendo el uso del programa sqlcmd elaborado por Jonathan Leffler y se puede obtener gratuitamente de la pagina del grupo de usuario internacionales de informix IIUG en la direccion http://www.iiug.org/software/index_all.html#S o directamente de su pagina http://home.earthlink.net/~jleffler/JLSS/. For this requirements I recomend the program sqlcmd by Jonathan Leffler, you can get it from the IIUG (International Informix User Group) at the address http://www.iiug.org/software/index_all.html#S or in his page http://home.earthlink.net/~jleffler/JLSS/.
[web@web tmp]$ wget http://home.earthlink.net/~jleffler/JLSS/sqlcmd-74.02.tgz
...
[web@web tmp]$ tar xvfz sqlcmd-74.02.tgz
...
[web@web tmp]$ cd sqlcmd-74.02
[web@web sqlcmd-74.02]$ ./configure
...
[web@web sqlcmd-74.02]$ make
...
[web@web sqlcmd-74.02]$ ./sqlcmd --help
./sqlcmd: unrecognized option `--'
Usage: sqlcmd [-chsvxy] [-d dbase] [-f file] [-e 'SQL stmt'] ['SQL stmt' ...]
Other options: [-CPRU][-BHITV][-D delim][-E escape][-Q quote][-F format]
               [-A date][-i file][-o file][-L qlimit][-N number][-M FIFO]
               [-W blobdir][-Z debug][-t table][-p password][-u username]
               [-a ibase][-G xmltag]
NB: -h gives more help!
Final
Aqui mostre dos ejemplos de clientes ESQL/C si el cliente es PHP pude verificar esta direccion para mas informacion. Here I mention two examples of ESQL/C client programs, if the client you're interested is PHP, check this page.
Para un ejemplo rapido de la instalacion de clientes Perl con DBI/DBD vea esta pagina. For a quick example of a Perl client with DBI/DBD see this page.