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.
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:
- 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:
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:
Tipo SQL | Tipo PHP |
---|---|
SMALLINT, INTEGER | integer |
NUMERIC, DECIMAL, FLOAT, REAL, DOUBLE | float |
DATE, TIME, TIMESTAMP | string |
VARCHAR, CHARACTER | string |
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) )
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.
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
- sesam_affected_rows — Get number of rows affected by an immediate query
- sesam_commit — Commit pending updates to the SESAM database
- sesam_connect — Open SESAM database connection
- sesam_diagnostic — Return status information for last SESAM call
- sesam_disconnect — Detach from SESAM connection
- sesam_errormsg — Returns error message of last SESAM call
- sesam_execimm — Execute an "immediate" SQL-statement
- sesam_fetch_array — Fetch one row as an associative array
- sesam_fetch_result — Return all or part of a query result
- sesam_fetch_row — Fetch one row as an array
- sesam_field_array — Return meta information about individual columns in a result
- sesam_field_name — Return one column name of the result set
- sesam_free_result — Releases resources for the query
- sesam_num_fields — Return the number of fields/columns in a result set
- sesam_query — Perform a SESAM SQL query and prepare the result
- sesam_rollback — Discard any pending updates to the SESAM database
- sesam_seek_row — Set scrollable cursor mode for subsequent fetches
- sesam_settransaction — Set SESAM transaction parameters