在 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;
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 文件描述監聽器針對請求所監聽的某些(不一定是全部)服務。
此文件中可更改的值包括:
此標注是名為 LISTENER(默認監聽器名稱)的監聽器要處理的 SID 列表的開頭。
標題 SID_LIST 下的 SID_DESC 條目用於定義服務。列表中的第一個條目處理 extproc 請求,第二個條目處理客戶端會話。
其值必須與在文件 tnsnames.ora 中為 extproc 指定的 SID 對應。
定義此項服務的 Oracle 主頁的位置。從此位置下的文件夾加載 extproc 程序文件。
指定 extproc 可執行文件的文件名。此區分大小寫的名稱可能是 extproc 或 extproc.exe,具體取決於操作系統的類型。文件位於 ORACLE_HOME/bin。
這是 extproc 在運行時所使用的環境變量的列表。列表用冒號分隔。此列表必須包括環境變量 EXTPROC_DLLS 以及 extproc 在運行時需要的任何其他環境變量的定義,其他環境變量通常包括 UNIX 和 Linux 系統中的 LD_LIBRARY_PATH、SHLIB_PATH 或 LIBPATH,或者 Windows 服務器上的 PATH。路徑變量通常包括幾何與投影引擎庫的位置。
此環境變量用於定義 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 將僅使用路徑中提供的特定庫。
為此條目設置的值將此監聽器鏈接到文件 tnsnames.ora 中的對應服務條目。該值將此監聽器與可能存在於同一數據庫服務器的其他 IPC 監聽器區分開來。key 可為任何名稱縮寫,但在文件 listener.ora 和 tnsnames.ora 中必須相同。key 區分大小寫。