Forum und email

Funciones de Base de Datos SESAM

Introducción

SESAM/SQL-Server es un sistema de bases de datos para macrocomputadoras, desarrollado por Fujitsu Siemens Computers, Alemania. Corre en servidores tipo mainframe de alto orden usando el sistema operativo BS2000/OSD.

En numerosas instalaciones productivas de BS2000, SESAM/SQL-Server ha probado

  • la facilidad de uso de conectividad Java, Web y cliente/servidor,
  • la capacidad de trabajar con una disponibilidad de más del 99.99%,
  • la habilidad de manejar decenas e incluso cientos de miles de usuarios.

Existe una interfaz SESAM para PHP 3 disponible que permite operaciones de bases de datos a través de scripts PHP.

Note: El acceso a SESAM solo se encuentra disponible con la última versión CVS de PHP 3. PHP 4 no tiene soporte para la base de datos SESAM.

Configuración en tiempo de ejecución

El comportamiento de estas funciones está afectado por los valores definidos en php.ini.

sesam_oml string

Name of BS2000 PLAM library containing the loadable SESAM driver modules. Required for using SESAM functions. The BS2000 PLAM library must be set ACCESS=READ,SHARE=YES because it must be readable by the apache server's user id.

sesam_configfile string

Name of SESAM application configuration file. Required for using SESAM functions. The BS2000 file must be readable by the apache server's user id.

The application configuration file will usually contain a configuration like (see SESAM reference manual):

CNF=B
NAM=K
NOTYPE

sesam_messagecatalog string

Name of SESAM message catalog file. In most cases, this directive is not necessary. Only if the SESAM message file is not installed in the system's BS2000 message file table, it can be set with this directive.

The message catalog must be set ACCESS=READ,SHARE=YES because it must be readable by the apache server's user id.

Notas de configuración

No existe soporte independiente para la interfaz PHP SESAM, solo trabaja como un módulo integrado de Apache. En el módulo de PHP Apache, esta interfaz SESAM es configurada usando directivas de Apache.

Directivas de Configuración de SESAM
Directiva Significado
php3_sesam_oml

Nombre de la biblioteca BS2000 PLAM que contiene los módulos cargables del controlador SESAM. Valor requerido para el uso de funciones SESAM.

Ejemplo:

php3_sesam_oml $.SYSLNK.SESAM-SQL.030

php3_sesam_configfile

Nombre del archivo de configuración de la aplicación SESAM. Valor requerido para el uso de funciones SESAM.

Ejemplo:

php3_sesam_configfile $SESAM.SESAM.CONF.AW
Usualmente contendrá una configuración como (vea el manual de referencia de SESAM):
CNF=B
NAM=K
NOTYPE

php3_sesam_messagecatalog

Nombre del archivo de catálogo de mensajes SESAM. En la mayoría de casos, esta directiva no es necesaria. Solo si el archivo de mensajes SESAM no está instalado en la tabla de archivos de mensajes BS2000 del sistema, puede definirse con esta directiva.

Ejemplo:

php3_sesam_messagecatalog $.SYSMES.SESAM-SQL.030

Adicionalmente a la configuración de la interfaz PHP/SESAM, es necesario configurar el servidor de Bases de Datos SESAM mismo en su macrocomputadora, como es normal. Eso quiere decir:

  • iniciar el gestor de base de datos SESAM (DBH), y
  • conectar las bases de datos con el gestor de bases de datos SESAM

Para obtener una conexión entre un script PHP y el gestor de bases de datos, los parámetros CNF y NAM del archivo de configuración SESAM seleccionado deben coincidir con el id del gestor de bases de datos iniciado.

En caso de bases de datos distribuidas es necesario iniciar un agente SESAM/SQL-DCN con la tabla de distribución incluyendo los nombres de máquina huésped y base de datos.

La comunicación entre PHP (corriendo en el subsistema POSIX) y el gestor de bases de datos (corriendo por fuera del subsistema POSIX) es realizada por el uso de memoria común entre un módulo controlador especial llamado SQLSCI y los módulos de conexión SESAM. Debido al acceso de memoria común, y debido a que PHP es una parte estática del servidor web, los accesos a bases de datos son bastante ágiles, ya que no requieren accesos remotos mediante ODBC, JDBC o UTM.

Solamente un pequeño segmento de cargador (SESMOD) es enlazado con PHP, y los módulos de conexión SESAM son traídos desde la biblioteca OML PLAM de SESAM. En la configuración es necesario indicarle a PHP el nombre de esta biblioteca PLAM, y el enlace de archivo a usar para el archivo de configuración SESAM (A partir de SESAM V3.0, SQLSCI está disponible en la biblioteca de Herramientas SESAM, que es parte de la distribución estándar).

