在 Oracle 中,ST_Geometry 和 ST_Raster 的 SQL 函數使用通過 Oracle 的外部過程代理(即 extproc)訪問的共用庫。要將 SQL 和 ST_Geometry 或 ST_Raster 配合使用或訪問 GDB_ITEMS_VW 和 GDB_ITEMRELATI ...
在 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 監聽器也可以使用 ST_Geometry 和 ST_Raster。但是,您將不會擁有 ArcGIS 客戶端的全部功能,也不會擁有 SQL 客戶端的任何功能(如 SQL*Plus)。例如,如果未配置 Oracle 監聽器,則無法對 ArcMap 的查詢圖層中的 ST_Geometry 列或包含 ST_Raster 列的版本化表使用 SQL 函數,無法刪除包括 ST_Raster 列的行,也無法從 SQL 客戶端執行 SQL 函數。另外,如果您不配置 Oracle 監聽器,則無法將使用 ST_Geometry 類型作為要素服務的數據發佈到空間數據伺服器。
ST_Raster 安裝為可選操作。有關說明,請參閱在 Oracle 中安裝 ST_Raster 類型。
註:
如果您的 Oracle 資料庫安裝在 Windows 伺服器上,但您未安裝 ArcSDE 應用程式伺服器,則您可能需要安裝 Microsoft Visual C++ 2008 SP1 Redistributable Package (x64)。如果 Oracle 伺服器上沒有 Microsoft Visual C++ 2008 SP1 Redistributable Package (x64),則可從 Microsoft 網站下載,然後進行安裝。
如果您使用的是 Oracle 11g,請編輯 extproc.ora 文件以通過 Oracle 的外部過程框架來調用函數。如果您使用的是 Oracle 10g,請配置 Oracle 監聽器。
首先創建ST_SHAPELIB library
執行sql查詢user_libraries
select * from user_libraries;
創建ST_SHAPELIB library create or replace library ST_SHAPELIB as 'C:\arcgisdll\st_shapelib.dll'; 設置生效 alter package sde.st_geometry_shapelib_pkg compile reuse settings;
Oracle 11g
對於 Oracle 11g,Oracle 建議您通過更改 extproc.ora 文件而不是配置監聽器來配置 EXTPROC。extproc.ora 文件位於 ORACLE_HOME\hs\admin 目錄中。
將 ST_Geometry (st_shapelib) 和/或 ST_Raster 庫移動到您的 Oracle 伺服器上之後,更改 extproc.ora 文件以指向庫的位置。
在 Windows 伺服器上,您可添加與以下類似的行:
EXTPROC_DLLS=ONLY:C:\\mylibraries\\st_shapelib.dll
EXTPROC_DLLS=ONLY:C:\\mylibraries\\libst_raster_ora.dll
如果您使用兩個庫,可將它們放在一行上:
EXTPROC_DLLS=ONLY:C:\\mylibraries\\st_shapelib.dll;C:\\mylibraries\\libst_raster_ora.dll
在這些示例中,庫放置在名為 mylibraries 的文件夾中,此文件夾在 Oracle 伺服器上創建以存儲庫。
在 Linux 或 UNIX 伺服器上:
SET EXTPROC_DLLS=ONLY:/user/esrilibs/libst_shapelib.so
SET EXTPROC_DLLS=ONLY:/user/esrilibs/libst_raster_ora.so
如果您使用兩個庫,可將它們放在一行上:
SET EXTPROC_DLLS=ONLY:/user/esrilibs/libst_shapelib.so:/user/esrilibs/libst_raster_ora.so
在這些示例中,庫放置在用戶的 esrilibs 目錄中,此目錄在 Oracle 伺服器上創建以存儲庫。
Oracle 10g
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 文件描述監聽器針對請求所監聽的某些(不一定是全部)服務。
此文件中可更改的值包括:
- 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 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(Key = EXTPROC1)) ) (CONNECT_DATA = (SID = PLSExtProc) (PRESENTATION = RO) ) )
此條目必須始終有標註 EXTPROC_CONNECTION_DATA。此條目供資料庫伺服器通過進程間通信將函數調用發送到 extproc 使用。
- 打開 Oracle 伺服器上的 listener.ora 文件。
- 更改所需的條目以設置監聽器將接受其請求的伺服器。
第一個示例用於同時安裝有 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 伺服器:
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") ) )
- 更改完 listener.ora 文件後,重新啟動 Oracle 監聽器。