Estas instrucciones se añaden a las instrucciones para configurar el entorno de DB2 en "Configuración".
Para el soporte de procedimientos de SQL, debe instalar en el servidor el Application Development Client. Para obtener información sobre cómo instalar el Application Development Client, consulte el manual Guía rápida de iniciación de su plataforma. Para ver qué compiladores C y C++ soporta DB2 en su plataforma, consulte "Supported Software by Platform".
La configuración del compilador tiene dos partes: establecer las variables de entorno para el compilador y definir el mandato de compilación. Las variables de entorno proporcionan las vías de acceso a los binarios del compilador, las bibliotecas y los archivos de inclusión. El mandato de compilación es el mandato completo que DB2 utilizará para compilar los archivos C generados para los procedimientos de SQL.
Existen distintas normas para la configuración del entorno en sistemas operativos basados en OS/2, Windows y UNIX, tal como se explica a continuación. En algunos casos, no es necesaria ninguna configuración; en otros casos, es necesario establecer la variable de registro DB2_SQLROUTINE_COMPILER_PATH DB2 para que apunte a un script ejecutable que establece las variables de entorno correctamente.
En OS/2:
para IBM VisualAge C++ para OS/2 Versión 3.6: db2set DB2_SQLROUTINE_COMPILER_PATH="c:\ibmcxxo\bin\setenv.cmd" para IBM VisualAge C++ para OS/2 Versión 4: db2set DB2_SQLROUTINE_COMPILER_PATH="c:\ibmcpp40\bin\setenv.cmd"
En sistemas operativos Windows de 32 bits, si las variables de entorno para el compilador están establecidas como variables SYSTEM, no se precisa ninguna configuración. En caso contrario, establezca la variable de registro DB2_SQLROUTINE_COMPILER_PATH DB2 de la forma siguiente:
para Microsoft Visual C++ Versiones 5.0: db2set DB2_SQLROUTINE_COMPILER_PATH="c:\devstudio\vc\bin\vcvars32.bat" para Microsoft Visual C++ Versiones 6.0: db2set DB2_SQLROUTINE_COMPILER_PATH="c:\Micros~1\vc98\bin\vcvars32.bat" para IBM VisualAge C++ para Windows Versión 3.6: db2set DB2_SQLROUTINE_COMPILER_PATH="c:\ibmcxxw\bin\setenv.bat" para IBM VisualAge C++ para Windows Versión 4: db2set DB2_SQLROUTINE_COMPILER_PATH="c:\ibmcppw40\bin\setenv.bat"
En los sistemas operativos basados en UNIX, DB2 generará el archivo script ejecutable $HOME/sqllib/function/routine/sr_cpath (que contiene los valores por omisión para las variables del entorno del compilador) la primera vez que compile un procedimiento almacenado. Es posible editar este archivo si los valores por omisión no son los correctos para el compilador. También puede establecer la variable de registro de DB2 DB2_SQLROUTINE_COMPILER_PATH DB2 para que contenga el nombre completo de la vía de acceso de otro script ejecutable que especifique los valores que desee (vea los ejemplos a continuación).
La instalación de Application Development Client proporciona un mandato de compilación por omisión que funciona con por lo menos uno de los compiladores a los que cada plataforma da soporte:
AIX: IBM C Set++ para AIX Versión 3.6.6 Solaris: SPARCompiler C++ Versiones 4.2 y 5.0 HP-UX: HP-UX C++ Versión A.12.00 Linux: GNU/Linux g++ Versión egcs-2.90.27 980315 (egcs-1.0.2 release) PTX: ptx/C++ Versión 5.2 OS/2: IBM VisualAge C++ para OS/2 Versión 3 Windows NT y Windows 2000: Microsoft Visual C++ Versiones 5.0 y 6.0
Para utilizar otros compiladores o para personalizar el mandato por omisión, establezca la variable de registro de DB2 DB2_SQLROUTINE_COMPILE_COMMAND con un mandato como:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=mandato_compilación
donde mandato_compilación es el mandato de compilación C o C++, incluyendo las opciones y los parámetros necesarios para crear procedimientos almacenados.
En el mandato de compilación, utilice la palabra clave SQLROUTINE_FILENAME para sustituir el nombre de archivo de los archivos SQC, C, PDB, DEF, EXP, registro de mensajes y de biblioteca compartida generados. Sólo para AIX, utilice la palabra clave SQLROUTINE_ENTRY para sustituir el nombre del punto de entrada.
A continuación se indican los valores por omisión para DB2_SQLROUTINE_COMPILE_COMMAND para compiladores C o C++ en plataformas de servidor soportadas.
AIX
Para utilizar IBM C para AIX Versión 3.6.6:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=xlc -H512 -T512 \ -I$HOME/sqllib/include SQLROUTINE_FILENAME.c -bE:SQLROUTINE_FILENAME.exp \ -e SQLROUTINE_ENTRY -o SQLROUTINE_FILENAME -L$HOME/sqllib/lib -lc -ldb2
Para utilizar IBM C Set++ para AIX Versión 3.6.6:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=xlC -H512 -T512 \ -I$HOME/sqllib/include SQLROUTINE_FILENAME.c -bE:SQLROUTINE_FILENAME.exp \ -e SQLROUTINE_ENTRY -o SQLROUTINE_FILENAME -L$HOME/sqllib/lib -lc -ldb2
Éste es el mandato de compilación por omisión si no se establece la variable de registro DB2_SQLROUTINE_COMPILE_COMMAND de DB2.
db2set DB2_SQLROUTINE_COMPILE_COMMAND="vacbld"
Si no se especifica el archivo de configuración detrás del mandato vacbld, DB2 creará el archivo de configuración por omisión siguiente en el primer intento de crear cualquier procedimiento de SQL:
$HOME/sqllib/function/routine/sqlproc.icc
Si desea utilizar su propio archivo de configuración, puede especificarlo al establecer el valor de registro de DB2 para DB2_SQLROUTINE_COMPILE_COMMAND:
db2set DB2_SQLROUTINE_COMPILE_COMMAND="vacbld %DB2PATH%/function/sqlproc.icc"
HP-UX
Para utilizar HP C Compiler Versión A.11.00.03:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=cc +DAportable +ul -Aa +z \ -I$HOME/sqllib/include -c SQLROUTINE_FILENAME.c; \ ld -b -o SQLROUTINE_FILENAME SQLROUTINE_FILENAME.o \ -L$HOME/sqllib/lib -ldb2
Para utilizar HP-UX C++ Versión A.12.00:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=CC +DAportable +a1 +z -ext \ -I$HOME/sqllib/include -c SQLROUTINE_FILENAME.c; \ ld -b -o SQLROUTINE_FILENAME SQLROUTINE_FILENAME.o \ -L$HOME/sqllib/lib -ldb2
Éste es el mandato de compilación por omisión si no se establece la variable de registro DB2_SQLROUTINE_COMPILE_COMMAND de DB2.
Linux
Para utilizar GNU/Linux gcc Versión 2.7.2.3:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=cc \ -I$HOME/sqllib/include SQLROUTINE_FILENAME.c \ -shared -o SQLROUTINE_FILENAME -L$HOME/sqllib/lib -ldb2
Para utilizar GNU/Linux g++ Versión egcs-2.90.27 980315 (release egcs-1.0.2):
db2set DB2_SQLROUTINE_COMPILE_COMMAND=g++ \ -I$HOME/sqllib/include SQLROUTINE_FILENAME.c \ -shared -o SQLROUTINE_FILENAME -L$HOME/sqllib/lib -ldb2
Éste es el mandato de compilación por omisión si no se establece la variable de registro DB2_SQLROUTINE_COMPILE_COMMAND de DB2.
PTX
Para utilizar ptx/C Versión 4.5:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=cc -KPIC \ -I$HOME/sqllib/include SQLROUTINE_FILENAME.c \ -G -o SQLROUTINE_FILENAME.so -L$HOME/sqllib/lib -ldb2 ; \ cp SQLROUTINE_FILENAME.so SQLROUTINE_FILENAME
Para utilizar ptx/C++ Versión 5.2:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=c++ -KPIC \ -D_RWSTD_COMPILE_INSTANTIATE=0 -I$HOME/sqllib/include SQLROUTINE_FILENAME.c \ -G -o SQLROUTINE_FILENAME.so -L$HOME/sqllib/lib -ldb2 ; \ cp SQLROUTINE_FILENAME.so SQLROUTINE_FILENAME
Éste es el mandato de compilación por omisión si no se establece la variable de registro DB2_SQLROUTINE_COMPILE_COMMAND de DB2.
OS/2
Para utilizar IBM VisualAge C++ para OS/2 Versión 3:
db2set DB2_SQLROUTINE_COMPILE_COMMAND="icc -Ge- -Gm+ -W2 -I%DB2PATH%\include SQLROUTINE_FILENAME.c /B\"/NOFREE /NOI /ST:64000\" SQLROUTINE_FILENAME.def %DB2PATH%\lib\db2api.lib"
Éste es el mandato de compilación por omisión si no se establece la variable de registro DB2_SQLROUTINE_COMPILE_COMMAND de DB2.
Para utilizar IBM VisualAge C++ para OS/2 Versión 4:
db2set DB2_SQLROUTINE_COMPILE_COMMAND="vacbld"
Si no se especifica el archivo de configuración detrás del mandato vacbld, DB2 creará el archivo de configuración por omisión siguiente en el primer intento de crear cualquier procedimiento de SQL:
%DB2PATH%\function\routine\sqlproc.icc
Si desea utilizar su propio archivo de configuración, puede especificarlo al establecer el valor de registro de DB2 para DB2_SQLROUTINE_COMPILE_COMMAND:
db2set DB2_SQLROUTINE_COMPILE_COMMAND="vacbld %DB2PATH%\function\sqlproc.icc"
Solaris
Para utilizar SPARCompiler C Versiones 4.2 y 5.0:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=cc -xarch=v8plusa -Kpic \ -I$HOME/sqllib/include SQLROUTINE_FILENAME.c \ -G -o SQLROUTINE_FILENAME -L$HOME/sqllib/lib \ -R$HOME/sqllib/lib -ldb2
Para utilizar SPARCompiler C++ Versiones 4.2 y 5.0:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=CC -xarch=v8plusa -Kpic \ -I$HOME/sqllib/include SQLROUTINE_FILENAME.c \ -G -o SQLROUTINE_FILENAME -L$HOME/sqllib/lib \ -R$HOME/sqllib/lib -ldb2
Éste es el mandato de compilación por omisión si no se establece la variable de registro DB2_SQLROUTINE_COMPILE_COMMAND de DB2.
Notas:
Windows NT y Windows 2000
Para utilizar Microsoft Visual C++ Versiones 5.0 y 6.0:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=cl -Od -W2 /TC -D_X86_=1 -I%DB2PATH%\include SQLROUTINE_FILENAME.c /link -dll -def:SQLROUTINE_FILENAME.def /out:SQLROUTINE_FILENAME.dll %DB2PATH%\lib\db2api.lib
Éste es el mandato de compilación por omisión si no se establece la variable de registro DB2_SQLROUTINE_COMPILE_COMMAND de DB2.
Para utilizar IBM VisualAge C++ para Windows Versión 3.6:
db2set DB2_SQLROUTINE_COMPILE_COMMAND="ilib /GI SQLROUTINE_FILENAME.def & icc -Ti -Ge- -Gm+ -W2 -I%DB2PATH%\include SQLROUTINE_FILENAME.c /B\"/ST:64000 /PM:VIO /DLL\" SQLROUTINE_FILENAME.exp %DB2PATH%\lib\db2api.lib"
Para utilizar IBM VisualAge C++ para Windows Versión 4:
db2set DB2_SQLROUTINE_COMPILE_COMMAND="vacbld"
Si no se especifica el archivo de configuración detrás del mandato vacbld, DB2 creará el archivo de configuración por omisión siguiente en el primer intento de crear cualquier procedimiento de SQL:
%DB2PATH%\function\routine\sqlproc.icc
Si desea utilizar su propio archivo de configuración, puede especificarlo al establecer el valor de registro de DB2 para DB2_SQLROUTINE_COMPILE_COMMAND:
db2set DB2_SQLROUTINE_COMPILE_COMMAND="vacbld %DB2PATH%\function\sqlproc.icc"
Para volver a las opciones de compilador por omisión, establezca el valor de registro de DB2 para DB2_SQLROUTINE_COMPILE_COMMAND en nulo mediante el mandato siguiente:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=
Cuando un procedimiento de SQL no se cree satisfactoriamente, deberá suprimir de forma manual los archivos intermedios que puedan quedar. Estos archivos se encuentran en los directorios siguientes:
donde $DB2PATH representa el directorio en que se ha creado la instancia, $DATABASE represente el nombre de la base de datos y $SCHEMA representa el nombre de esquema con el que se han creado los procedimientos de SQL.
donde %DB2PATH% representa el directorio en el que se ha creado la instancia, %DATABASE% representa el nombre de la base de datos y %SCHEMA% representa el nombre de esquema con el que se han creado los procedimientos de SQL.
Cuando se crea un procedimiento de SQL, la biblioteca/DLL compartida que se genera también se guarda en la tabla de catálogos si la biblioteca/DLL compartida que se genera es menor que 2 MB. Cuando se realiza una copia de seguridad de la base de datos y se restaura, esto se realizará con la versión guardada en la tabla de catálogos para todos los procedimientos de SQL con una biblioteca/DLL compartida generada menor que 2 MB. Si tiene procedimientos de SQL con una biblioteca/DLL compartida generada mayor que 2 MB, asegúrese de que también realice una copia de seguridad y una restauración del sistema de archivos junto con la copia de seguridad y restauración de la base de datos. En caso contrario, tendrá que volver a crear la biblioteca/DLL compartida del procedimiento de SQL manualmente, utilizando la fuente de la tabla de catálogos syscat.procedures.
donde $DB2PATH representa el directorio en que se ha creado la instancia y $DATABASE representa el nombre de base de datos con que se han creado los procedimientos de SQL.
donde %DB2PATH% representa el directorio en el que se ha creado la instancia, %DATABASE% representa el nombre de la base de datos con el que se han creado los procedimientos de SQL.
Establezca el parámetro de configuración del gestor de bases de datos KEEPDARI en 'NO' para desarrollar procedimientos de SQL. Si un procedimiento de SQL se mantiene cargado una vez que se ha ejecutado, se pueden experimentar problemas al eliminar y volver a crear el procedimiento almacenado con el mismo nombre, puesto que la biblioteca no se puede renovar y los ejecutables no se pueden eliminar del sistema de archivos. También tendrá problemas si intenta retrotraer los cambios o eliminar la base de datos, ya que los ejecutables no se pueden suprimir.
Para obtener más información sobre el establecimiento del parámetro KEEPDARI, consulte el apartado 'Updating the Database Manager Configuration File' en "Chapter 2. Setup" de la publicación 'Application Building Guide'.
El primer párrafo de 'Utilización del mandato CALL' debe ser:
Para utilizar el mandato call, debe entrar el nombre del procedimiento almacenado junto con los parámetros IN o INOUT, además de '?' como área de retención de posición para cada parámetro OUT. Para conocer detalles sobre la sintaxis del mandato CALL, consulte el apartado 10.14, "CALL".
Paso 1. | Instale el FixPak 3 |
Paso 2. | Emita el mandato db2updv7 para habilitar DB2 para extraer e instalar procedimientos de SQL compilados: db2updv7 -d nombre_basedatos
|
Cuando se define un procedimiento de SQL, se convierte en un programa C, se precompila, se vincula frente a la base de datos de destino, se compila y se enlaza para crear una biblioteca compartida. Los pasos de compilación y enlace requieren que haya un compilador C o C++ disponible en la máquina servidor de bases de datos. Sin embargo, una vez que se haya definido un procedimiento de SQL, puede distribuirse en formato compilado a bases de datos DB2 que se ejecutan en la misma plataforma pero no necesariamente tienen acceso a un compilador C o C++. DB2 permite al usuario extraer procedimientos de SQL en formato compilado de una base de datos e instalarlos en formato compilado en otra base de datos.
DB2 proporciona una interfaz de línea de mandatos y una interfaz de programación para las operaciones de extracción e instalación. La interfaz de línea de mandatos consta de dos mandatos CLP: GET ROUTINE y PUT ROUTINE. La interfaz programática consta de dos procedimientos almacenados incorporados: GET_ROUTINE_SAR y PUT_ROUTINE_SAR. Para obtener más información sobre la interfaz de línea de mandatos, consulte el manual Consulta de mandatos. Para obtener más información sobre la interfaz de programación, consulte el manual Consulta de SQL.
Para distribuir un procedimiento de SQL compilado de un servidor de bases de datos a otro, lleve a cabo los pasos siguientes:
Paso 1. | Desarrolle la aplicación, incluyendo la definición de los procedimientos de SQL que formen parte de la aplicación. |
Después de probar los procedimientos, extraiga la versión compilada de cada procedimiento en un archivo diferente. Para obtener más información, consulte el mandato GET ROUTIN del manual Consulta de mandatos o el procedimiento almacenado GET_ROUTINE_SAR del manual Consulta de SQL. | |
Paso 3. | Instale la versión compilada de cada procedimiento en cada servidor, emitiendo el mandato PUT ROUTINE o invocando el procedimiento almacenado PUT_ROUTINE_SAR, utilizando los archivos creados por el Paso 2. Cada servidor de bases de datos debe tener el mismo sistema operativo y nivel de DB2.
|