天天看點

st_geometry在oracle中無法使用 [ORA-28575: 無法打開與外部過程代理程式的 RPC 連接配接]配置 Oracle extproc 以使用 SQL 通路地理資料庫

配置 Oracle extproc 以使用 SQL 通路地理資料庫

  • Oracle 11g 和 12c
  • Oracle 10g

在 Oracle 中,ST_Geometry 和 ST_Raster 的 SQL 函數使用通過 Oracle 的外部過程代理(即 extproc)通路的共享庫。要将 SQL 和 ST_Geometry 或 ST_Raster 配合使用或通路 GDB_ITEMS_VW 和 GDB_ITEMRELATIONSHIPS_VW 視圖中的 ArcSDE XML 列,Oracle 必須能夠通路這些庫。是以,這些庫必須存在于 Oracle 伺服器上,并且必須通過 Oracle 的外部過程架構調用它們。

在 ArcGIS 中,不設定 Oracle extproc 也可以使用 ST_Geometry 和 ST_Raster。但是,您将不會擁有 ArcGIS 用戶端的全部功能,也不會擁有 SQL 用戶端的任何功能(如 SQL*Plus)。例如,如果未配置 extproc,則無法對 ArcMap 的查詢圖層中的 ST_Geometry 列使用 SQL 函數、無法識别資料庫視圖中的要素、無法對包含 ST_Raster 列的表進行版本化,無法删除包括 ST_Raster 列的行,無法釋出包含 ST_Geometry 資料的要素服務,也無法從 SQL 用戶端執行 SQL 函數。

注:

如果您的 Oracle 資料庫安裝在 Windows 伺服器上,則您可能需要安裝 Microsoft Visual C++ 2008 SP1 Redistributable Package (x64)。如果 Oracle 伺服器上沒有 Microsoft Visual C++ 2008 SP1 Redistributable Package (x64),則可從 Microsoft 網站下載下傳,然後進行安裝。

如果您使用的是 Oracle 11g 或 12c,請編輯 extproc.ora 檔案以通過 Oracle 的外部過程架構來調用函數。如果您使用的是 Oracle 10g,請配置 Oracle 監聽器。

Oracle 11g 和 12c

對于 Oracle 11g 和 12c,Oracle 建議您通過更改 extproc.ora 檔案而不是配置監聽器來配置 extproc。extproc.ora 檔案位于 ORACLE_HOME\hs\admin 目錄中。

  1. 在 Oracle 伺服器上建立 extproc.ora 檔案的備份副本。
  2. 打開 extproc.ora 檔案并将其改為指向 ST_Geometry (st_shapelib) 和/或 ST_Raster 庫的位置。

    本示例中,已将以下行添加到 Windows 伺服器上,以指向名為 mylibraries 的檔案夾中的 ST_Geometry 庫:

    SET EXTPROC_DLLS=ONLY:C:\\mylibraries\\st_shapelib.dll      
    如果您正在使用 ST_Geometry 和 ST_Raster 兩個庫,可将二者的條目放在同一行上:
    SET EXTPROC_DLLS=ONLY:C:\\mylibraries\\st_shapelib.dll;C:\\mylibraries\\libst_raster_ora.dll      
    本示例中,已将以下行添加到 Linux 或 UNIX 伺服器上,以指向使用者的 esrilibs 目錄中的 ST_Geometry 庫,此目錄在 Oracle 伺服器上建立以存儲庫:
    SET EXTPROC_DLLS=ONLY:/user/esrilibs/libst_shapelib.so      
    如果您正在使用 ST_Geometry 和 ST_Raster 兩個庫,可将二者的條目放在同一行上:
    SET EXTPROC_DLLS=ONLY:/user/esrilibs/libst_shapelib.so:/user/esrilibs/libst_raster_ora.so      
  3. 儲存并關閉 extproc.ora 檔案。
  4. 需要通路庫(包括 web 服務)的所有用戶端必須重新連接配接到資料庫。

Oracle 10g

