以前有用戶曾經問過這樣一個問題 我想進行數據的關聯,這很簡單啊,ArcSDE提供了很多關聯方式,join、視圖、QueryLayer等, 詳細參考:http://blog.csdn.net/linghe301/article/details/6649717 但是用戶要求的條件比較特殊,這兩個數據分布在兩個庫中,這可
以前有用戶曾經問過這樣一個問題
我想進行數據的關聯,這很簡單啊,ArcSDE提供了很多關聯方式,join、視圖、QueryLayer等,
詳細參考:http://blog.csdn.net/linghe301/article/details/6649717
但是用戶要求的條件比較特殊,這兩個數據分布在兩個庫中,這可以進行關聯么?答案是肯定的。下面我們就一一演示一下怎么進行跨庫的關聯,其實關鍵的步驟就是Oracle數據庫的跨庫查詢,其他方面就跟一個庫一樣了。
比如我們有一個庫orcl里面用戶test的表為place,另外一個庫orcl2里面用戶sde的表為owner
首先我們看看這兩個表的結構
C:\Users\Administrator>sqlplus test/test@orcl SQL*Plus: Release 11.2.0.1.0 Production on 星期一 2月 6 15:50:04 2012 Copyright (c) 1982, 2010, Oracle. All rights reserved. 連接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> desc place; 名稱 是否為空? 類型 ----------------------------------------- -------- -------------------------- OBJECTID NOT NULL NUMBER(38) NAME NVARCHAR2(50) PID NUMBER(38) ID NUMBER(38) SHAPE SDE.ST_GEOMETRY
C:\Users\Administrator>sqlplus sys/oracle@orcl2 as sysdba SQL*Plus: Release 11.2.0.1.0 Production on 星期一 2月 6 15:50:52 2012 Copyright (c) 1982, 2010, Oracle. All rights reserved. 連接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> desc sde.owner; 名稱 是否為空? 類型 ----------------------------------------- -------- ------------------------- OBJECTID NOT NULL NUMBER(38) PID NUMBER(10) ID NUMBER(10) NAME NVARCHAR2(50) NAME1 NVARCHAR2(50)
首先我們將這兩個表在數據庫層次上進行關聯
create public database link ABB connect to SDE using 'orcl2';
create public database link ABC connect to SDE using '(DESCRIPTION= (ADDRESS_LIST= (ADDRESS=(PROTOCOL=TCP)(HOST=192.168.100.111)(PORT=1521)) ) (CONNECT_DATA= (SERVICE_NAME=orcl2) ) )';
以上兩種關聯方法都可以,具體步驟就是我連接實例orcl的sys用戶,然后其中ABB是你建樹的dblink名字,orcl2是遠程數據庫的實例名/網絡服務名,sde/sde是登錄到遠程數據庫的用戶/密碼。然后在當地數據庫中經由過程dblink訪謁遠程數據庫'orcl2'中
那么我們在一個實例查看另一個實例的某個用戶的表名應該是:
用戶名.表名@數據庫連接名(上面的link名稱)
SQL> conn sys/oracle@orcl as sysdba 已連接。 SQL> create public database link ABB connect to sde identified by sde using 'orcl2'; 數據庫鏈接已創建。 SQL> desc sde.owner@ABB; 名稱 是否為空? 類型 ----------------------------------------- -------- ---------------------------- OBJECTID NOT NULL NUMBER(38) PID NUMBER(10) ID NUMBER(10) NAME NVARCHAR2(50) NAME1 NVARCHAR2(50)
SQL> conn sys/oracle@orcl as sysdba 已連接。 SQL> create public database link ABB connect to sde identified by sde using 'orcl2'; 數據庫鏈接已創建。 SQL> desc sde.owner@ABB; 名稱 是否為空? 類型 ----------------------------------------- -------- ---------------------------- OBJECTID NOT NULL NUMBER(38) PID NUMBER(10) ID NUMBER(10) NAME NVARCHAR2(50) NAME1 NVARCHAR2(50)
盡量創建public,不然針對不同用戶有權限的問題,如果對權限要求很高,也可以不使用public
那么我們創建相關的視圖
SQL> create or replace view myview1 as select test.place.pid,test.place.shape,sde.owner@ABB.name from test.place,sde.own er@ABB where test.place.id=sde.owner@ABB.id; create or replace view myview1 as select test.place.pid,test.place.shape,sde.owner@ABB.name from test.place,sde.owner@AB B where test.place.id=sde.owner@ABB.id * 第 1 行出現錯誤: ORA-02019: 未找到遠程數據庫的連接說明 ORA-04054: 數據庫鏈接 ABB.ID 不存在
可見在orcl實例下直接使用sde.owner@ABB.id獲得orcl2實例里面的owner表中的id字段系統不支持,那我們將sde.owner@ABB在orcl實例下創建一個同義詞來代替。
創建同義詞
SQL> conn sys/oracle@orcl as sysdba 已連接。 SQL> create public synonym mysyn1 for sde.owner@abb; 同義詞已創建。 SQL> conn test/test@orcl; 已連接。 SQL> desc mysyn1; 名稱 是否為空? 類型 ----------------------------------------- -------- ---------------------------- OBJECTID NOT NULL NUMBER(38) PID NUMBER(10) ID NUMBER(10) NAME NVARCHAR2(50) NAME1 NVARCHAR2(50)
SQL> create or replace view myview1 as select test.place.pid,test.place.shape,mysyn1.name from test.place,mysyn1 where test.place.id=mysyn1.id; 視圖已創建。
C:\Users\Administrator>sdelayer -o register -l myview1,shape -e a -t ST_GEOMETRY -i sde:oracle11g:orcl -u test -p test ArcSDE 10.0 for Oracle11g Build 1937 Tue Aug 16 16:08:18 2011 Layer Administration Utility ----------------------------------------------------- Successfully Created Layer.
結束語:個人感覺,這種方式來進行關聯不太穩定,至少我將該圖層數據加載到ArcGIS Desktop導致桌面軟件崩潰(也有可能因為我環境問題導致的),不過使用sql操作都沒有問題,不是萬不得已,建議慎重考慮使用該方式。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com