Las funciones SQL de ST_Geometry y ST_Raster en Oracle usan bibliotecas compartidas a las que se accede a través del agente de procedimiento externo de Oracle o extproc. Para utilizar SQL con ST_Geometry o ST_Raster, o para acceder a las columnas XML de ArcSDE en las vistas GDB_ITEMS_VW y GDB_ITEMRELATIONSHIPS_VW, Oracle debe tener acceso a las bibliotecas. Por lo tanto, las bibliotecas deben estar presentes en el servidor de Oracle y deben utilizarse a través del marco de procedimiento externo de Oracle.
Es posible usar ST_Geometry y ST_Raster en ArcGIS sin configurar Oracle extproc. Sin embargo, no tendrá funcionalidad completa desde los clientes de ArcGIS y no tendrá funcionalidad desde los clientes SQL, como SQL*Plus. Por ejemplo, no puede usar funciones SQL de las columnas ST_Geometry en las capas de consulta de ArcMap, identificar entidades en vistas de base de datos, versionar tablas que contengan columnas ST_Raster, eliminar una fila que incluya una columna ST_Raster, publicar servicios de entidades que contengan datos de ST_Geometry ni ejecutar funciones SQL desde los clientes de SQL si extproc no está configurado.
Si está utilizando Oracle 11g o 12c, edite el archivo extproc.ora para usar funciones a través del marco de procedimiento externo de Oracle. Si está utilizando Oracle 10g, configure Oracle listener.
Oracle 11g y 12c
Oracle recomienda que configure extproc modificando el archivo extproc.ora en lugar de configurar el agente de escucha para Oracle 11g y 12c. El archivo extproc.ora se encuentra en el directorio ORACLE_HOME\hs\admin.
- Realice una copia de seguridad del archivo extproc.ora en el servidor de Oracle.
- Abra el archivo extproc.ora y modifíquelo para que señale la ubicación de las bibliotecas ST_Geometry (st_shapelib) y/o ST_Raster.
En este ejemplo de un servidor de Windows, se agrega la línea siguiente para que señale la biblioteca ST_Geometry de una carpeta llamada mylibraries:
SET EXTPROC_DLLS=ONLY:C:\\mylibraries\\st_shapelib.dll
Si está utilizando las bibliotecas ST_Geometry y ST_Raster, puede colocar entradas para ambas en una línea:
SET EXTPROC_DLLS=ONLY:C:\\mylibraries\\st_shapelib.dll;C:\\mylibraries\\libst_raster_ora.dll
En este ejemplo en un servidor Linux o UNIX, se agrega la línea siguiente para que señale la biblioteca ST_Geometry del directorio esrilibs del usuario, que se creó en el servidor de Oracle para almacenar la biblioteca:
SET EXTPROC_DLLS=ONLY:/user/esrilibs/libst_shapelib.so
Si está utilizando las bibliotecas ST_Geometry y ST_Raster, puede colocar entradas para ambas en una línea:
SET EXTPROC_DLLS=ONLY:/user/esrilibs/libst_shapelib.so:/user/esrilibs/libst_raster_ora.so
- Guarde y cierre el archivo extproc.ora.
- Cualquier cliente que necesite tener acceso a las bibliotecas (servicios Web incluidos) debe volver a conectarse a la base de datos.
Oracle 10g
Indicar a extproc dónde encontrar las bibliotecas compartidas es el aspecto más importante de la configuración del listener. Debe modificar la configuración del listener para especificar la ubicación de las bibliotecas compartidas y reiniciar el proceso de Oracle listener para que los cambios de la configuración tengan efecto.
Hay dos archivos de configuración estándar de Oracle Listener relacionados: tnsnames.ora y listener.ora. Normalmente estos archivos se encuentran en ORACLE_HOME/net/admin. Este documento presenta los valores de configuración que son necesarios.
Existen varias formas de administrar la configuración. Puede editar los archivos de texto con un editor de texto, usar Oracle Net Manager o usar Oracle Net Configuration Assistant. Oracle proporciona documentación sobre cómo configurar el listener. Consulte la Oracle Database Net Services Administrator's Guide para obtener detalles.
El archivo tnsnames.ora contiene un directorio de los servicios de bases de datos conocidos. Este archivo puede definir los servicios en la base de datos local o en servidores remotos. Una entrada es específicamente para el uso del servidor de la base de datos local para que use comunicaciones entre procesos (IPC) a fin de enviar llamadas de función al extproc. Esta entrada se etiqueta EXTPROC_CONNECTION_DATA. También puede alterar los valores SID y Key en esta entrada.
Estos elementos se utilizan para vincular esta entrada a la información correspondiente en el archivo listener.ora. La clave puede ser cualquier nombre corto, pero tanto el archivo listener.ora como el archivo tnsnames.ora deben tener la misma clave. Estos valores distinguen entre mayúsculas y minúsculas. Solo los usa el proceso del listener y no los usuarios o las aplicaciones.
En el archivo listener.ora se describen algunos de los servicios (no necesariamente todos) para los cuales el listener escucha solicitudes.
Los valores que pueden modificarse en este archivo incluyen:
- SID_LIST_LISTENER
Esta etiqueta comienza una lista de SID que puede manejar el listener llamado LISTENER (el nombre de listener predeterminado).
- SID_LIST y SID_DESC
Las entradas SID_DESC en el encabezado SID_LIST definen servicios. La primera en la lista maneja las solicitudes de extproc, y la segunda maneja las sesiones de los clientes.
- SID_NAME
El valor de este debe corresponder con el SID especificado para extproc en el archivo tnsnames.ora.
- ORACLE_HOME
Define la ubicación de inicio de Oracle para este servicio. Los archivos del programa extproc se cargan desde una carpeta debajo de esta ubicación.
- PROGRAM
Especifica el nombre del archivo ejecutable de extproc. Este nombre, que distingue entre mayúsculas y minúsculas, podría ser extproc o extproc.exe, según el tipo de sistema operativo. El archivo está ubicado en ORACLE_HOME/bin.
- ENVS
Es una lista de las variables de entorno que usa extproc cuando se ejecuta. La lista está delimitada por comas. Debe incluir una definición de la variable de entorno EXTPROC_DLLS y cualquier otra variable de entorno que extproc necesite cuando se ejecuta, que suelen incluir LD_LIBRARY_PATH, SHLIB_PATH o LIBPATH en UNIX y sistemas Linux, o PATH en servidores Windows. La variable de ruta suele incluir la ubicación de la geometría y las bibliotecas del motor de proyección.
- EXTPROC_DLLS
Esta variable de entorno define una lista de bibliotecas desde donde extproc puede cargar y llamar funciones directamente. Aquí debe especificar la ruta al archivo que contiene la biblioteca forma, necesaria para acceder a los tipos ST_Geometry o a las vistas GDB_ITEMS_VW y GDB_ITEMRELATIONSHIPS_VW mediante SQL, y la biblioteca st_raster, necesaria para acceder al tipo ST_Raster mediante SQL.
La lista está delimitada por comas para los servidores Oracle instalados en UNIX y delimitadas por punto y coma para los servidores Oracle instalados en Windows. Todas las rutas deben ser absolutas y apuntar a directorios locales o una ruta UNC a los que puede acceder el usuario del sistema Oracle. Esto también significa que, si instaló un servidor de aplicaciones ArcSDE en un servidor que no es Oracle, debe copiar las bibliotecas de ráster y forma del directorio bin en SDEHOME al servidor Oracle.
No existe una sustitución de la variable de entorno.
Las palabras clave opcionales ANY y ONLY pueden usarse para flexibilizar o restringir la forma en que extproc usa los archivos de la biblioteca. Si coloca ANY delante de la ruta, Oracle podrá cargar cualquier biblioteca desde la ruta especificada, y usted no tendrá que proporcionar un nombre de biblioteca. Si coloca ONLY delante de la ruta, Oracle utilizará solo la biblioteca específica que proporcionó en la ruta.
- KEY
El valor de esta entrada vincula este listener con la entrada del servicio correspondiente en el archivo tnsnames.ora. Distingue este listener de otros listeners IPC que puedan estar presentes en el mismo servidor de bases de datos. La clave puede ser cualquier nombre corto, pero debe ser la misma en los archivos listener.ora y tnsnames.ora. En la clave se distingue entre mayúsculas y minúsculas.
- Antes de hacer algún cambio, haga copias de seguridad de los archivos tnsnames.ora y listener.ora.
- Abra el archivo tnsnames.ora en el servidor Oracle.
- Cambie los valores SID y Key en EXTPROC_CONNECTION_DATA en el archivo tnsnames.ora.
EXTPROC_CONNECTION_DATA = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(Key = EXTPROC1)) ) (CONNECT_DATA = (SID = PLSExtProc) (PRESENTATION = RO) ) )
Esta entrada siempre debe tener la etiqueta EXTPROC_CONNECTION_DATA. El servidor de la base de datos usa esta entrada para que las comunicaciones entre procesos envíen llamadas de función a extproc.
- Guarde los cambios y cierre el archivo tnsnames.ora.
- Abra el archivo listener.ora en el servidor Oracle.
- Cambie las entradas necesarias para configurar los servicios desde los cuales el listener aceptará solicitudes.
El primer ejemplo corresponde a un sistema operativo Windows y las bibliotecas ST_Geometry y ST_Raster están en una carpeta llamada gislibs:
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) (ADDRESS = (PROTOCOL = TCP)(HOST = svr1.dmn1.com)(PORT = 1521)) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = C:\oracle\product\10.2.0\db_1) (PROGRAM = extproc) (ENVS="EXTPROC_DLLS=C:\gislibs\st_shapelib.dll;C:\gislibs\libst_raster_ora.dll") ) )
En este ejemplo se muestra una entrada correspondiente a un servidor Linux o UNIX en el que las bibliotecas ST_Geometry y ST_Raster se almacenan en /arcgis/libs:
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) (ADDRESS = (PROTOCOL = TCP)(HOST = svr1.dmn1.com)(PORT = 1521)) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = /servit/oracle/product/10.2.0/db_1) (PROGRAM = extproc) (ENVS="EXTPROC_DLLS=/arcgis/libs/libst_shapelib.so:/arcgis/libs/libst_raster_ora.so") ) )
- Después de modificar y guardar el archivo listener.ora, reinicie el agente de escucha de Oracle.