怎麼配置 Oracle 接聽程式來使用SQL操作ST_Geometry

來源:互聯網
上載者:User

標籤:

關於這個內容,其實從ArcSDE9.2推出ST_Geometry就讓使用者感到很有吸引力,而且特別是在ArcSDE9.3之後,使用者使用SQL操作ST_geometry越來越多,但是在配置Oracle監聽來說總是碰到這樣那樣的問題,以下就是總結一下配置 Oracle 接聽程式來使用SQL操作ST_Geometry 。

 

首先說明一下:如果你的ArcSDE版本是9.2最好不要使用這種方式,因為Bug也是比較多的。

例如:http://support.esri.com/en/knowledgebase/techarticles/detail/33918

1:我們需要使用SQL操作ST_Geometry,那麼我們的資料存放區都應該以ST_Geometry,但是有一點容易被使用者忽視的就是原來的資料可能是ArcSDE9.2他們都是以BLOB或者Long Raw進行儲存,然後升級到ArcSDE9.3但是儲存沒有升級,這樣怎麼配置都不能SQL操作,這是往往被使用者忽視的問題。

解決該問題:使用Migrate工具遷移一下儲存。

 

2:查看一下Oracle的監聽狀態,extporc(CLRextproc)的狀態必須為靜態(Unknow),如果是Ready狀態就有可能出現問題,而且Oracle監聽必須同時監聽TCP和IPC

 

  1. C:\Users\Administrator>lsnrctl status  
  2.   
  3. LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 26-12月-2011 10:2  
  4. 9:44  
  5.   
  6. Copyright (c) 1991, 2010, Oracle.  All rights reserved.  
  7.   
  8. 正在串連到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))  
  9. LISTENER 的 STATUS  
  10. ------------------------  
  11. 別名                      LISTENER  
  12. 版本                      TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Produ  
  13. ction  
  14. 啟動日期                  26-12月-2011 10:28:14  
  15. 正常已耗用時間              0 天 0 小時 1 分 34 秒  
  16. 追蹤層級                  off  
  17. 安全性                    ON: Local OS Authentication  
  18. SNMP                      OFF  
  19. 監聽程式參數檔案          D:\app\Administrator\product\11.2.0\dbhome_1\network\a  
  20. dmin\listener.ora  
  21. 監聽程式記錄檔          d:\app\administrator\diag\tnslsnr\lish\listener\alert\  
  22. log.xml  
  23. 監聽端點概要...  
  24.   (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))  
  25.   (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.100.111)(PORT=1521)))  
  26. 服務摘要..  
  27. 服務 "CLRExtProc" 包含 1 個執行個體。  
  28.   執行個體 "CLRExtProc", 狀態 UNKNOWN, 包含此服務的 1 個處理常式...  
  29. 服務 "orcl" 包含 2 個執行個體。  
  30.   執行個體 "orcl", 狀態 UNKNOWN, 包含此服務的 1 個處理常式...  
  31.   執行個體 "orcl", 狀態 READY, 包含此服務的 1 個處理常式...  
  32. 服務 "orclXDB" 包含 1 個執行個體。  
  33.   執行個體 "orcl", 狀態 READY, 包含此服務的 1 個處理常式...  
  34. 命令執行成功  

 

3:如果是分布式安裝情況下

 

a:比如伺服器安裝的64Bit的Oracle伺服器端,ArcSDE機器安裝的32Bit的軟體,兩者都是Windows作業系統

b:比如伺服器安裝的64Bit的Oracle伺服器端,AIX作業系統,ArcSDE機器安裝的32Bit的軟體,Windows作業系統

那麼這就需要根據伺服器端的Oracle的位元以及所以的作業系統來定相關的dll或者so的位元,也就是說這個配置必須跟Oracle的伺服器端打交道,我們根據伺服器的作業系統和位元來定

 

解決:

a:在伺服器端安裝一個64Bit的ArcSDE軟體即可,其實最主要的就是需要64Bit的相關dll

b:在伺服器端安裝一個64Bit的適用於AIX作業系統的ArcSDE軟體,一樣道理

 