Debido a que el escapado para comillas sencillas en comandos SQL usa comillas sencillas duplicadas (en lugar de una comilla sencila precedida por una barra invertida, como en otras bases de datos), es recomendable definir las directivas de configuración de PHP php3_magic_quotes_gpc y php3_magic_quotes_sybase como On para todos los scripts PHP que usen la interfaz SESAM.

Consideraciones de ejecución

Debido a las limitaciones del modelo de proceso de BS2000, el controlador puede ser cargado únicamente después de que el servidor Apache haya creado sus procesos de servidor hijos. Esto reducirá ligeramente el rendimiento de la petición SESAM inicial de cada hijo, pero los accesos subsecuentes responderán a su rapidez máxima.

Cuando se define explícitamente un Catálogo de Mensajes para SESAM, ese catálogo será cargado cada vez que el controlador sea cargado (es decir, en la petición inicial SESAM). El sistema operativo BS2000 imprime un mensaje después de la carga exitosa del catálogo de mensajes, el cual será enviado al archivo error_log de Apache. Actualmente BS2000 no permite la supresión de este mensaje, así que irá alimentando gradualmente el registro de errores.

Asegúrese de que la biblioteca OML PLAM de SESAM y el archivo de configuración de SESAM tengan permisos de lectura para el id de usuario usado para ejecutar el servidor web. De otra forma, el servidor será incapaz de leer el controlador, y no permitirá llamar las funciones SESAM. Asimismo, debe otorgarse acceso a la base de datos al id de usuario usado para ejecutar el servidor web. De otro modo, las conexiones al gestor de bases de datos SESAM fallará.

Tipos de Cursor

Los cursores de resultado que son generados para consultas SQL "tipo select" puede ser o "secuenciales" o "deslizables". Debido a la carga adicional extra de memoria requerida por los cursores "deslizables", el valor predeterminado es "secuenciales".

Cuando se usan cursores "deslizables", el cursor puede ser posicionado libremente en el conjunto de resultados. Para cada consulta "deslizable", existen valores globales predeterminados para el tipo deslizable (inicializado a: SESAM_SEEK_NEXT) y el desplazamiento, que pueden ser definidos una vez con sesam_seek_row() o cada vez que se recupera una fila usando sesam_fetch_row(). Cuando se recupera una fila usando un cursor "deslizable", el siguiente post-procesamiento es realizado para los valores predeterminados globales para el tipo deslizable y el desplazamiento:

Post-Procesamiento de Cursores Deslizables
Tipo de Desplazamiento Acción
SESAM_SEEK_NEXT ninguna
SESAM_SEEK_PRIOR ninguna
SESAM_SEEK_FIRST establecer tipo de desplazamiento a SESAM_SEEK_NEXT
SESAM_SEEK_LAST establecer tipo de desplazamiento a SESAM_SEEK_PRIOR
SESAM_SEEK_ABSOLUTE Auto-Incrementar el valor de desplazamiento interno
SESAM_SEEK_RELATIVE ninguna. (mantener el valor de desplazamiento global predeterminado, el cual permite p.ej. recuperar cada 10ma fila hacia atrás)

Nota de adaptación

Dado que en el mundo PHP es natural iniciar los índices en cero (en lugar de 1), algunos ajustes han sido realizados a la interfaz SESAM: cada vez que una matriz indexada arranca con el índice 1 en la interfaz SESAM nativa, la interfaz PHP usa el índice 0 como punto de partida. Por ejemplo, cuando se recuperan columnas con sesam_fetch_row(), la primera columna tiene el índice 0, y las columnas subsecuentes tienen índices de hasta (pero sin incluir) el conteo de columnas ($matriz["count"]). Cuando se portan aplicaciones SESAM desde otros lenguajes de alto nivel a PHP, tenga presente este cambio de interfaz. Cuando sea apropiado, la descripción de las funciones sesam PHP respectivas incluyen una nota indicando que el índice tiene una base de cero.

Consideraciones de seguridad

Cuando se permite el acceso a bases de datos SESAM, el usuario del servidor web debería tener tan pocos privilegios como sea posible. Para la mayoría de bases de datos, solo deberían otorgarse permisos de lectura. Dependiendo de su escenario de uso, agregue más permisos de acceso de acuerdo a su criterio. ¡Nunca permita control completo a cualquier base de datos para cualquier usuario proveniente de la red! Restrinja el acceso de scripts PHP que deban administrar la base de datos usando un control de contraseñas y/o seguridad SSL.

Migración desde otras bases de datos SQL

