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
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.
El comportamiento de estas funciones está afectado por los valores definidos en php.ini.
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.
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
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.
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.
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 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:
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.
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á.
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:
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) |
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.
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.
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:
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:
Tipo SQL | Tipo PHP |
---|---|
SMALLINT, INTEGER | integer |
NUMERIC, DECIMAL, FLOAT, REAL, DOUBLE | float |
DATE, TIME, TIMESTAMP | string |
VARCHAR, CHARACTER | string |
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) )
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'>)
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.
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.