
簡介ArcSDE 10.2 for Oracle 10g/11g 安裝包是 Esri 推出的地理空間數據中間件面向 GIS 管理員、數據庫管理員及 ArcGIS 二次開發(fā)人員用于在 Windows 平臺將 Oracle 數據庫與 ArcGIS 無縫集成并高效管理海量分布式地理數據。壓縮包共 14 個文件大小約 77.88MB涵蓋 Oracle 10g 和 11g 兩個版本內部包含 exe 與 msi 安裝程序、cab 組件數據文件、chm 幫助文檔、ini 配置示例及 htm 安裝引導頁面可完整支撐從環(huán)境準備、服務端安裝到客戶端連接的全流程。其中還針對不同 Oracle 版本整理了配置說明與故障排查思路有助于規(guī)避版本兼容性陷阱并借此理解版本化數據存儲、并發(fā)編輯、WFS/WMS 服務發(fā)布以及索引、分區(qū)等性能優(yōu)化機制。已有 989 人學習適合離線搭建 ArcGIS Oracle 集成環(huán)境的中高級 GIS 工程師、系統運維人員也可作為企業(yè)空間數據庫建設的備選參考。1. ArcSDE 10.2 不是安裝包是 GIS 和 Oracle 之間的“翻譯官”ArcSDE 10.2 for Oracle 10g/11g 這個安裝包裝進去的不是一個普通軟件而是 Esri 在 Windows 平臺上用來把 Oracle 變成“空間數據庫”的中間件。簡單說沒有它ArcGIS Desktop 和 ArcGIS Server 就只能把數據存成文件有了它幾百 GB 的矢量數據可以扔進 Oracle讓 ArcGIS 通過 SDE 服務或直連方式讀寫還支持多版本編輯和長事務。我當年第一次部署時也以為它就是個帶界面的服務端程序結果發(fā)現真正的活兒全在命令行和數據庫權限里。這個包適合三類人做 GIS 二次開發(fā)的工程師、管 ArcGIS Server 環(huán)境的運維以及要把 ArcSDE 從老版本遷上來的老手。它的使用邊界也很明確——只覆蓋 10.2 版本配 Oracle 10g/11g換數據庫版本就得換包。2. 裝之前先定三件事數據庫版本、SDE 服務模式、Oracle 客戶端位數2.1 先看清包里的兩個文件夾Oracle10g 和 Oracle11g 不能混用壓縮包解壓后會有兩個并列的目錄一個叫 ArcSDEOracle10g一個叫 ArcSDEOracle11g。這不是讓用戶選哪個順手而是 ArcSDE 10.2 針對 Oracle 數據庫版本分開做的安裝介質。Oracle 10g 目錄對應數據庫 10.1.0.x 到 10.2.0.xOracle 11g 目錄對應 11.1.0.x 和 11.2.0.x。如果數據庫是 11.2.0.4卻拿著 ArcSDEOracle10g 里的 setup.msi 去裝裝完配置階段會直接連不上因為 Server 端組件注冊的 DLL 版本和數據庫內部包不匹配。我一般會先在新環(huán)境里跑一遍sqlplus / as sysdba確認數據庫版本再決定用哪個目錄。這一步花不了兩分鐘但能省掉后面至少半天的排錯。版本低于 10.2.0.5 的 Oracle 10g 數據庫建議先打補丁再裝 ArcSDE不然在 sdesetup 階段容易報 ORA-00942: table or view does not exist實際上是數據庫自身缺了必要的視圖不是 ArcSDE 的問題。2.2 服務模式還是直連模式10.2 開始兩種都要懂ArcSDE 從 10.x 版本開始官方主推直連direct connection但不少老項目里還在用傳統的 ArcSDE 服務giomgr 進程。這個區(qū)別必須在裝之前想清楚因為安裝步驟和服務注冊命令完全不同。直連模式下ArcGIS Desktop 客戶端不經過任何中間服務進程直接通過 Oracle 客戶端連到數據庫里的 SDE schema連接字符串里寫的是數據庫地址和實例名。老模式則是裝一個 Windows 服務客戶端先連這個服務再由它轉發(fā)給 Oracle。兩種模式的數據存儲結構一樣都是 SDE schema 里的那套表區(qū)別只在訪問路徑。10.2 版本有個特殊之處它同時支持兩種模式所以安裝包里既有服務端組件也帶客戶端 DLL。我見過有人只裝了服務端就跑到 ArcGIS Catalog 里配直連結果報“Failed to connect to database”其實就是缺了直連要用的 Oracle 客戶端庫。反過來只跑 Desktop 的人如果不需要多用戶并發(fā)編輯完全沒必要裝服務端直接用直連就好還能少維護一個 Windows 服務。2.3 安裝介質里的文件有什么講究setup.exe、setup.msi、instmsi3.exe 各管一段打開任意一個目錄里面這幾樣東西幾乎是固定的Setup.exe、setup.msi、setup.ini、Setup.chm、Install.htm、Data1.cab還有一個 instmsi3.exe。它們的分工說清楚排錯就有方向。Setup.exe 是引導程序負責檢查系統環(huán)境比如是否裝了舊版 ArcSDE然后調用 MSI 執(zhí)行安裝。setup.msi 才是真正的安裝邏輯所有文件的復制、注冊表寫入都靠它。Data1.cab 是壓縮數據包MSI 安裝時從里面解出實際文件。setup.ini 是靜默安裝用的配置入口里面可以指定安裝路徑、組件。instmsi3.exe 是 Windows Installer 3.1 的安裝補丁在 Windows Server 2008 這類老系統上如果 MSI 引擎版本太低Setup.exe 會先去跑它。我第一次裝就踩過 instmsi3.exe 的坑在 Windows 7 上雙擊 Setup.exe 沒反應后來才發(fā)現引導程序在后臺等 MSI 引擎升級手動點了 instmsi3.exe 再跑 setup.msi 就好了。Install.htm 是網頁版安裝說明Setup.chm 是 CHM 格式幫助文檔裝之前先把這兩份翻一遍里面對 Oracle 版本的注意事項寫得比網上任何博客都準。3. Windows 上把安裝包跑起來從解壓到 MSI 落地的三條路線3.1 解壓路徑選不好MSI 第一階段就翻車安裝包拿到手第一件事是解壓。注意解壓路徑最好不要帶空格和中文C:\ArcSDE\ArcSDEOracle11g這種都行但D:\軟件\ArcSDE 10.2\新建文件夾這種就等著出問題。原因在于 Setup.msi 在安裝過程中會把安裝源路徑寫進 Windows Installer 的緩存路徑含中文時部分調用 Oracle DLL 的步驟會用 ANSI 編碼解析路徑到配置階段就變成亂碼。解壓后建議先看 Install.htm它會對當前系統需要什么前置條件做說明。按我的經驗Windows Server 2008 R2 或 2012 上裝基本不需要額外補丁如果是 Windows 7 桌面環(huán)境測試用先確認 .NET Framework 3.5 已經開了ArcSDE 服務管理工具 sdeservice 依賴它。3.2 靜默安裝setup.ini 里藏著可改的參數如果給客戶部署多臺服務器或者本地就打算用命令行裝setup.ini 就是關鍵。默認內容大致是:[InstallShield] SilentYes ; 靜默模式開關Yes 表示不彈界面 ComponentsService,Client ; 組件選擇Service 裝服務端Client 裝客戶端庫 TARGETDIRC:\ArcSDE ; 安裝根目錄默認在系統盤建議手工改 REG_SOFTWARE_INSTALL_PATHC:\ArcSDE靜默裝的時候我一般這么跑:setup.exe -r -f1C:\ArcSDE\setup.iss-r是記錄本次安裝操作-f1指定響應文件路徑。第一次先在圖形界面裝一遍生成 setup.iss后面批量部署時用:setup.exe -s -f1C:\ArcSDE\setup.iss參數說明-s表示靜默執(zhí)行-f1指定響應文件注意千萬不要漏掉響應文件路徑否則安裝程序會去找默認位置的 setup.iss找不到就直接退出日志里什么都看不到。Setup.ini 里的 Components 字段值得多說一句只做客戶端直連的話把 Service 去掉可以省掉后面注冊 Windows 服務那一堆事。3.3 圖形界面安裝雙擊 Setup.exe 之后的三個選擇項含義圖形界面沒什么玄學但有幾個選項容易選錯。第一步是安裝類型通常選“ArcSDE Default”它會同時裝好服務端和管理工具如果只是給 ArcGIS Desktop 用選“Client”就夠。第二步是選數據庫支持。界面會列出 Oracle 10g、Oracle 11g 等選項這里要和數據庫實例匹配。注意這個選項決定安裝程序往 Oracle 的安裝目錄里復制哪些 DLL選錯了后面 sdesetup 直接報版本錯誤。第三步是服務賬戶。老版本裝完會要求指定一個 Windows 賬戶跑 ArcSDE 服務我建議選一個專用的域賬戶別用 Local System。不然到了后面配置 Oracle 連接時服務起來后訪問網絡資源會出權限問題表現為 sdemon 能起來但客戶端連不上。4. 配庫才是主戰(zhàn)場sdesetup 建庫、sdeconfig 調參、sdeservice 注冊4.1 Oracle 側準備先建用戶、表空間再動 ArcSDE安裝介質落地之后如果直接在 ArcGIS 里連 Oracle大概率會收到“ORA-01017: invalid username/password”。因為 ArcSDE 要求 Oracle 里先有一個專用的數據庫用戶來存 SDE schema它不是安裝程序自動創(chuàng)建的。這一步需要在數據庫里手工做。CREATE TABLESPACE sde_data DATAFILE C:\ORACLE\ORADATA\ORCL\sde_data01.dbf SIZE 2G AUTOEXTEND ON NEXT 100M MAXSIZE 32G; CREATE USER sde IDENTIFIED BY sde_password DEFAULT TABLESPACE sde_data QUOTA UNLIMITED ON sde_data; GRANT CONNECT, RESOURCE TO sde;說明表空間名字可以改成項目名但用戶名的 sde 是硬約定ArcSDE 的腳本默認去找 SDE schema換名字會非常痛苦。QUOTA UNLIMITED這段如果漏了后期寫入數據時頻繁報 ORA-01950。GRANT 里的 RESOURCE 角色在 Oracle 11g 里包含 CREATE TABLE、CREATE PROCEDURE 等權限但 sdesetup 建庫過程中要執(zhí)行的是更高級的存儲過程授權所以通常還要給 sde 用戶加一句GRANT UNLIMITED TABLESPACE TO sde;這段的意義在于避免數據文件擴容時單獨給每張表分配配額。生產環(huán)境我一般還給 sde 用戶開啟CREATE SESSION之外的最小權限模型但測試環(huán)境先把上面的跑通再說。4.2 sdesetup 命令建庫語法、參數、以及 Oracle 服務名怎么傳Oracle 側的用戶和表空間就緒后就開始真正的建庫操作。用的是安裝目錄下的 sdesetup.exe在命令行里跑sdesetup -o install -d ORACLE11G -u sde -p sde_password -h orcl -H C:\ArcSDE\Logs逐個參數說清楚-o install執(zhí)行建庫操作在 SDE schema 下創(chuàng)建全部數據字典和存儲過程。-d ORACLE11G數據庫類型注意是 ORACLE11G 或 ORACLE10G和安裝時選的目錄對應。-u sde數據庫用戶名固定是 sde。-p sde_password上面建用戶時設置的密碼。-h orcl這里填的是 Oracle TNS 服務名或者 SID 簡寫不是主機名。如果填錯會報 ORA-12154。-H C:\ArcSDE\Logs日志輸出目錄sdesetup 會把建庫過程中的每一步寫進 sde_setup.log排錯全靠它。我第一次跑的時候把-h寫成了數據庫 IP結果折騰半小時換成 tnsnames.ora 里配的服務名立刻通過。sdesetup執(zhí)行成功以后SDE schema 下會出現 sde_layer、sde_table_registry、sde_versions 等核心表你可以用 sqlplus 登錄 sde 用戶確認。4.3 sdeconfig 調參連接池、超時、臨時文件路徑都有默認值要改建庫完成后緊接著要執(zhí)行一次 sdeconfig 更新參數。這一步很多人跳過結果生產環(huán)境連上后不斷報連接中斷。常用的是:sdeconfig -o update -d ORACLE11G -u sde -p sde_password -s orcl -C CONNECTIONS200這里的-s orcl也是 TNS 服務名-C CONNECTIONS200是讓 SDE 服務同時處理的連接數上限。默認值通常很低ArcGIS Server 多個實例并發(fā)訪問時很快就打滿表現是客戶端長時間等待后報“Connection timed out”。另外值得調的是臨時文件目錄sdeconfig -o update -d ORACLE11G -u sde -p sde_password -s orcl -C TEMPC:\ArcSDE\TempTEMP參數控制 ArcSDE 做空間運算時寫臨時文件的路徑默認指向系統臨時目錄。Windows 服務器上如果系統盤空間小一個大的緩沖分析直接撐爆 C 盤所以習慣上建一個獨立目錄。調完這兩個參數后用 sdemon 重啟服務:sdemon -o stop -i esri_sde sdemon -o start -i esri_sde-i esri_sde是服務名默認是 esri_sde如果你在 sdeservice 里改過名這里要跟著改。4.4 別忘了注冊服務sdeservice 創(chuàng)建 Windows 服務裝完 MSI 不等于有了服務Windows 服務是單獨注冊的跑下面的命令sdeservice -o create -d ORACLE11G -u sde -p sde_password -i esri_sde-o create創(chuàng)建服務-i esri_sde指定服務標識。執(zhí)行成功后能在 Windows 服務管理器里看到一個名為 ArcSDE_esri_sde 的服務。這里有個常見的玄學點服務創(chuàng)建成功但啟動失敗十有八九是 Oracle 客戶端缺少環(huán)境變量或監(jiān)聽沒起來。先別急著 reinstall到服務屬性的“登錄”選項卡確認賬戶有“Log on as a service”權限再到系統環(huán)境變量里確認 PATH 包含 Oracle 客戶端的 bin 目錄。5. 避坑手冊ArcSDE 10.2 安裝最常見的五個翻車現場5.1 現象sdesetup 報 ORA-01031: insufficient privileges原因sde 用戶缺少建庫所需的角色權限這是所有權限錯誤里最常見的一種。解決用 sysdba 登錄給 sde 用戶補授權執(zhí)行GRANT EXECUTE ON DBMS_PIPE TO sde;再執(zhí)行GRANT CREATE SEQUENCE TO sde;。ArcSDE 建庫要用 DBMS_PIPE 和序列這兩項經常被漏掉把 4.1 里所有的授權語句一次性跑完基本能避開。5.2 現象安裝完成后雙擊 ArcGIS Catalog 連接報“Failed to connect to database”原因我先說結論——八成是 Oracle 客戶端位數不對。ArcSDE 10.2 的組件是 32 位的而服務器上如果只裝了 64 位 Oracle 客戶端直連時加載 OCI 庫失敗報得很籠統。解決下載 32 位 Oracle Instant Client在系統 PATH 里把它的目錄放到最前面。另一個坑是 tnsnames.ora 里沒有這個實例的條目ArcSDE 在 Windows 上讀 Oracle 配置是按環(huán)境變量 TNS_ADMIN 找的把這個變量顯式指到 tnsnames.ora 所在目錄很多奇怪的連接問題當場消失。5.3 現象ArcSDE 服務能啟動但客戶端連上去執(zhí)行第一個編輯操作就報“ORA-24777”原因字面意思是使用了未經允許的事務多數情況下是 Oracle 的分布式事務配置缺失具體講是 Oracle 參數文件中沒有給 ArcSDE 打開必要的 XA 支持。解決在 Oracle 的 init.ora 或 spfile 中加一行compatible11.2.0.4.0版本按實際來然后確認數據庫的 global_names 沒有強制為 TRUE。改完后重啟 Oracle 實例和 ArcSDE 服務這個錯誤基本就沒有了。5.4 現象Setup.chm 雙擊打開是空白頁原因Windows 從 XP SP2 之后對 CHM 文件默認加鎖從壓縮包解壓出來的文件尤其容易觸發(fā)。解決右鍵點擊 Setup.chm選擇“屬性”在底部“解除鎖定”前打勾再打開就能看到內容。這個文件里對 10.2 支持的 Oracle 補丁號寫得非常明確排錯時多翻翻能少走很多彎路。5.5 現象sdesetup 失敗日志顯示 ORA-00955: name is already used by an existing object原因數據庫里已經存在同名的 SDE schema比如之前裝過一次沒卸載干凈或者有人手工建過 sde 用戶。解決確認不是線上數據后用 sysdba 登錄執(zhí)行DROP USER SDE CASCADE;先把舊 schema 清干凈再重新跑 sdesetup。注意這個操作會把 SDE schema 下所有空間數據字典一并刪除執(zhí)行前確認這個庫不是生產庫。6. 裝完怎么驗證“真活著”三步確認一個庫能不能進生產6.1 三步驗證SQL 查表、sdemon 查服務、ArcCatalog 建連接很多新手裝完只看到“安裝完成”界面就以為大功告成其實 ArcSDE 部署里最怕的是“裝了但用不了”。我給自己定的規(guī)矩是任何一臺服務器配完 ArcSDE必須走完下面三步才算交付。第一步在數據庫側確認。用 sqlplus 登錄 sde 用戶執(zhí)行下面這句:SELECT COUNT(*) FROM sde.sde_layer;COUNT返回大于 0 就說明建庫成功如果這張表不存在或者報權限錯誤直接說明前面的 sdesetup 沒跑干凈。第二步在服務側確認。命令行跑sdemon -o status -i esri_sde看到狀態(tài)行為 Running且進程沒有反復重啟服務側就算通過。第三步在客戶端確認。打開 ArcGIS Catalog添加數據庫連接填上 Oracle TNS 服務名和 sde 用戶的密碼測試連接成功后新建一條要素類再刪掉確認寫讀都通。6.2 日志和端口出事時先看這兩個地方ArcSDE 的日常維護大部分時間花在日志分析上。服務端日志默認在安裝目錄的logs文件夾下文件名類似sde_esri_sde.log連接失敗時這里會有明細。Oracle 側的alert_SID.log也要看ArcSDE 在 Oracle 里執(zhí)行 DDL 或存儲過程失敗時數據庫日志里的信息往往比 ArcSDE 日志更接近根因。端口方面老版本 SDE 用 5151/tcp直連模式不走這個端口走 Oracle 的 1521/tcp。經常有人配了防火墻只開 5151直連卻連不上。判斷方法直連模式下用tnsping orcl測通 Oracle 監(jiān)聽通了就說明網絡鏈路沒問題問題在客戶端配置服務模式下用telnet 服務器IP 5151判斷端口通不通。6.3 最后一次交付時的習慣記憶很深的一次項目交付客戶那邊所有驗證都過了第二天說 ArcGIS Server 發(fā)布服務時偶爾報超時。查了兩小時最后發(fā)現是服務器上有多個 Oracle 客戶端版本PATH 順序不對導致 ArcGIS Server 加載了舊版 OCI。從那以后我每次部署完都要加做一次環(huán)境變量核對打開命令行set PATH看一眼 Oracle 的 bin 目錄排在第幾位然后用select * from v$version和select * from sde.sde_version兩條 SQL 鎖死數據庫版本和 SDE 版本的一致性這一套流程不走完絕不放服務器進生產。這算是我這些年被磨出來的一個強迫癥雖然蠢但每次都能把人從翻車邊緣拉回來。希望幫到你。ArcSDE 10.2 回避點補充如果你在 64 位 Windows 上裝好后直連始終報 ORA-12154先用echo %TNS_ADMIN%確認環(huán)境變量指向了正確的 tnsnames.ora 目錄再驗證 Oracle 客戶端下的sqlplus能不能登錄到目標庫。記住一個鐵律——ArcSDE 能不能連上永遠是 Oracle 客戶端先能連上才有可能這個順序反了就永遠在排查死胡同里打轉。本文還有配套的精品資源點擊獲取