配置監聽器的一個最重要方面是要告知 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 檔案描述監聽器針對請求所監聽的某些(不一定是全部)服務。

此檔案中可更改的值包括:

  • SID_LIST_LISTENER

    此标注是名為 LISTENER(預設監聽器名稱)的監聽器要處理的 SID 清單的開頭。

  • SID_LIST 和 SID_DESC

    标題 SID_LIST 下的 SID_DESC 條目用于定義服務。清單中的第一個條目處理 extproc 請求,第二個條目處理用戶端會話。

  • SID_NAME

    其值必須與在檔案 tnsnames.ora 中為 extproc 指定的 SID 對應。

  • ORACLE_HOME

    定義此項服務的 Oracle 首頁的位置。從此位置下的檔案夾加載 extproc 程式檔案。

  • PROGRAM

    指定 extproc 可執行檔案的檔案名。此區分大小寫的名稱可能是 extproc 或 extproc.exe,具體取決于作業系統的類型。檔案位于 ORACLE_HOME/bin。

  • ENVS

    這是 extproc 在運作時所使用的環境變量的清單。清單用冒号分隔。此清單必須包括環境變量 EXTPROC_DLLS 以及 extproc 在運作時需要的任何其他環境變量的定義,其他環境變量通常包括 UNIX 和 Linux 系統中的 LD_LIBRARY_PATH、SHLIB_PATH 或 LIBPATH,或者 Windows 伺服器上的 PATH。路徑變量通常包括幾何與投影引擎庫的位置。

  • EXTPROC_DLLS

    此環境變量用于定義 extproc 可直接從中加載和調用函數的庫的清單。必須在此指定包含以下庫的檔案的路徑:形狀庫,用于通過 SQL 來通路 ST_Geometry 類型或 GDB_ITEMS_VW 和 GDB_ITEMRELATIONSHIPS_VW 視圖;st_raster 庫,用于通過 SQL 來通路 ST_Raster 類型。

    對于安裝在 UNIX 上的 Oracle 伺服器,清單用冒号分隔,對于安裝在 Windows 上的 Oracle 伺服器,清單用分号分隔。所有路徑都必須是絕對路徑并且指向本地目錄,或者是 Oracle 系統使用者可通路的 UNC 路徑。這也意味着如果已将 ArcSDE 應用程式伺服器安裝在非 Oracle 伺服器上,則必須将形狀和栅格庫從 SDEHOME 中的 bin 目錄複制到 Oracle 伺服器。

    不存在環境變量替換。

    可選關鍵字 ANY 和 ONLY 可用于放寬或限制 extproc 使用庫檔案的方式。如果将 ANY 放在路徑前面,Oracle 可從指定路徑加載任何庫并且不必提供庫名稱。如果将 ONLY 放在路徑前面,Oracle 将僅使用路徑中提供的特定庫。

  • KEY

    為此條目設定的值将此監聽器連結到檔案 tnsnames.ora 中的對應服務條目。該值将此監聽器與可能存在于同一資料庫伺服器的其他 IPC 監聽器區分開來。key 可為任何名稱縮寫,但在檔案 listener.ora 和 tnsnames.ora 中必須相同。key 區分大小寫。

  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. 儲存更改并關閉 tnsnames.ora 檔案。
  5. 打開 Oracle 伺服器上的 listener.ora 檔案。
  6. 更改所需的條目以設定監聽器将接受其請求的伺服器。

    第一個示例針對 Windows 作業系統,ST_Geometry 和 ST_Raster 庫位于名為 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")
     )  
    )      
    此示例顯示了 Linux 或 UNIX 伺服器的條目,其中的 ST_Geometry 和 ST_Raster 庫存儲在 /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")
        )
       )      
  7. 更改并儲存 listener.ora 檔案後,請重新啟動 Oracle 監聽器。
  • 當11G的oracle按照11g方法進行配置無效時,請使用10g的方法進行配置。
  • 當提出“DLL無效”時請将st_shapelib.dll複制到任意目錄下,再重新“向 Oracle 資料庫添加 ST_Geometry 類型”,重新配置oracle exproc。