$ cd /usr/local/arcexplorer
$ ./arcexplorer
圖 1. 啟動的 ArcExplorer $ db2 create database spatial
DB20000I The CREATE DATABASE command completed successfully.
$ db2se enable_db spatial
Enabling database. Please wait ...
GSE1036W The Operation was successful. But values of certain
database manager and database configuration parameters should be
increased.
對于警告 GSE1036W,暫時可以忽略。該警告是啟用步驟中發出的,用于確認某些數據庫治理器(DBM)配置參數是否不低于某個最小值,以確保在較復雜的場景中可以使用擴展器的適當功能。但是由于目前只需使用一些簡單的查詢,因此不必強制調整這些參數。 空間化一個 DB2 for z/OS 子系統還需執行更多的步驟。數據庫治理員必須修改 JCL 腳本,以啟用數據庫。例如,需要使用 DB2 子系統的名稱。調整腳本之后,執行腳本,為 DB2 子系統啟用空間支持特性。這個過程的細節超出了本文的范圍。情參閱文檔(見參考資料 小節)。 導入空間數據 本文使用 DB2 Spatial Extender 附帶的三個示例 shapefile -- 即 sjMainStreets、sjZipCodes 和 sjCensusBlocks -- 來演示如何使用 ArcExplorer。第一步是將那些 shapefile 導入到空間化數據庫中。這里分別針對 DB2 for Linux, UNIX, and Windows 和 DB2 for z/OS 討論這一過程,因為兩者之間有明顯的不同。 上一頁123456789下一頁 DB2 for Linux, UNIX, and Windows 清單 3 顯示如何使用 db2se 命令行工具導入 shapefile。只有 shapefile sqMainStreets 被導入到數據庫 SPATIAL 中。導入其他兩個 shapefile 的命令在 import.sh 文件中,該文件可以在下載小節中找到。當然,DB2 Control Center 中也提供了相同的功能。另外,也可以從您自己的應用程序中通過調用 db2gse.ST_import_shape 存儲過程來開始導入。欲了解更多信息,請參閱 Spatial Extender 文檔。 清單 3. 將示例 shapefile 導入到 DB2 for Linux, UNIX, and Windows 中$ db2se import_shape SPATIAL -filename sjMainStreets -srsName NAD83_SRS_1
-tableName MAIN_STREETS -createTableFlag 1 -spatialColumn SHAPE
-idColumn SE_ROW_ID -commitScope 1000 -client 1
GSE0000I The operation was completed successfully.
$ db2se register_spatial_column SPATIAL -tableName MAIN_STREETS
-columnName SHAPE -srsName NAD83_SRS_1
GSE0000I The operation was completed successfully.
對于導入操作,有兩件事情要注重。ArcExplorer 要求表中存在一個名為 SE_ROW_ID 的列。那個列的類型必須聲明為 INTEGER。這個列中的值用于惟一地標識每一行,也就是說,它必須是一個 ID 列。可以選擇讓 shape import 自動添加該列并為之生成惟一值(選項 idColumn)。第二件事情是 ArcExplorer 要求所有空間列指定一個空間引用系統。這可以通過像清單 3 中最后一步那樣注冊空間列來完成。 也有其他方法可以提供強制的 SE_ROW_ID 列。例如,可以使用空間表上的一個視圖,通過重新命名視圖定義中的 ID 列,從一個已有的 ID 列中取得 SE_ROW_ID 值。另一種方法是使用不同的編號技術,例如在線分析處理(OLAP)函數 ROW_NUMBER() 為新的 SE_ROW_ID 列生成值。具體實現留給有愛好的同學作為練習。 上一頁12345678910下一頁 DB2 for z/OS DB2 for z/OS 的空間支持提供了一個類似于 db2se 的工具。這個工具的名稱為 DSN5SCLP,由于在 z/OS 上運行,因此必須從一個 JCL 腳本中啟動該工具。要導入的 shapefile 必須在 z/OS 上的一個分層文件系統(HFS)數據集中。清單 4 中的腳本假設掛載點(mount point)名為 /u/stolze/。在您自己的系統中,可以需要相應地調整這個值。shapefile 被存儲為二進制數據。因此,.dbf 文件中的所有數據(包含非空間屬性信息)仍然以 ASCII 格式編碼。(另一方面,生成的消息文件則以 EBCDIC 格式存儲來自導入操作的所有消息。) 和前面一樣,DB2 for Linux, UNIX, and Windows 上使用相同的 shapefile。清單 4 顯示了如何導入 shapefile sjMainStreets。其他兩個 shapefile 可以按相同方式導入,只是需要調整一下文件名和表名。在 下載小節中可以找到用于所有三個表的完整 JCL 腳本 import.jcl。 清單 4. 將示例 shapefile 導入到 DB2 for z/OS 中//IMPORT JOB 'USER=$$USER','',CLASS=A,MSGCLASS=H,MSGLEVEL=(1,1)
//JOBLIB DD DSN=DB2A.SDSNEXIT,DISP=SHR
// DD DSN=DB2A.SDSNLOAD,DISP=SHR
// DD DSN=CEE.SCEERUN,DISP=SHR
// DD DSN=CBC.SCLBDLL,DISP=SHR
//*
//* IMPORT SHAPE FILES
//*
//IMPORT EXEC PGM=IKJEFT01,REGION=0M,DYNAMNBR=20
//SYSPRINT DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//DSNAOINI DD DSN=DB2A.SDSNSAMP(DSNAOINI),DISP=SHR
//CEEDUMP DD SYSOUT=*
//SYSTSIN DD *
DSN5SCLP /import_shape STLEC1 +
-fileName /u/stolze/sjMainStreets +
-createTableFlag 1 +
-srsName NAD83_SRS_1 +
-tableName MAIN_STREETS +
-tableCreationParameters "IN DATABASE SPATIAL" +
-spatialColumn SHAPE -idColumn SE_ROW_ID +
-messagesFile /u/stolze/mainStreets.msg
//*
//* REGISTER SPATIAL COLUMNS
//*
//REGISTER EXEC PGM=IKJEFT01,REGION=0M,DYNAMNBR=20
//SYSPRINT DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//DSNAOINI DD DSN=DB2A.SDSNSAMP(DSNAOINI),DISP=SHR
//CEEDUMP DD SYSOUT=*
//SYSTSIN DD *
DSN5SCLP /register_spatial_column STLEC1 +
-tableName MAIN_STREETS -columnName SHAPE -srsName NAD83_SRS_1
//*
上一頁234567891011下一頁 DSN5SCLP 要求為每個操作指定 DB2 位置名稱(清單中為 STLEC1),其中 db2se 需要一個數據庫的名稱。為了建立到各個 DB2 子系統的連接,這是必需的。惟一需要注重的其他事項是,可以、也應該在 CREATE TABLE 語句后面添加一個子句,以指定將表放在哪個數據庫中。選項 tableCreationParameters 用于提供用于數據庫 SPATIAL 的信息。 JCL 腳本不僅導入空間數據,而且還為那些表中的空間列注冊一個專用的 SQL Reporting Service (SRS)。這與之前的小節是一樣的。這一步實際上不是必需的,因為 ArcExplorer 不在本地訪問 DB2 for z/OS。相反,正如接下來的小節中要具體解釋的那樣,這里使用一個聯邦層。 為訪問 DB2 for z/OS 上的空間數據設置聯邦 不幸的是,不能讓 ArcExplorer 直接訪問 DB2 for z/OS 中的空間數據。ArcExplorer 依靠于來自 DB2 for Linux, UNIX, and Windows 的編目視圖,并且(在內部)使用特定于 DB2 for Linux, UNIX, and Windows 的語法(即方法調用)來處理空間數據。雖然可以模擬所需的 DB2 for Linux, UNIX, and Windows 中的編目視圖,但是查詢語法顯得更精妙一些。 DB2 的聯邦功能為我們提供了一個解決方案。我們將空間和非空間數據存儲在 DB2 for z/OS 中,但是使用一個 DB2 for Linux, UNIX, and Windows 實例作為聯邦服務器。這個聯邦服務器透明地通過昵稱訪問 DB2 for z/OS 中的數據,同時提供所需的編目視圖和接受方法調用語法。 但是,需要通過迂回的方法傳輸空間數據,并在 DB2 for z/OS 與 DB2 for Linux, UNIX, and Windows 中不同的內部表示之間轉換空間數據。實現到 DB2 數據源的 DRDA 包裝器還沒有提供這種轉換功能。因此,在轉換步驟中可以使用視圖,按照其 well-known binary (WKB) 編目傳輸空間數據。圖 2 顯示了 ArcExplorer 訪問 DB2 for z/OS 中的空間數據的架構。 上一頁34567891011下一頁 圖 2. 聯邦設置 CREATE WRAPPER drda;
CREATE SERVER host TYPE DB2/ZOS VERSION '9' WRAPPER DRDA
AUTHORIZATION sysadm PASSWord password OPTIONS ( DBNAME 'HOST' );
CREATE USER MAPPING FOR USER SERVER host
OPTIONS ( REMOTE_AUTHID 'SYSADM', REMOTE_PASSWORD 'PASSWORD' );
SET PASSTHRU host;
CREATE VIEW main_streets_view AS
SELECT census1, census2, cfcc, cfcc1, cfcc2, fedirp, fedirs, fename,
fetype, INTEGER(fnode) AS fnode, fraddl, fraddr, length,
se_row_id, source, tlid, INTEGER(tnode) AS tnode, toaddl,
toaddr, zipl, zipr,
db2gse.ST_AsBinary(shape) AS wkb, db2gse.ST_SrId(shape) AS srsId
FROM main_streets;
SET PASSTHRU RESET;
CREATE NICKNAME main_streets_nick
FOR host.sysadm.main_streets_view;
CREATE VIEW main_streets_host AS
SELECT census1, census2, cfcc, cfcc1, cfcc2, fedirp, fedirs, fename,
fetype, fnode, fraddl, fraddr, length, se_row_id, source, tlid,
tnode, toaddl, toaddr, zipl, zipr,
db2gse.ST_MultiLineString(wkb, srsId) AS shape
FROM main_streets_nick;
! db2se register_spatial_column spatial -tableName MAIN_STREETS_HOST
-columnName SHAPE -srsName NAD83_SRS_1;
上一頁4567891011下一頁 上述設置的總體效果是,所有數據在物理上只存儲在 DB2 for z/OS 中,而所有訪問則被定向到 DB2 for Linux, UNIX, and Windows。在查詢時,DB2 for Linux, UNIX, and Windows 轉換查詢,以適應 DB2 for z/OS,并且用視圖轉換空間數據。 可視化空間數據 完成之前的所有預備工作之后,現在可以將注重力放在根據空間數據呈現地圖上來。首先,需要添加一個層。一個層是具有共同類型的空間對象(及其非空間屬性)的一個集合。例如,所有街道可以形成一個街道層。按照關系 DBMS,一個層對應于一個空間表,也就是有一個幾何列和一些其他非幾何列的表。表中的所有列都是具有那個表所表示的某種實體類型的實體。其他列中的值描述每個幾何圖形的屬性(例如街道名稱)。 可以通過菜單(Layer > Add Layers)或者單擊工具條中的 Add Layers 圖標在 ArcExplorer 中添加一個層。在新打開的 Catalog 窗口中,第一步是添加一個數據庫連接。要連接的數據庫必須在本地 DB2 (客戶機)實例中編目。另外還必須指定一個用戶名和密碼。圖 3 顯示了這一步。 圖 3. 設置 DB2 連接 新聞熱點
疑難解答