No existe una pareja de dialectos SQL 100% compatibles. Cuando se encuentre portando aplicaciones SQL desde otras interfaces de bases de dato a SESAM, puede que se requieran algunas ajustes. Las siguientes diferencias típicas deben ser notadas:

  • Tipos de datos específicos Puede que algunos tipos de datos específicos tengan que ser reemplazados con tipos de datos SQL estándar (p.ej., TEXT podría reemplazarse con VARCHAR(tam. máximo)).
  • Palabras clave como identificadores SQL Es SESAM (así como en SQL estándar), tales identificadores deben ser encerrados en dobles comillas (o renombrados).
  • Longitud de despliegue en tipos de datos Los tipos de datos SESAM tienen una precisión, no una longitud de despliegue. En lugar de int(4) (uso requerido: enteros hasta '9999'), SESAM requiere simplemente int para un tamaño implícito de 31 bits. Asimismo, los únicos tipos de datos de fecha y hora disponibles en SESAM son: DATE, TIME(3) y TIMESTAMP(3).
  • Tipos SQL con los atributos específicos unsigned, zerofill, o auto_increment unsigned y zerofill no son soportados. auto_increment es automático (use "INSERT ... VALUES(*, ...)" en lugar de "... VALUES(0, ...)" para aprovechar el auto-incremento implícito de SESAM.
  • int ... DEFAULT '0000' Las variables numéricas no deben ser inicializadas con constantes tipo cadena. Use DEFAULT 0 en su lugar. Para inicializar variables de los tipos de dato SQL de fecha y hora, la cadena de inicialización debe ser precedida por la palabra clave del tipo respectivo, de la siguiente manera: CREATE TABLE ejemplo ( xtime timestamp(3) DEFAULT TIMESTAMP '1970-01-01 00:00:00.000' NOT NULL );
  • $conteo = xxxx_num_rows(); Algunas bases de datos prometen adivinar/estimar el número de filas en un resultado de consulta, aun cuando el valor devuelto es abruptamente incorrecto. SESAM no conoce el número de filas en un resultado de consulta antes de realizar la recuperación real. Si usted REALMENTE necesita el conteo, intente SELECT COUNT(...) WHERE ..., comando que le dirá el número de coincidencias. Una segunda consulta devolverá (probablemente) los resultados.
  • DROP TABLE nombre; En SESAM, en el comando DROP TABLE, el nombre de la tabla debe ser seguido por la palabra clave RESTRICT o CASCADE. Cuando se especifica RESTRICT, un error es devuelto si hay objetos dependientes (p.ej., VIEWs), mientras que con CASCADE, los objetos dependientes serán eliminados junto con la tabla especificada.

Notas sobre el uso de varios tipos SQL

SESAM no soporta en la actualidad el tipo BLOB. Una versión futura de SESAM tendrá soporte para ese tipo.

En la interfaz PHP, las siguientes conversiones de tipos son aplicadas automáticamente cuando se recuperan campos SQL:

Conversiones de tipos de SQL a PHP
Tipo SQL Tipo PHP
SMALLINT, INTEGER integer
NUMERIC, DECIMAL, FLOAT, REAL, DOUBLE float
DATE, TIME, TIMESTAMP string
VARCHAR, CHARACTER string
Cuando se recupera una fila completa, el resultado es devuelto como una matriz. Los campos vacíos no son llenados, así que tendrá que chequear por la existencia de campos individuales usted mismo (use isset() o empty() para probar si un campo está vacío). Eso le permite más control al usuario en comparación con la apariencia de campos vacíos (en el caso de una cadena vacía como representación de un campo vacío).

Soporte para la característica de "campos múltiples" de SESAM

La característica especial de "campos múltiples" de SESAM permite que una columna consista de una matriz de campos. Tal tipo de columna de "múltiples campos" puede ser creada de la siguiente forma:

Example#1 Creación de una columna de "campo múltiple"

CREATE TABLE prueba_multi_campo (
    clave CHAR(20) PRIMARY KEY,
    multi(3) CHAR(12)
)
y puede ser llenada usando:

Example#2 Llenado de una columna de "campo múltiple"

INSERT INTO prueba_multi_campo (clave, multi(2..3) )
    VALUES ('Segundo', <'primer_valor', 'segundo_valor'>)
Note que (como en este caso) los sub-campos iniciales vacíos son ignorados, y los valores llenados son colapsados, así que en el ejemplo anterior el resultado aparecerá como multi(1..2) en lugar de multi(2..3).

Cuando se recupera una fila de resultado, las "columnas múltiples" son leídas como columnas adicionales "internas". En el ejemplo anterior, "clave" tendrá el índice 0, y las tres columnas "multi(1..3)" estarán disponibles como los índices 1 a 3.

Ver también

Para detalles específicos de SESAM, por favor refiérase a » la decumentación SESAM/SQL-Server (en inglés) o » la documentación SESAM/SQL-Server (en alemán), ambas disponibles en línea, o use los manuales respectivos.

Table of Contents