El gestor de base de datos CTSQL puede funcionar tanto en modo local como en cliente-servidor, disponiendo en ambos casos de capacidad «multiservidor». Es decir, una misma instancia del lenguaje de cuarta generación CTL puede mantener abiertas de manera simultánea varias bases de datos a través de una única instancia del CTSQL.
MultiBase dispone de dos mecanismos diferentes de conectividad. El primero de ellos, a través del estándar ODBC de Microsoft, asegura un intercambio de datos con otras aplicaciones en los entornos gráficos más actuales. El segundo, MultiWay, permite la conexión en cliente-servidor tanto con bases de datos propias de TransTOOLs como con las bases de datos con interfaz SQL más extendidas del mercado. Este tipo de conexión a través de MultiWay presenta la ventaja de no necesitar modificación alguna en los programas fuentes.
MultiWay es una tecnología desarrollada por TransTOOLs que dota a MultiBase de unas extraordinarias prestaciones en instalaciones con arquitectura cliente-servidor.
MultiWay es una capa de software que permite al lenguaje de cuarta generación de MultiBase (CTL), y por tanto a cualquier aplicación desarrollada con él, el acceso transparente a diferentes gestores de bases de datos. Dicho acceso puede hacerse en modo local (CTL y servidor de base de datos en una misma máquina) o en modo cliente-servidor (CTL y servidor de base de datos en máquinas distintas).
Para ello, MultiWay se apoya en diferentes estándares del mercado, el SQL como lenguaje de interfaz con bases de datos relacionales, el TCP/IP como protocolo de comunicaciones y la librería «WINSOCK.DLL» como estándar para TCP/IP en el caso del Windows (máquina «cliente»).
La arquitectura del sistema es sencilla y muy ligera, no exigiendo, entre otras cosas, el soporte de red proporcionado por el correspondiente fabricante del gestor de base de datos.
Esta capa de software, que se sitúa al lado del servidor de la base de datos, hace a MultiBase independiente de otras capas de software de red de otros fabricantes de bases de datos, permitiendo la conexión remota y el enlace lógico entre el lenguaje de cuarta generación CTL y el SQL de distintos fabricantes.
MultiWay se encarga de proporcionar una visión homogénea de cualquier SQL que se conecte al lenguaje de cuarta generación de MultiBase, ofreciendo un único «set» de tipos de datos entre los diferentes «sets» de los distintos gestores de base de datos y una única gramática, al tiempo que se encarga de que cualquier conversión de tipo sea realizada de forma ortogonal.
Por último, MultiWay se encarga de la traducción de sentencias de SQL entre los distintos gestores de bases de datos soportados. Dichos gestores son los que se indican en el siguiente cuadro:
| Gestores de BD soportados por MultiWay |
| CTSQL de TransTOOLs Oracle (vers. 6, 7, 8, 9 y 10) Informix-OnLine e Informix-SE (vers. 4 y 5 y 7) |
En estas notas trataremos de las particularidades y diferencias existentes en MultiBase cuando se utilice cualquiera de los gestores de bases de datos anteriormente citados. En los epígrafes que siguen se indican las características propias en cada caso concreto.
NOTA: Los límites de MultiBase no podrán ser superados por los «gateways».
La configuración de MultiBase en red local precisa la definición de las siguientes variables de entorno:
DBPATH: Lista de directorios del servidor de red donde existen o se pueden crear bases de datos. Si no se define esta variable se asumirá por defecto el directorio de trabajo.
DBUSER: Nombre de usuario de la base de datos que será utilizado para otorgar o revocar privilegios de acceso a la misma.
STRANSDIR: Directorio del servidor de la red donde está instalado MultiBase.
a) Ejemplo del fichero AUTOEXEC.BAT en instalaciones de red local en Windows 3.1x:
@ECHO OFF
set COMSPEC=c:\dos\command.com
VERIFY OFF
SHARE
b) Ejemplo de entorno en las máquinas «clientes»:
DBTEMP=h:\tmp
DBPATH=h:\apli1\almacen
DBUSER=user1
STRANSDIR=h:\multibase
Estos ficheros indican lo siguiente:
El nombre de usuario para acceder a la base de datos se denomina «user1».
MultiBase se encuentra instalado en el servidor en el directorio «multibase» de la partición «h:».
Para que funcionen los bloqueos entre distintos usuarios de la red debe estar activada la utilidad «SHARE» en el fichero AUTOEXEC.BAT (sólo en Windows 3.x).
El lenguaje de cuarta generación de MultiBase, CTL, dispone de toda la gramática del SQL, de forma que cuando encuentra una sentencia (estática o dinámica) de SQL la envía al gestor de la base de datos, el cual ejecutará la sentencia y devolverá los datos (el resultado) a CTL. En el caso de tener instalado MultiWay en cliente-servidor, CTL enviará la sentencia de SQL a través de la red al servidor que contenga la base de datos indicada. Dicha sentencia la recibirá MultiWay, quien localmente se pondrá en comunicación con el correspondiente gestor de base de datos, le pasará la sentencia SQL y, una vez ejecutada por el gestor, recibirá el resultado y lo enviará por la red al CTL que realizó la petición.
MultiWay está compuesto por una serie de «gateways», uno para cada gestor de base de datos soportado. Estos «gateways» siempre ejecutan en máquinas UNIX y deberán estar dados de alta (los que se vayan a utilizar) como servicios de red de la máquina correspondiente.
Básicamente, las tareas que realiza MultiWay son las siguientes:
Traducción: Las gramáticas de los distintos SQL del mercado, si bien todas ellas conforman los estándares ANSI e ISO, suelen tener peculiaridades y extensiones que las hacen diferir unas de otras, en unos casos ligeramente y en otros de una forma considerable. CTL utiliza la gramática de SQL que le proporciona el CTSQL. Estas sentencias son traducidas por MultiWay antes de ser enviadas al correspondiente gestor de base de datos.
Conversión de tipos: Lo mismo que sucede con las gramáticas de los distintos SQL del mercado ocurre con los tipos de datos que soportan. Por ejemplo, mientras que CTSQL soporta un tipo «DATE» y un tipo «TIME», otros SQL soportan un tipo «DATETIME» que engloba ambos. MultiWay se encargará de las conversiones de tipos adecuadas en ambas direcciones (CTL-gestor y gestor-CTL). Para ello, MultiWay utiliza un catálogo propio que se crea en la misma base de datos que se va a utilizar. Este catálogo será gestionado por MultiWay y está compuesto por una serie de tablas cuyos nombres comienzan por «mb» («mbtables», «mbcolumns», «mbindexes», etc.). Estas tablas guardan total simetría con las tablas de catálogo del CTSQL de MultiBase («systables», «syscolumns», «sysindexes», etc.).
Por lo tanto, y como resumen, puede decirse que MultiWay se encarga de que cualquier SQL del mercado sea visto por CTL como si fuese CTSQL.
De esta forma, MultiWay proporciona la absoluta portabilidad de cualquier aplicación desarrollada con MultiBase. El que una aplicación funcione en modo cliente-servidor o local y que funcione sobre un determinado servidor de SQL u otro ubicado en una máquina u otra dependerá únicamente de los valores que tomen determinadas variables de entorno.
Los ficheros de configuración en cada uno de los «gateways» definen las variables de entorno y de configuración específicas de cada uno de los gestores de bases de datos (Oracle e Informix). Asimismo, este fichero puede contener también información relativa al «mapping» de caracteres a realizar entre MultiBase y el servidor de base de datos, así como las funciones propias del servidor que pueden utilizarse en instrucciones CTSQL desde MultiBase. Por lo tanto, estos ficheros tienen la siguiente estructura:
1. Definición de variables de entorno y configuración:
Al principio de este fichero, sin indicar ningún tipo de sección
ni palabra reservada, se especifican los nombres de las variables de configuración
de cada gestor de base de datos. Opcionalmente, también se podrán
especificar aquellas variables de entorno propias del gestor. Las variables
de entorno y de configuración de cada uno de estos gestores se indican
más adelante.
Ejemplo:
| ORACLE_HOME=/usr/oracle | #Oracle está instalado #en /usr/oracle |
| ORACLE_SID=contabilidad | #La base de datos Oracle se #denomina "contabilidad" |
| ORACLE_UID=jose/jose123 | #Usuario y password Oracle. |
| DBSYN:conta=contabilidad | #Base de datos "conta" en #MultiWay y "contabilidad" #en Oracle. |
2. «Mapping» de caracteres: Sección «.TRANSLATIONS»:
Esta sección del fichero de configuración de los «gateways» permite
trabajar con una base de datos que no utilice el juego de caracteres de
MultiBase (el GCS#2 de IBM). Para ello se define en el fichero de configuración
del «gateway» correspondiente (Informix u Oracle) la sección «.TRANSLATIONS»,
donde se especificarán las traducciones necesarias. En cada línea
deben figurar dos parámetros: el carácter del juego de caracteres
utilizado en la base de datos y su equivalente en el GCS#2 de IBM. Ambos
parámetros pueden especificarse en cualquiera de los siguientes
formatos: carácter entre comillas simples ('a'), hexadecimal (0x61)
u octal (\141). Cualquier texto escrito después de esta definición
en la misma línea será considerado como un comentario.
Ejemplo:
.TRANSLATIONS
\341 \240 a acentuada
\351 \202 e acentuada
\355 \241 i acentuada
\363 \242 o acentuada
\372 \243 u acentuada
\361 \244 eñe minúscula
\321 \245 eñe mayúscula
\344 \204 a diéresis
\353 \211 e diéresis
\357 \213 i diéresis
\366 \224 o diéresis
\374 \201 u diéresis
\272 \247 ‘
\252 \246 &
3. Funciones del servidor: Sección «.FUNCTIONS»:
Existe también la posibilidad de utilizar funciones propias del
servidor no reconocidas por MultiBase en frases SQL. Para ello habrá que
definir en el fichero de configuración del «gateway» correspondiente
(Informix u Oracle) una sección encabezada con «.FUNCTIONS» en
la que se especifican las funciones del servidor que MultiBase ha de reconocer
y el tipo de dato que devuelven. En cada línea debe figurar el nombre
de la función y el tipo de dato CTSQL del valor devuelto, así como
la longitud de éste en el caso del tipo de dato CHAR. Si el tipo
de dato del valor devuelto coincide con el de algún parámetro
enviado a dicha función se especificará el número
de orden de ese parámetro precedido por el carácter «$».
Ejemplo:
.FUNCTIONS
decode $3
func integer
subs char 20