配置 Oracle 侦听器以使用 SQL 访问地理数据库

在 Oracle 中,ST_Geometry 和 ST_Raster 的 SQL 函数使用通过 Oracle 的外部过程代理(即 extproc)访问的共享库。要将 SQL 和 ST_Geometry 或 ST_Raster 配合使用或访问 GDB_ITEMS_VW 和 GDB_ITEMRELATIONSHIPS_VW 视图中的 ArcSDE XML 列,Oracle 必须能够访问这些库。因此 Oracle 服务器上必须存在这些库,并且必须配置 Oracle 侦听器才能通过 Oracle 的外部过程框架调用这些库中的函数。

注意注意:

在 ArcGIS 中,不设置 Oracle 侦听器也可使用 ST_Geometry 和 ST_Raster。但是,您不会拥有 ArcSDE 客户端的全部功能,也不会拥有 SQL 客户端的任何功能(如 SQL*Plus)。例如,如果未配置 Oracle 侦听器,则无法对 ArcMap 的查询图层中的 ST_Geometry 列或包含 ST_Raster 列的版本化表使用 SQL 函数,无法删除包括 ST_Raster 列的行,或无法从 SQL 客户端执行 SQL 函数。

ST_Raster 安装为可选操作。有关说明,请参阅在 Oracle 中安装 ST_Raster 类型

Oracle 侦听器能够进行多种配置。例如,可能有多个侦听器与数据库关联,而每个侦听器又可管理多种类型的服务请求。这是一个很复杂的主题,本文档并未涵盖其中的很多种变化。参阅《Oracle 数据库网络服务管理员指南》了解有关配置侦听器的详细信息是很重要的。

配置侦听器的一个最重要方面是要告知 extproc 在哪里找到共享库。需要修改侦听器配置以指定共享库的位置以及重新启动 Oracle 侦听器进程,这样配置更改内容才能生效。

本文档涉及两个标准的 Oracle 侦听器配置文件:tnsnames.ora 和 listener.ora。这两个文件通常位于 ORACLE_HOME/net/admin。本文档介绍所需的配置设置。

管理设置有多种方法。可用文本编辑器编辑文本文件,使用 Oracle Net Manager 或使用 Oracle Net Configuration Assistant。Oracle 提供有关如何配置侦听器的文档。有关详细信息,请参阅《Oracle 数据库网络服务管理员指南》。

tnsnames.ora 文件包含已知数据库服务的目录。此文件可在本地数据库或远程服务器上定义服务。有一个条目专供本地数据库服务器通过进程间通信 (IPC) 将函数调用发送到 extproc 使用。此条目标注为 EXTPROC_CONNECTION_DATA。可更改此条目下的 Key 和 SID 值。

这些项目用于将该条目链接至 listener.ora 文件中的对应信息。该键的名称可以为任何缩写名称,但它在 listener.ora 文件和 tnsnames.ora 文件中的名称必须一致。这些值区分大小写。仅侦听器进程可使用这些值,用户或应用程序不可使用。

listener.ora 文件描述侦听器针对请求所侦听的某些(不一定是全部)服务。

此文件中可更改的值包括:

步骤:
  1. 进行任何更改之前,要备份 tnsnames.ora 和 listener.ora 文件。
  2. 打开 Oracle 服务器上的 tnsnames.ora 文件。
  3. 在 tnsnames.ora 文件中更改 EXTPROC_CONNECTION_DATA 下的 Key 和 SID 值。

    EXTPROC_CONNECTION_DATA = (DESCRIPTION =     (ADDRESS_LIST =       (ADDRESS = (PROTOCOL = IPC)(Key = EXTPROC1))     )     (CONNECT_DATA =       (SID = PLSExtProc)       (PRESENTATION = RO)     ) )

    此条目必须始终有标注 EXTPROC_CONNECTION_DATA。此条目供数据库服务器通过进程间通信将函数调用发送到 extproc 使用。

  4. 打开 Oracle 服务器上的 listener.ora 文件。
  5. 更改所需的条目以设置侦听器将接受其请求的服务器。

    第一个示例用于安装有 ArcSDE 和 Oracle 的 Windows 操作系统。

    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:\ArcSDE\sdeexe\bin\st_shapelib.dll;c:\ArcSDE\sdeexe\bin\libst_raster_ora.dll")  )   ) 

    此示例显示的条目用于安装有 ArcSDE 和 Oracle 的 Linux 或 UNIX(IBM AIX 除外)服务器。

    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=/servit/ArcSDE/sdeexe/lib/libst_shapelib.so:/servit/ArcSDE/sdeexe/lib/libst_raster_ora.so")   ) ) 

    此示例显示的条目用于 IBM AIX 上的 ArcSDE for Oracle。

    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=/servit/ArcSDE/sdeexe/lib/libst_shapelib_64.so:/servit/ArcSDE/sdeexe/lib/libst_raster_ora_64.so")   ) )

  6. 更改完 listener.ora 文件后,重新启动 Oracle 侦听器。

3/7/2012