4:引用相關的dll以Windows為例,不僅僅只有一個st_shapelib.dll,還包括pe.dll,sg.dll,所以在使用過程中需要注意是否這三個dll都存在,在非windows環境下更是如此,此外還需要注意對這三個檔案的讀寫操作。

 

5:配置完畢,我們可以使用以下命令來檢查

注意:這個是在sde使用者下

 

  1. SQL> select * from user_libraries;  
  2.   
  3. LIBRARY_NAME  
  4. ------------------------------  
  5. FILE_SPEC  
  6. ------------------------------------------------------------------------------  
  7. --------------------  
  8. D STATUS  
  9. - -------  
  10. ST_SHAPELIB  
  11. C:\Program Files\ArcGIS\ArcSDE\ora11gexe\bin\st_shapelib.dll  
  12. Y VALID  

如果沒有的話

 

  1. SQL> create or replace library ST_SHAPELIB  
  2.   2  as ‘D:\Oracle\product\11.2.0\dbhome_1\BIN\st_shapelib.dll‘;  
  3.   3  /  
  4.   
  5. 庫已建立。  
  6.   
  7. SQL> alter package sde.st_geometry_shapelib_pkg compile reuse settings;  
  8.   
  9. 程式包已變更。  

 

6:其實配置來說,也就是對listener.ora和TNSName.ora檔案的配置

 

listener.ora:檔案主要對相關St_shapelib.dll的引用,使用者也可以將我所講到的三個dll拷貝到ORACLE_HOME/bin檔案夾裡面,注意相關的許可權,然後EXTPROC_DLLS=ANY,這種方法也可以可以的。

  1. # listener.ora Network Configuration File: D:\app\Administrator\product\11.2.0\dbhome_1\network\admin\listener.ora  
  2. # Generated by Oracle configuration tools.  
  3.   
  4. SID_LIST_LISTENER =  
  5.   (SID_LIST =  
  6.     (SID_DESC =  
  7.       (SID_NAME = CLRExtProc)  
  8.       (ORACLE_HOME = D:\app\Administrator\product\11.2.0\dbhome_1)  
  9.       (PROGRAM = extproc)  
  10.       (ENVS = "EXTPROC_DLLS=ANY")  
  11.     )  
  12.     (SID_DESC =  
  13.       (GLOBAL_DBANAME = orcl)  
  14.       (ORACLE_HOME = D:\app\Administrator\product\11.2.0\dbhome_1)  
  15.       (SID_NAME = orcl)  
  16.     )  
  17.   )  
  18.   
  19. LISTENER =  
  20.   (DESCRIPTION_LIST =  
  21.     (DESCRIPTION =  
  22.       (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))  
  23.       (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.111)(PORT = 1521))  
  24.     )  
  25.   )  
  26.   
  27. ADR_BASE_LISTENER = D:\app\Administrator  

7:TNSName.ora檔案來說就是兩個檔案都有KEY值,保證這兩個檔案的KEY值一致就可以了,還有就是以我的經驗,安裝最新版本的Oracle比如現在我機器的環境就是oracle 11.2.0.1,他的TNSNAME檔案並不會出現EXTPROC_CONNECTION_DATA關鍵字,所以我們需要修改為這個關鍵字即可。 Esri也有關於Oracle11gR2相關配置ST_Geometry的文章:http://support.esri.com/en/knowledgebase/techarticles/detail/38043
  1. # tnsnames.ora Network Configuration File: D:\app\Administrator\product\11.2.0\dbhome_1\network\admin\tnsnames.ora  
  2. # Generated by Oracle configuration tools.  
  3.   
  4. LISTENER_ORCL =  
  5.   (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.111)(PORT = 1521))  
  6.   
  7.   
  8. EXTPROC_CONNECTION_DATA =  
  9.   (DESCRIPTION =  
  10.     (ADDRESS_LIST =  
  11.       (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))  
  12.     )  
  13.     (CONNECT_DATA =  
  14.       (SID = CLRExtProc)  
  15.       (PRESENTATION = RO)  
  16.     )  
  17.   )  
  18.   
  19. ORCL =  
  20.   (DESCRIPTION =  
  21.     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.111)(PORT = 1521))  
  22.     (CONNECT_DATA =  
  23.       (SERVER = DEDICATED)  
  24.       (SERVICE_NAME = orcl)  
  25.     )  
  26.   )  
