ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

ArcSDE 10.2 在 Oracle 10g/11g 上的安装配置与排错实战

ArcSDE 10.2 在 Oracle 10g/11g 上的安装配置与排错实战 简介ArcSDE 10.2 for Oracle 10g/11g 安装包面向 GIS 管理员、二次开发人员及需要在 Windows 环境中部署 ArcGIS 与 Oracle 地理数据库的运维人员解决海量空间数据共享、版本管理与多用户并发访问等问题。压缩包共 14 个文件约 77.88 MB内含 4 个 exe、2 个 msi 安装程序2 个 cab 数据组件2 个 chm 帮助文档以及 ini 配置和 htm 安装说明等配套文件分别覆盖 Oracle10g 与 Oracle11g 两个数据库版本。已有 992 人浏览学习。通过这套安装资源读者可完成 ArcSDE 服务端与客户端组件的基本安装准备并借助 chm 与 htm 材料了解配置要点结合描述中版本表、数据访问、索引优化、备份恢复与故障排查等知识点可快速建立从数据库环境准备到 GIS 服务发布的技术认知适合作为 Windows 平台上 Oracle 地理数据库环境搭建的参考包。1. ArcSDE 10.2 安装包Oracle 10g/11g 的 GIS 中间件到底解决什么问题拿到 ArcSDE 10.2 的 Oracle 10g/11g 安装包第一件事不是双击 setup.exe而是先搞清楚它要装到哪里、解决什么问题。做 GIS 项目的人第一次接触 ArcSDE十有八九会把它当成一个独立数据库这个误解在安装阶段最容易暴露。ArcSDE 本身不存数据它是套在 Oracle 外面的空间数据中间件把点线面这类空间对象翻译成 Oracle 能管理的表结构和空间索引再交给 ArcGIS 桌面端或服务端访问。这套安装包按 Oracle 10g 和 11g 分成两个目录文件结构几乎一样但数据库端参数和兼容性细节差别不小。下面按「环境检查 → 服务端安装 → 参数配置 → 排错 → 验证」的路径走一遍讲清从解压到上线能用的完整过程。适合正在搭 GIS 数据服务、准备把空间数据迁到 Oracle 的从业者新手能照步骤跟熟手可以看第 4、5 章的参数边界和踩坑记录。2. 安装前必做的 Oracle 环境检查字符集、监听和 sde 用户装过几套 Oracle 环境的从业者都知道数据库端的状态决定了 ArcSDE 能走多远。ArcSDE 创建地理数据库时要在 Oracle 里生成一批元数据表和视图期间要反复连接、授权、建视图任何一项配置不对报错信息都像黑匣子一样不给明确线索。所以动手装之前先做三件事确认安装包版本对应、核对字符集、验证监听连通这三件事做完能省掉后半程一大半的回头路。2.1 为什么 10g 和 11g 的安装包要分开Oracle 10g 和 11g 在连接字符串写法、实例识别方式和动态性能视图上有明显差异。ArcSDE 安装时不是简单地把文件拷贝进 Oracle而是要执行一组数据字典构建脚本脚本里带了版本判断逻辑用来决定创建哪一套元数据表、用哪种方式注册空间参考系。厂商把安装包拆成两个目录就是为了让这套判断逻辑和数据库实际版本严格对应。实际装的时候最容易翻车的做法是用 11g 的安装包去连一个 10g 的库。表面上看 setup.msi 一样能装完但跑到 sdesetup 初始化数据库那一步经常会抛 ORA-00942表或视图不存在或者 PLS-00306调用参数数量或类型错误。这两个报错字面上跟 SDE 没关系查日志才发现是版本脚本不匹配。常见做法是拿到安装包先把两个目录的 setup.ini 各打开扫一眼确认当前要装的库是哪个版本再决定用哪一份。如果有多个环境10g 和 11g 目录分开存放、分开记录校验值避免后续排错时拿错包重试浪费半天。2.2 字符集与监听配置先跑这三个 SQL字符集问题有个特点安装阶段不报错上线后数据乱码才被发现。ArcSDE 在 Oracle 里建空间表时会把几何对象的坐标系信息和元数据写入表结构如果 Oracle 端字符集和客户端环境不一致后期通过 ArcGIS 加载要素类的属性字段时中文内容会变成一串问号或乱码。推荐直接看数据库侧的配置以 DBA 身份执行下面这段 SQL-- 查看数据库字符集与国家字符集 SELECT parameter, value FROM nls_database_parameters WHERE parameter IN (NLS_CHARACTERSET, NLS_NCHAR_CHARACTERSET);逻辑说明nls_database_parameters 保存的是数据库创建时定下的字符集参数查询结果里 NLS_CHARACTERSET 是关键。看到 AL32UTF8 是最理想的状态意味着库支持完整的 Unicode 编码看到 ZHS16GBK 也能用但后续所有客户端连接串里的字符集设置必须跟着它走不能一边是 GBK 一边是 UTF-8。参数说明这两个参数在库创建后通常无法直接修改真碰到不一致的情况可行方案是导出数据重建库或者用支持字符集转换的迁移工具而不是在 ArcSDE 侧硬扛。检查完字符集顺手验证监听# 在能访问 Oracle 的机器上测试网络连通 tnsping ORCL如果 tnsping 返回 OK说明 tnsnames.ora 里的服务名解析和监听都正常。这步通过后再继续安装可以过滤掉一大半“装完之后连不上”的隐患。2.3 安装包文件清单setup.exe、setup.msi 和 Data1.cab 的关系解压后目录里有几个文件第一次接触的人容易纠结“到底该双击哪个”。先看一张清单文件作用处理方式setup.exe图形化安装引导入口正常情况下直接双击这个setup.msiWindows Installer 安装包静默部署或域环境批量安装时配合 msiexec 使用instmsi3.exeWindows Installer 补丁程序由 setup.exe 自动调用不需要手动执行Data1.cab安装数据归档文件安装程序运行时自动读取不要手动解压或改内容setup.ini安装参数配置文件记录安装类型、路径等默认参数可被 msiexec 引用Setup.chm离线帮助文档安装向导里看不懂的选项先查这里Install.htm安装说明页面浏览器打开看前置要求这里容易踩的坑是把 setup.msi 当成主安装程序双击之后又提示无法找到 Data1.cab。原因是 MSI 安装包需要和 Data1.cab 在同一个目录里并且路径不能含中文或特殊字符。安装包里的「新建文件夹」目录名本身就带中文如果整个解压路径里有中文setup.exe 会在读取 cab 归档时出现路径解析问题。常见做法是先把整个安装包解压到纯英文短路径比如 C:\temp\sde_full再执行 setup.exe。Windows 系统的当前用户名为中文时也会遇到同样问题这条经验在后面安装流程里会再次用到。3. 服务端安装全流程从双击 setup.exe 到 sdemon 起服务前面的环境检查都过了下面进入正式安装。这一章的操作分为四步准备好 sde 用户和表空间、跑图形向导、执行 sdesetup 初始化数据库、最后启动服务。每一步都有一个关键参数需要盯住顺序最好不要颠倒。3.1 前置准备Oracle 端建用户、建表空间ArcSDE 安装并不只是装一个程序它要在 Oracle 里以 sde 用户的身份建立整个空间数据字典。所以先得在数据库里创建一个专用账号和表空间。-- 用 DBA 权限执行创建表空间和 SDE 用户 CREATE TABLESPACE sde_data DATAFILE D:\ORADATA\ORCL\SDE_DATA01.DBF SIZE 2G AUTOEXTEND ON NEXT 512M MAXSIZE UNLIMITED; CREATE USER SDE IDENTIFIED BY sde_pwd DEFAULT TABLESPACE sde_data QUOTA UNLIMITED ON sde_data; GRANT CONNECT, RESOURCE, CREATE TABLE, CREATE VIEW, CREATE SEQUENCE, CREATE PROCEDURE TO SDE; GRANT UNLIMITED TABLESPACE TO SDE; GRANT DBA TO SDE;逻辑说明表空间单独建一个是为了不让空间数据和业务数据混在一起影响性能。SDE 用户有了 DBA 角色后续创建版本视图、空间索引和调用存储过程时才不会因为权限不足中断。参数说明DATAFILE 路径按实际 Oracle 数据文件目录改SIZE 2G 是初始大小AUTOEXTEND 设置为自动扩展适合数据量增长不确定的场景。如果磁盘空间紧张可以把初始大小调小到 512M扩展上限不设死或者按公司 DBA 规范指定 MAXSIZE。注意一个细节Oracle 11g 使用服务名进行连接时sdesetup 的 -s 参数要传数据库的 SERVICE_NAME 而不是 SID这一点等到执行初始化命令时再确认。3.2 双击 setup.exe 后的选项怎么选在解压目录执行 setup.exe安装向导里会问三件事安装类型、安装目录、连接类型信息。常见做法是选完整安装包含 ArcSDE 服务和客户端命令目录保持默认或者改到 D:\ArcGIS\ArcSDE但同样不能有中文。连接信息这一步要注意向导会让填 Oracle 实例或 Oracle 客户端连接信息填 tnsnames.ora 里配置好的服务名。如果本机没有装 Oracle 客户端向导会在安装过程中提示找不到 ORACLE_HOME这时需要先装一个 Oracle Instant Client并把它的 bin 目录加到 PATH 环境变量里。很多第一次装的人在这里卡住以为 ArcSDE 安装包自带 Oracle 驱动。实际上这套 10.2 版本依赖本机 Oracle 客户端组件来做网络连接装完 ArcSDE 后还要把 ORACLE_HOME、ORACLE_SID 两个环境变量在系统级别设置好否则后面跑命令会提示找不到 OCI 库。# 示例环境变量按实际安装路径填写 setx ORACLE_HOME C:\oracle\product\11.2.0\client /M setx ORACLE_SID ORCL /M这个变量写完后要开新的命令行窗口再执行后续命令setx 不会对当前会话生效。具体值以本机 Oracle 客户端路径和数据库实例名为准别照抄。3.3 用 sdesetup 初始化地理数据库安装向导只是把程序和文件放好真正在 Oracle 里生成空间数据字典的是 sdesetup 命令。进入安装目录下的 bin 目录执行# 进入 ArcSDE 命令目录 cd C:\ArcGIS\ArcSDE\sqlexe\bin # 初始化地理数据库 sdesetup -o install -d oracle11g -p sde_pwd -u sde -s ORCL -i 5151逻辑说明-o install 表示执行安装行为sdesetup 会连接 Oracle、在 SDE 用户下创建地理数据库所需的一系列表和存储过程这个过程持续几分钟日志输出会显示每一步的进度。参数说明-d oracle11g 指定数据库类型Oracle 10g 的机器上要写 oracle10g-p 是 SDE 用户的密码和 3.1 里建的用户保持一致-s ORCL 对应 tnsnames.ora 里的服务名或 SID-i 5151 是 ArcSDE 服务端口保持默认即可。如果服务器上 5151 被占用换一个未被占用的端口但要记牢后面所有客户端连接都要用这个端口。如果输出末尾出现类似 success 的提示说明数据字典创建完成。此时再执行# 创建 ArcSDE 系统服务开机自启 sdeservice -o create -d oracle11g -i 5151 -s ORCL -p sde_pwd # 启动服务 sdemon -o start -p sde_pwd -i 5151 # 查看服务状态 sdemon -o status -i 5151逻辑说明sdeservice 负责注册 Windows 服务这样服务器重启后 ArcSDE 能自动运行sdemon 是日常启停和查看状态的命令。参数说明-o create 后面的 -d、-i、-s 要和 sdesetup 保持一致如果填错服务虽然创建成功但启动后连不上库。sdemon 的 -p 参数每次执行都需要日常运维我习惯每次显式传避免把密码写进配置文件的额外风险。提示sdesetup 初始化日志会打满整个窗口别急着清屏报错关键信息往往在最后几行。到这一步ArcSDE 服务已经起来了。用 ArcGIS 桌面端添加数据库连接时服务器填安装机器名或 IP服务填 5151数据库填 sde 用户就能读到空间数据。后续发布 WFS、WMS 服务时ArcGIS Server 也走这条连接读取 Oracle 里的图层。4. 配置与性能边界dbtune、连接池和多版本编辑把服务跑起来只是开始。空间数据在 Oracle 里能不能稳定支撑多用户并发编辑、大图层查询是不是够快取决于安装之后的配置。这章写我通常会调整的三个层面存储参数、连接池参数、以及 Oracle 侧的配合项。4.1 dbtune 存储参数控制空间表存到哪里ArcSDE 在 Oracle 里建图层时默认有一套存储参数定义业务表、要素表和空间索引分别如何存储、放在哪个表空间、几何列用什么类型。这套参数维护在 dbtune 配置中安装时被读入地理数据库创建新图层时会去读取。常见做法是把经常一起查询的图层对应的表空间分开。比如基础底图图层放在只读表空间业务编辑图层放在读写频繁的表空间减少磁盘竞争。修改方式有两种一种是在 ArcGIS 桌面端创建要素类时指定配置关键字另一种是改 dbtune 里的参数后重新应用。调整 dbtune 时重点看这几项参数作用建议B_STORAGE业务表存储参数按表空间容量设初始分区和扩展策略F_STORAGE要素表存储参数空间对象为主建议开启自动扩展S_STORAGE空间索引表参数尽量分到独立表空间避免与数据争 IOGEOMETRY_STORAGE几何存储类型Oracle 环境选 SDO_GEOMETRY 或 ST_GEOMETRY参数说明GEOMETRY_STORAGE 的选择是个关键决策。SDO_GEOMETRY 走 Oracle Spatial 的路线能和 Oracle 自身的空间索引、分区特性配合ST_GEOMETRY 是 ArcSDE 的几何类型做精确编辑时表现更稳。数据互操作场景里如果源数据大量用了 Oracle Spatial 的算子建议保留 SDO_GEOMETRY。需要提醒的是改完 dbtune 只对新建图层生效已有图层的存储参数不会自动变。4.2 连接池与会话限制ArcSDE 服务端默认维护一个连接池允许多个客户端并发访问。连接池太小几十个用户的编辑场景就会报连接超时太大Oracle 的会话数和内存被拖垮数据库服务本身先倒。服务配置里需要关注的是 CONNPOOLMAX 和连接超时参数。常见做法是把连接池上限调上来但调之前先看 Oracle 的 processes 参数-- 查看 Oracle 当前允许的最大进程数 SELECT name, value FROM v$parameter WHERE name processes;逻辑说明ArcSDE 每维持一个连接Oracle 侧就要占用一个会话。如果 Oracle 的 processes 上限是 300ArcSDE 的连接池调到 600 没有意义反而会制造大量排队和报错。参数说明我一般按 Oracle processes 的六成作为 ArcSDE 连接池上限剩下的会话留给 DBA 维护和业务系统。连接等待时间默认值偏短编辑场景可以适当调大让客户端在事务间隙不被频繁踢下线。4.3 多版本编辑与 Oracle 事务的配合ArcSDE 的多版本机制允许同一份空间数据在不同编辑会话里各自修改互不阻塞。它依赖 Oracle 的事务能力和撤销表空间所以日志模式、撤销段配置会直接影响编辑稳定性。实操上有几个习惯版本化图层的每次编辑事务不要拖太久长事务会撑大撤销表空间Oracle 出现 ORA-01555快照过旧时优先查撤销表空间大小定期运行压缩版本Compress把版本间的增量合并回基线表否则版本表行数膨胀查询会越来越慢备份时要把版本表和业务表放到同一个一致性备份里单独备份会破坏版本链。这一章记住一个原则连接池参数不是越大越好dbtune 不是装完就不能动版本压缩要定期做。这三样做到位系统才谈得上在生产环境稳定跑。5. 排查实战ArcSDE 10.2 在 Oracle 上最常翻车的五个问题把安装过程遇到的报错集中整理成五条每条都按「现象 → 原因 → 解决」来写排错时对号入座就行。5.1 创建地理数据库报错ORA-01034 和 ORA-27101现象sdesetup 执行到一半弹出 ORA-01034: ORACLE not available或者提示无法解析实例名。原因多半是环境变量 ORACLE_SID 没设置或者设置成了别的实例名sdesetup 找不到要连接的 Oracle 实例。另一个常见原因是本机 Oracle 客户端版本与数据库版本跨度太大导致 OCI 库加载失败。解决先确认数据库确实在运行再检查系统环境变量。命令行执行 echo %ORACLE_SID% 看输出如果为空或与目标库不一致用 setx 修复后再开新窗口执行 sdesetup。常见做法是连数据库的 DBA 先确认 service_names 和实例名避免搞混。5.2 客户端连不上 ArcSDE5151 端口不通现象ArcGIS 桌面端添加数据库连接时报连不上测试连接失败。原因三种情况叠加最常见Windows 防火墙拦截了 5151 端口ArcSDE 服务没起来tnsnames 里服务名不对。解决第一步在安装机器上执行 sdemon -o status -i 5151 看服务状态第二步在客户端机器执行 telnet 服务器IP 5151 看端口通不通第三步去防火墙规则里放行 5151 端口。按这个顺序排查十分钟内能定位问题。顺序很重要服务没起来先查端口是浪费时间端口不通先改 tnsnames 也是白改。5.3 中文属性乱码现象数据能显示能编辑但中文属性字段显示为问号或乱码。原因字符集链路不一致。比如 Oracle 数据库是 ZHS16GBK客户端 NLS_LANG 设成了 AMERICAN_AMERICA.AL32UTF8ArcSDE 读取时就出现编码错位。解决把客户端的 NLS_LANG 设置为和数据库一致的字符串。数据库是 ZHS16GBK则设置 NLS_LANGSIMPLIFIED CHINESE_CHINA.ZHS16GBK数据库是 AL32UTF8则客户端对应 UTF8。改完重启 ArcSDE 服务并断开所有客户端重新连接。5.4 服务启动后马上退出现象sdemon -o start 提示服务已启动但几秒后进程消失客户端连接全部失败。原因最常见的是连接参数错误或者密码带特殊字符。sdeservice 创建服务时把连接串写进了服务配置密码里有 或 # 这类符号时命令行解析会截断。解决先查看 ArcSDE 安装目录下 etc 里的日志文件重点看 giomgr.log如果是密码特殊字符导致的重新 sdeservice -o delete 删除服务把 SDE 用户密码改为纯字母数字后重新 create 和 start。后来我改成只允许字母数字的密码策略这类问题再没出现过。5.5 安装向导找不到 Data1.cab现象双击 setup.msi 或 setup.exe 后提示找不到 Data1.cab安装中断。原因安装包所在路径含中文或过长或者安装包本身放在桌面、下载目录这种被系统权限管控的位置安装程序无法读取归档。解决把整个解压目录移动到纯英文短路径比如 C:\temp\sde_full并给当前用户完整读取权限后重新执行 setup.exe。别手动打开 Data1.cab也别单独运行 instmsi3.exe这两个文件都由安装程序自动处理。6. 装完怎么验收用 sdelayer 摸清数据字典迁移前的兼容性检查6.1 一条命令验证图层健康度sdelayer 是安装目录里容易被忽略的实用工具装完服务后我习惯先用它确认空间图层可读。命令行进入 bin 目录执行cd C:\ArcGIS\ArcSDE\sqlexe\bin sdelayer -o info -l test_layer,test_rel -i 5151 -u sde -p sde_pwd -s ORCL逻辑说明-o info 列出图层类型、空间参考、几何列、行数等元数据能跑通说明从 Oracle 到 ArcSDE 再到命令行客户端整条链路都正常。参数说明-l 后跟图层名和关联表名中间用逗号分隔-s 是服务名-i 是端口-u 和 -p 是 sde 用户凭据。如果记不清现有哪些图层用 sdelayer -o list 列出全部图层再挑一个做 info 验证。6.2 升级迁移前的一个兼容性习惯业务系统上线后总会面临 ArcSDE 升级或 Oracle 版本迁移。常见做法是迁移前在测试库跑一遍 sdesetup -o upgrade先验证数据字典脚本在目标版本上能完整通过。这一步能提前暴露存储参数不兼容的问题避免生产环境切换时才发现。另外检查所有图层的空间参考 ID。如果图层用的是自定义坐标系目标库的坐标参考表里必须预置相同的 SRID 定义否则迁移后的图层打开会提示坐标系未知。这是个容易被忽略的细节通常要连同元数据一起迁移才能保持完整。从那以后我每次装完 ArcSDE 都强制走一遍sdesetup 初始化后立即创建一个测试图层跑一次 sdelayer -o info再重启一次 sdemon。这套流程看着简单却能过滤掉八成以上的配置问题大多数“莫名其妙连不上”其实都是初始化那一步埋下的雷。希望这套检查习惯对你有用。本文还有配套的精品资源点击获取
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进