配置 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 目錄中。
- 在 Oracle 伺服器上建立 extproc.ora 檔案的備份副本。
-
打開 extproc.ora 檔案并将其改為指向 ST_Geometry (st_shapelib) 和/或 ST_Raster 庫的位置。
本示例中,已将以下行添加到 Windows 伺服器上,以指向名為 mylibraries 的檔案夾中的 ST_Geometry 庫:
如果您正在使用 ST_Geometry 和 ST_Raster 兩個庫,可将二者的條目放在同一行上:SET EXTPROC_DLLS=ONLY:C:\\mylibraries\\st_shapelib.dll
本示例中,已将以下行添加到 Linux 或 UNIX 伺服器上,以指向使用者的 esrilibs 目錄中的 ST_Geometry 庫,此目錄在 Oracle 伺服器上建立以存儲庫:SET EXTPROC_DLLS=ONLY:C:\\mylibraries\\st_shapelib.dll;C:\\mylibraries\\libst_raster_ora.dll
如果您正在使用 ST_Geometry 和 ST_Raster 兩個庫,可将二者的條目放在同一行上:SET EXTPROC_DLLS=ONLY:/user/esrilibs/libst_shapelib.so
SET EXTPROC_DLLS=ONLY:/user/esrilibs/libst_shapelib.so:/user/esrilibs/libst_raster_ora.so
- 儲存并關閉 extproc.ora 檔案。
- 需要通路庫(包括 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 區分大小寫。
- 進行任何更改之前,要備份 tnsnames.ora 和 listener.ora 檔案。
- 打開 Oracle 伺服器上的 tnsnames.ora 檔案。
- 在 tnsnames.ora 檔案中更改 EXTPROC_CONNECTION_DATA 下的 Key 和 SID 值。
此條目必須始終有标注 EXTPROC_CONNECTION_DATA。此條目供資料庫伺服器通過程序間通信将函數調用發送到 extproc 使用。EXTPROC_CONNECTION_DATA = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(Key = EXTPROC1)) ) (CONNECT_DATA = (SID = PLSExtProc) (PRESENTATION = RO) ) )
- 儲存更改并關閉 tnsnames.ora 檔案。
- 打開 Oracle 伺服器上的 listener.ora 檔案。
-
更改所需的條目以設定監聽器将接受其請求的伺服器。
第一個示例針對 Windows 作業系統,ST_Geometry 和 ST_Raster 庫位于名為 gislibs 的檔案夾中:
此示例顯示了 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 = C:\oracle\product\10.2.0\db_1) (PROGRAM = extproc) (ENVS="EXTPROC_DLLS=C:\gislibs\st_shapelib.dll;C:\gislibs\libst_raster_ora.dll") ) )
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") ) )
- 更改并儲存 listener.ora 檔案後,請重新啟動 Oracle 監聽器。
- 當11G的oracle按照11g方法進行配置無效時,請使用10g的方法進行配置。
- 當提出“DLL無效”時請将st_shapelib.dll複制到任意目錄下,再重新“向 Oracle 資料庫添加 ST_Geometry 類型”,重新配置oracle exproc。