如果環境跟我一致,也可以將這兩個檔案複製,將使用者的相關參數進行修改即可。相關參數參考
  1. <span style="font-size:13px;">SID_LIST_LISTENER  
  2. 此標註是名為 LISTENER(預設接聽程式名稱)的接聽程式要處理的 SID 列表的開頭。  
  3.   
  4. SID_LIST 和 SID_DESC  
  5. 標題 SID_LIST 下的 SID_DESC 條目用於定義服務。列表中的第一個?蹌看? extproc 請求,第二個條目處理用戶端工作階段。  
  6.   
  7. SID_NAME  
  8. 其值必須與在檔案 tnsnames.ora 中為 extproc 指定的 SID 對應。  
  9.   
  10. ORACLE_HOME  
  11. 定義此項服務的 Oracle 首頁的位置。從此位置下的檔案夾載入 extproc 程式檔案。  
  12.   
  13. PROGRAM  
  14. 指定 extproc 可執行檔的檔案名稱。此區分大小寫名稱可能是 extproc 或 extproc.exe,具體取決於作業系統的類型。檔案位於 ORACLE_HOME/bin。  
  15.   
  16. ENVS  
  17. 這是 extproc 在運行時所使用的環境變數的列表。列表用冒號分隔。此列表必須包括環境變數 EXTPROC_DLLS 以及 extproc 在運行時需要的任何其他環境變數的定義,其他環境變數通常包括 UNIX 和 Linux 系統中的 LD_LIBRARY_PATH、SHLIB_PATH 或 LIBPATH,或者 Windows 伺服器上的 PATH。路徑變數通常包括幾何與投影引擎庫的位置。  
  18.   
  19. EXTPROC_DLLS  
  20. 此環境變數用於定義 extproc 可直接從中載入和調用函數的庫的列表。包含 ST_SHAPELIB 和 LIBST_RASTER 庫的檔案的路徑必須在此指定。  
  21.   
  22. 對於安裝在 UNIX 上的 Oracle 伺服器,列表用冒號分隔,對於安裝在 Windows 上的 Oracle 伺服器,列表用分號分隔。所有路徑都必須是絕對路徑並且指向本地目錄,或者是 Oracle 系統使用者可訪問的 UNC 路徑。這也意味著如果已將 ArcSDE 安裝在非 Oracle 伺服器上,則必須將形狀和柵格庫複製到 Oracle 伺服器。有關詳細資料,請參閱在不同的伺服器上安裝 Oracle 和 ArcSDE。  
  23.   
  24. 不存在環境變數替換。  
  25.   
  26. 可選關鍵字 ANY 和 ONLY 可用於放寬或限制 extproc 使用庫檔案的方式。如果將 ANY 放在路徑前面,Oracle 可從指定路徑載入任何庫並且不必提供庫名稱。如果將 ONLY 放在路徑前面,Oracle 將僅使用路徑中提供的特定庫。  
  27.   
  28. KEY  
  29. 為此條目設定的值將此接聽程式連結到檔案 tnsnames.ora 中的對應服務條目。該值將此接聽程式與可能存在於同一資料庫伺服器的其他 IPC 接聽程式區分開來。key 可為任何簡短名稱,但在檔案 listener.ora 和 tnsnames.ora 中必須相同。key 區分大小寫。</span><span style="font-size:18px;">  
  30. </span>  


 

8:測試是否正常

 

  1. SQL> select sde.st_astext(shape) from  aa where objectid<3;  
  2.   
  3. SDE.ST_ASTEXT(SHAPE)  
  4. ------------------------------------------------------------------  
  5.   
  6. POINT  ( -13625889.61620000 4541020.47880000)  
  7. POINT  ( -13627070.41230000 4548787.04140000)  

 

 

怎麼配置 Oracle 接聽程式來使用SQL操作ST_Geometry

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.