Página de inicio - Tecla de acceso: 1
Notas técnicas

MultiBase. Notas a la versión 3.0, release 00

3. Gateways

A partir de esta versión se ha implementado una nueva función interna, denominada «getsqlerror()», que devuelve el número de error («errno») producido por el gestor de base de datos que se esté empleando.

3.1. Gateway Oracle

Variables de configuración: Se ha añadido la siguiente variable:

ORACLE_PROC: Indica al «gateway» si el gestor de Oracle permite la creación de procedimientos SQL. Por defecto es ON.

Variables de entorno: Las variables ORACLE_SID, ORACLE_HOME y ORACLE_UID funcionan como tal en entornos cliente-servidor. De esta manera puede obviarse el valor general que se les haya asignado en el fichero de configuracion «gworacle.env», particularizándolo para cada cliente.

Foreign Keys: Al nombre de una «foreign key» ya no se le antepone el prefijo FK. (Si se quiere borrar una «foreign key» de antiguas versiones hay que destruirla directamente a través del gestor de Oracle y también, en modo mantenimiento, a través de MultiBase).

Instrucción INSERT: Se han eliminado todas las restricciones de funcionalidad que existían para esta instrucción y que aparecían cuando intervenía el tipo de dato SERIAL.

La tabla interna «mbserial» utilizada para simular este tipo de dato ha cambiado de estructura. El programa CTL siguiente borra la tabla y la crea con el nuevo esquema, actualizando los datos que hubiera. Ha de ejecutarse tantas veces como bases de datos MultiBase existan:

define
    parameter[1] dbname char(20)
    parameter[2] user_pass char(40)
end define
main begin
    call putenv("ORACLE_UID", user_pass, 2)
    database $dbname
    tsql "execsql create table mbtserial(tabname char(30),
        lastserial integer)"
    tsql "execsql insert into mbtserial select tabname, lastserial "&&
    "from mbserial,mbtables where mbserial.tabid = mbtables.tabid"
    tsql "execsql drop table mbserial"
    tsql "execsql rename mbtserial to mbserial"
end main

CASOS PRÁCTICOS:
El campo «dirpath» en «mbtables» contiene el usuario donde se localiza la tabla. Si el campo tiene un valor nulo heredado de antiguas versiones, hay que rellenarlo como corresponda para evitar un funcionamiento erróneo.

Cambio de base de datos MultiBase: Se realiza con la instrucción a tal efecto:

DATABASE nombre_de _base_de_datos

pero haciendo previamente un «putenv» de la variable de entorno «ORACLE_UID» con el valor correspondiente para esa base de datos:

call putenv("ORACLE_UID", user_password, 2)

Tablas temporales: Si a lo largo de la ejecución se ha cambiado sucesivamente de base de datos puede que al finalizar el proceso se hayan creado tablas «temporales» en diferentes usuarios Oracle. El «gateway» las borrará naturalmente para simular esa temporalidad, pero haciendo dos supuestos a la hora de conectarse a los usuarios: que no se haya cambiado de ORACLE_SID y que la PASSWORD de esos usuarios coincida con su nombre. En cualquier otro caso quedarían tablas sin borrar.

Tablas compartidas: Para compartir una tabla entre dos bases de datos (dos usuarios Oracle) se sigue un camino similar al realizado frente al gestor de MultiBase.

El usuario A, creador de la tabla a compartir, da los permisos que considere oportunos al usuario B sobre la misma y sobre la tabla «mbserial» si existe algún campo cuyo tipo de dato es SERIAL.

El usuario B crea el sinónimo:

CREATE SYNONYM nombre_de_tabla FOR usuario_A.nombre_de_tabla

para poder utilizar el mismo nombre de tabla. Además, crea la tabla en modo mantenimiento para que su catálogo la contenga y, con una instrucción UPDATE modifica el campo «dirpath» de la fila que haya aparecido en «mbtables» para esa tabla, cambiando el valor «usuarioB» por «usuarioA» (es en A donde realmente se halla la tabla).

Si en algún momento se altera la estructura de la tabla, hay que repetir el procedimiento anterior (ALTER en modo mantenimiento y cambio de «dirpath»).

Catálogo de MultiBase: Es posible romper la relación «biunívoca» existente entre bases de datos MultiBase y usuarios Oracle.

Si se quiere hacer corresponder una base de datos MultiBase con varios usuarios Oracle manteniendo un solo catálogo, éstos tendrían que compartir las tablas «mb*» siguiendo el procedimiento anterior. Uno de los usuarios sería el creador real del catálogo («dador» de permisos) y los demás compartirían las tablas (creando sinónimos).

La tabla «mbserial» no aparece en el catálogo, dada su naturaleza interna, pero sí han de poder manipularla todos, para lo cual, además de los permisos:

EXECSQL GRANT ALL PRIVILEGES ON mbserial TO PUBLIC

cada uno de los usuarios, excepto el creador del catálogo, necesita el siguiente sinónimo:

EXECSQL CREATE SYNONYM mbserial FOR usuario_creador.mbserial

Este procedimiento podría seguirse también con las tablas del entorno de programación (tablas «ep*») si así se desea.

3.2. Gateway Informix

Tipos de Datos: Las conversiones:

Informix MultiBase
VARCHAR(size) CHAR(size)
FLOAT DECIMAL(p,s)
SMALLFLOAT DECIMAL(p,s)

no están especificadas en el manual, pero también se realizan automáticamente.

Variables de entorno: La variable INFORMIXDIR funciona como tal en un entorno cliente-servidor. De esta manera puede obviarse el valor general que se le haya asignado en el fichero de configuración «gwinformix.env», particularizándolo para cada cliente.

Instrucción CREATE. Atributo DEFAULT: Para la versión 4 del gestor de Informix este atributo no existe. A partir de ahora el «gateway» lo simula en las operaciones INSERT cuyos valores en VALUES se introduzcan a través de constantes o variables «hosts» (esto se hace extensivo al FORM).

La simulación no funciona cuando los valores se introducen a través de una instrucción SELECT, ya que no puede controlarse su resultado (INSERT ... SELECT...).

Foreign Keys: Al nombre de una «foreign key» ya no se le antepone el prefijo FK. (Si se quiere borrar una «foreign key» de antiguas versiones hay que destruirla directamente a través del gestor de Informix y también, en modo mantenimiento, a través de MultiBase).

Instrucción START DATABASE: Esta instrucción únicamente introduce en el catálogo de MultiBase el registro «syslog», indicando que la base de datos es transaccional. No envía ninguna orden al gestor de Informix.

Tablas temporales: No se pueden compartir tablas temporales entre bases de datos cuando se está utilizando este gestor.

«