简介:ArcSDE 10.2 for Oracle 10g和11g安装包,面向GIS管理员、数据库运维人员及ArcGIS平台使用者,用于在Windows环境下打通ArcSDE与Oracle数据库的集成通道,实现海量空间数据的高效存储、版本管理与多用户并发访问,支撑企业级GIS基础平台的搭建,是构建稳定空间数据服务环境的关键资源。压缩包内共14个文件,以exe安装引导、msi组件包和cab数据文件为主,另附chm帮助文档、ini配置样例及htm说明页面,整体大小约77.88MB,涵盖Oracle 10g与11g两套独立的安装目录,便于按版本选用。包内提供完整的ArcSDE服务端部署材料,含安装引导程序、运行依赖组件及数据包,可用于离线安装;帮助文档与说明页面则对安装和配置要点展开提示,能有效减少部署中的排错成本。目前已有989人学习下载,适合具备基础Oracle运维经验、正计划部署ArcSDE地理数据库的技术人员参考。
1. 拿到 ArcSDE 10.2 for Oracle 10g、11g 安装包,先别急着双击 setup
ArcSDE 10.2 for Oracle 10g/11g 安装包在 GIS 运维圈子里是个不太讲情面的东西:它不会在开始菜单里给你一个漂亮面板,安装时也不会自动把 Oracle 那套空间类型全部建好。许多人以为把安装包跑完,数据库就能直接连上 ArcGIS,结果不是报 ORA-00942,就是监听服务无法启动、ArcCatalog 里始终看不到连接。下面我按自己处理过的部署流程来拆开讲,先讲清楚这个安装包到底装了什么,再给出一套可复现的建用户、初始化、配置命令,最后把最容易翻车的五个坑列在明处,适合正在做地理数据库迁移,或者准备把 ArcGIS 10.2 落到 Oracle 11g 上的同学。
2. 安装前必须想清楚的三件事:安装包角色、Oracle 兼容性与 sde 用户权限
2.1 你手里的安装包装着什么:它不是数据库,是 Oracle 里的一个 SDE 引擎
ArcSDE 的全称是 Spatial Database Engine,它本身不保存数据,真正存数据的是 Oracle 的表空间。ArcSDE 10.2 for Oracle 10g/11g 安装包部署完之后,装到机器上的是一套 C/C++ 写的空间处理组件、一堆命令行工具和一个 Oracle schema 的初始化逻辑。判断安装是否成功的标志不是安装目录能打开,而是 Oracle 里出现了 SDE 这个用户,并且该用户下面有 LAYERS、TABLE_REGISTRY 这类系统表,以及 ST_Geometry 类型和配套函数。
安装包里的命令工具比较固定,至少在 10.2 时代我常用的就是下面这几个:
| 命令 | 作用 | 什么时候用 |
|---|---|---|
| sdesetup | 初始化、升级地理数据库 | 第一次部署、版本升级 |
| sdelayer | 创建空间图层 | 建测试图层、业务图层 |
| sdetable | 创建属性表并注册进地理数据库 | 业务表关联空间数据 |
| sdeexport / sdeimport | 数据的导出与导入 | 数据迁移、灾备恢复 |
| sdemon | 启动、停止、监控 ArcSDE 服务进程 | 服务模式部署 |
这些命令不在系统 PATH 里,安装完成后必须手动指定 SDEHOME。Windows 下一般在C:\ArcGIS\ArcSDE\bin,Linux 下一般在/opt/arcgis/arcsde10.2/bin。建议安装完成后先跑一个验证,把系统环境变量固定好,因为 ArcGIS Server 作为服务运行时,继承的是服务账户的环境变量,不是你手工 export 的临时变量。这个问题我后面还会再遇到。
ArcSDE 在 10.2 时代已经不是独立许可证产品,但在安装介质里仍然保留了独立安装入口。常见做法是把它装在应用服务器上,并不是每台客户端电脑都装。空间存储有两种选择:Esri 的 ST_Geometry 类型,和 Oracle 的 SDO_Geometry。我一般直接用 ST_Geometry,因为它的空间索引和版本化支持更贴近 ArcGIS 的调用方式,还不用额外确认 Oracle Spatial 的授权,少一层商务风险。后面 sdesetup 初始化时会用 -E 参数把类型指定进去。
2.2 Oracle 10g 和 11g 与 ArcSDE 10.2 的配合逻辑:选对版本和字符集
动手安装前,先把 Oracle 小版本看清。很多人只看大版本是 10g 还是 11g,忽略补丁版本,结果初始化时遇到各种奇怪的 ORA 错误。先执行一句 SQL,确认当前实例的准确信息:
SELECT banner FROM v$version;我的选型经验是:10g 环境至少打到 10.2.0.5,11g 环境尽量用 11.2.0.4。11.2.0.1 这个版本在 PL/SQL 编译事务上踩过太多坑,ArcSDE 初始化会创建大量存储过程、触发器和类型方法,补丁版本太老时偶发 ORA-04031 共享池过小、ORA-08177 等错误,很难判断是 ArcSDE 问题还是 Oracle 问题。如果机构里只能给旧库,不要直接开始装,先把补丁计划写进部署文档。
内存参数也要提前看。ArcSDE 初始化阶段会在 SDE schema 下编译很多包,SHARED_POOL 太小会直接翻车。用下面三条命令检查:
show parameter sga_target; show parameter pga_aggregate_target; show parameter processes;如果 sga_target 低于 1G,建议先调大,尤其是测试库里有其他业务耗内存时。processes 参数我一般直接调到 500,因为后面如果用直接连接,ArcGIS 每个连接都会占用一个 Oracle session,默认 150 基本不够。注意 processes 改动必须写到 spfile 并重启实例,很多人改完不重启,继续初始化,Oracle 实际还是旧值。
字符集是另一个容易被当成玄学的点。ArcSDE 10.2 在 AL32UTF8 库上最省心,ZHS16GBK 也不是不能跑,但如果你计划之后把数据迁移到 Oracle 19c、PostgreSQL 或 SQL Server,GBK 转换会多出一层字符编码风险。先查库字符集:
SELECT value FROM nls_database_parameters WHERE parameter = 'NLS_CHARACTERSET';如果已经是 ZHS16GBK,我不会为了 ArcSDE 去改库字符集,因为那意味着重建整个数据库,业务表接受不了。正确做法是把 ArcSDE 所在机器的客户端 NLS_LANG 统一成 ZHS16GBK,让服务端和客户端一致。后面第 4 章会具体讲字符集配置,这里先记住一条:不要在 ZHS16GBK 库上配 AL32UTF8 客户端去连,多字节字符在小连接池里会乱。
2.3 建 sde 用户和表空间:动手前先落一段可回滚的 SQL
初始化 ArcSDE 前,必须在 Oracle 里准备好 SDE 用户。不建议直接用 SYSTEM 或某个业务用户去跑 sdesetup,因为 ArcSDE 会在该用户 schema 下创建一堆系统对象,如果业务用户兼职,后期版本锁和表冲突会让 DBA 骂人。单独建 SDE 用户和 SDE 表空间,是最低成本的隔离开。
以下 SQL 在 Oracle 11g 上验证过,10g 同样适用,只是文件路径按你的实际环境改:
CREATE TABLESPACE SDE DATAFILE '/u01/app/oracle/oradata/ORCL/sde01.dbf' SIZE 2048M AUTOEXTEND ON NEXT 256M MAXSIZE 32767M SEGMENT SPACE MANAGEMENT AUTO; CREATE USER SDE IDENTIFIED BY "Sde#2024" DEFAULT TABLESPACE SDE TEMPORARY TABLESPACE TEMP QUOTA UNLIMITED ON SDE; GRANT DBA TO SDE;代码逻辑不复杂,但有个地方要特别说明:GRANT DBA TO SDE不是偷懒,是 ArcSDE 10.2 在 Oracle 10g/11g 上的实际需求。sdesetup 不仅要创建 SDE 自己的表,还要创建同义词、操作 SDO 相关视图、在数据字典里登记空间元数据,没有 DBA 角色会在初始化中途报 ORA-00942 或 ORA-01031。如果公司的 Oracle DBA 不愿意给 DBA 权限,至少要手工补上 CREATE SESSION、CREATE TABLE、CREATE PROCEDURE、CREATE SEQUENCE、CREATE TRIGGER、CREATE TYPE、QUERY REWRITE,以及 EXECUTE ON DBMS_LOCK、DBMS_PIPE、DBMS_UTILITY 这些包。但说实话,最小权限方案在 10.2 上维护成本高,初始化阶段常见权限漏配,我自己的经验是测试环境用 DBA,生产环境才和 DBA 讨论收紧。
SQL 执行完成后,再跑一遍检查:
SELECT username, default_tablespace, account_status FROM dba_users WHERE username = 'SDE'; SELECT tablespace_name FROM dba_tablespaces WHERE tablespace_name = 'SDE';这里有一个容易忽略的操作顺序:如果之前已经装过 ArcSDE,并且初始化失败,需要先彻底清掉再重来。清理语句是:
DROP USER SDE CASCADE; DROP TABLESPACE SDE INCLUDING CONTENTS AND DATAFILES;不要在一个半初始化状态的 SDE schema 上直接重跑 sdesetup,系统表之间有外键关联,残留对象比没装更麻烦。这一段属于后悔药,测试环境里非常管用。
3. 把 ArcSDE 10.2 安装包跑成地理数据库:setup 与 sdesetup 的最小操作顺序
3.1 安装介质与图形安装:路径、授权与常见误区
ArcSDE 10.2 的安装介质在 Windows 上是引导式安装,Linux 上是一组安装脚本。第一步不是急着点下一步,而是先把安装路径想好。Windows 下我从来不用默认的C:\Program Files\ArcGIS\ArcSDE,而是改成C:\ArcGIS\ArcSDE;Linux 下放在/opt/arcgis/arcsde10.2。原因是路径里的空格会导致命令行工具的参数解析出问题,尤其在使用 sdemon 时,引号处理会让你排查到怀疑人生。
Linux 解压和安装的常见做法:
mkdir -p /opt/arcgis unzip /opt/media/ArcSDE_10_2_for_Oracle.zip -d /opt/arcgis cd /opt/arcgis/arcsde10.2 find . -maxdepth 1 -type f -name "setup*" -o -name "install*"执行 find 是为了确认介质里的安装入口名称,不同来源的安装包入口名可能不同,不要死记。找到入口后用普通业务用户执行,不要用 root,因为后面 sdesetup 要连接 Oracle,用 root 跑出来的文件属主和进程权限会让 Oracle 客户端无法读取。
安装过程中还会遇到授权问题。ArcSDE 10.2 的授权已经统一走 Esri 的许可体系,如果你手里的是独立安装包,需要准备授权文件或授权码;如果是 ArcGIS Server 介质里的 ArcSDE 组件,则复用 Server 的许可。千万不要在授权没确认前直接进入初始化,那样 sdesetup 可能在建完系统表后因为 license 校验失败,造成残留对象。我见过一个团队授权码写错,业务数据能读不能写,排查了一天才发现是许可问题。
安装完成后的环境变量配置,我一般写成固定一段:
export SDEHOME=/opt/arcgis/arcsde10.2 export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1 export TNS_ADMIN=$ORACLE_HOME/network/admin export LD_LIBRARY_PATH=$SDEHOME/lib:$ORACLE_HOME/lib export PATH=$SDEHOME/bin:$ORACLE_HOME/bin:$PATH这段环境变量里,TNS_ADMIN 比 PATH 更容易被忽略。Windows 上如果机器同时装了 32 位和 64 位 Oracle 客户端,ArcGIS 是 64 位,必须保证它找到的 tnsnames.ora 是 64 位客户端目录下的那一份,否则就会出现 sqlplus 能连而 ArcSDE 连不上的情况。
3.2 先配好 tnsnames.ora 和监听,否则 sdesetup 连一张表都建不了
ArcSDE 连接 Oracle 时走的完全就是 Oracle 客户端的连接路径,不会另开端口。所以最核心的前置工作是 tnsnames.ora 与服务名正确。下面是我常用的一份最小配置:
ORCL = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.20)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = ORCL) ) )HOST 不要写成 localhost,除非你确定 ArcGIS、ArcSDE、Oracle 全在同一机器并且不走网络。生产环境里最好写成数据库服务器的实际 IP,或者写在 /etc/hosts 里能解析的主机名。HOST 配错是监听服务无法启动的头号原因,后面第 5 章还会展开。
tnsnames 配置完毕,别急着跑 sdesetup,先用两条命令验证:
tnsping ORCL sqlplus sde/"Sde#2024"@ORCL <<EOF SELECT 1 AS ok FROM dual; EOFsqlplus 能连上,说明 tnsnames、监听、密码、权限都没问题。如果 sqlplus 找不到或者报错,用绝对路径:
$ORACLE_HOME/bin/sqlplus sde/"Sde#2024"@ORCL这里强调一个 ArcSDE 新手常犯的错:不要在数据库服务器上测通了就算完。ArcSDE 进程跑在应用服务器上,你要在 ArcSDE 所在机器上执行 tnsping 和 sqlplus,测的是那台机器的网络与客户端配置。两台机器之间 1521 端口没放行,你在数据库服务器本地测一万次也测不出来。
3.3 初始化地理数据库:sdesetup -o install 的完整命令与输出判断
环境变量就绪、sqlplus 能连之后,就可以初始化地理数据库了。ArcSDE 10.2 的初始化命令是 sdesetup,常见写法:
cd /opt/arcgis/arcsde10.2/bin ./sdesetup -o install -d ORACLE -T ORCL -u sde -p "Sde#2024" -E ST_GEOMETRY参数说明:
-o install表示执行初始化操作,不是升级也不是卸载。-d ORACLE指定数据库类型为 Oracle。如果你的介质版本较老,或者安装包是不同发行渠道,可能要用-d ORACLE10G或-d ORACLE11G。遇到 invalid database type 报错时,先跑./sdesetup -o install -?看帮助,以实际支持值为准。-T ORCL是 tnsnames.ora 里配置的服务名。-u sde和-p是 SDE 用户的用户名和密码。-E ST_GEOMETRY指定使用 Esri 的 ST_Geometry 类型。
执行后不要急着关终端。初始化过程要建系统表、编译包、创建空间类型和索引方法,Oracle 10g 老机器上跑几分钟很正常。终端没有输出不代表卡死,可以另开一个窗口观察:
ps -ef | grep sde初始化成功后会返回类似 INFO 的结束信息。这时用 sqlplus 查一下 SDE 系统表是否真正落盘:
SELECT object_name, object_type FROM user_objects WHERE object_name IN ('LAYERS', 'TABLE_REGISTRY') ORDER BY object_name;如果能看到这两张表的记录,说明地理数据库已经建好。失败时不要只看屏幕,去安装目录的 etc 下找以 sde 开头的日志文件,一般是 sdesetup.log 或 sde_setup.log,里面会记录完整的 ORA 错误。屏幕输出经常被截断,日志才是完整的。
4. 连接参数决定生死:监听、字符集与直连配置的默认值陷阱
4.1 监听器真的不是 ArcSDE 自己开的:listener.ora 与 lsnrctl 的正解
ArcSDE 只依赖 Oracle 的监听器,自己不开端口。很多人在排查时误以为 ArcSDE 装完会监听一个 5151 端口,其实那只是 ArcSDE 服务模式进程的对外端口,和 Oracle 数据库的 1521 是两回事。数据库连接段始终走 1521,所以先把监听器配好。
下面是一份静态注册风格的 listener.ora 片段:
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.20)(PORT = 1521)) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = ORCL) (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1) (SID_NAME = ORCL) ) )配置好后用 lsnrctl 检查:
lsnrctl status lsnrctl services如果监听服务无法启动,先看日志里报的是 TNS-12541 还是 TNS-01150。绝大多数情况是 listener.ora 的 HOST 写成了无法解析的主机名。解决方法是把 HOST 改成实际 IP,或在/etc/hosts里把主机名映射到内网 IP,然后:
lsnrctl reload注意 reload 只能让配置生效,如果监听进程已经挂掉,还是需要 stop 后 start。我在现场的习惯是按顺序排查:先tnsping ORCL,再sqlplus sde/pwd@ORCL,最后才跑 ArcGIS 连接测试。这样能把问题限定在监听、客户端配置或权限三层里。
4.2 字符集不一致时的乱码现象:用 AL32UTF8 还是 ZHS16GBK
字符集问题是 ArcSDE 部署里最容易被归因成“玄学”的一块。现象通常有两种:第一,ArcCatalog 里要素类的属性表中文乱码;第二,通过 SQL 写入空间表时提示字符串转换错误,但同样数据在 SQL Developer 里写就是正常。根因只有一个:Oracle 服务端字符集和 ArcSDE 客户端进程的 NLS_LANG 不一致。
先查两端状态:
SELECT value FROM nls_database_parameters WHERE parameter = 'NLS_CHARACTERSET'; SELECT userenv('language') FROM dual;第一条返回服务端字符集,第二条返回当前会话的客户端语言环境。如果服务端是 AL32UTF8,客户端返回SIMPLIFIED CHINESE_CHINA.AL32UTF8,那没问题;如果服务端是 ZHS16GBK,客户端也要对应改成SIMPLIFIED CHINESE_CHINA.ZHS16GBK。
Linux 上设置方式:
export NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBKWindows 上不要只在命令窗口里 set,ArcGIS Server 是后台服务,环境变量要写到系统环境变量里,或者直接写到注册表对应 Oracle 客户端的 NLS_LANG。我处理过一个案例:DBA 在数据库服务器上把库字符集从 ZHS16GBK 迁成 AL32UTF8,ArcGIS 客户端还停留在 GBK,结果属性字段里凡是超过两个字节的汉字全部变成问号。最后统一改成 AL32UTF8 才恢复。
如果你是新库,我直接建议用 AL32UTF8。ArcSDE 10.2 的系统表结构在 UTF8 下最稳定,中文表名、中文字段别名、拓扑信息这些都能正确保存。GEOMETRY 数据本身不存在字符集问题,但属性文本绕不开。
4.3 直连模式与服务模式:10.2 时代我为什么推荐直连
ArcSDE 10.2 和 Oracle 配合有两种连接方式。直连模式下,ArcGIS 通过 Oracle 客户端直接连接 SDE schema,不需要在应用服务器上维护 ArcSDE 服务进程;服务模式下,需要先启动 sdemon,ArcGIS 客户端连接到 sdemon 的 5151 端口,再由它转发到 Oracle。
直连模式的优点是少一个进程,少一个黑匣子。Oracle 重启后,ArcGIS 只要能重连监听器,就可以恢复工作,sdemon 不存在启动顺序问题。缺点是每个 ArcGIS 连接都会占用一个 Oracle session,客户端机器必须装 Oracle 客户端。如果你只有三五台 ArcGIS Server,我强烈建议直连。
直连模式下,Oracle 的 processes 参数要提前留够:
show parameter processes; show parameter session_cached_cursors;如果 processes 太低,修改后要重启数据库:
ALTER SYSTEM SET processes = 500 SCOPE = SPFILE;这条语句常见翻车点在于:SCOPE 写的是 SPFILE,只对下次启动生效,很多人执行完马上继续压测,发现连接数还是 150,认为是命令没生效。实际上 Oracle 已经记录了参数,必须重启实例。
服务模式也有适用场景:客户端很多、网络环境复杂、需要集中管理空间数据库连接池时,用 sdemon 更合适。启动命令:
$SDEHOME/bin/sdemon -o start -u sde -p "Sde#2024" -d ORACLE -T ORCL $SDEHOME/bin/sdemon -o status -u sde -p "Sde#2024"但服务模式的开机自启和进程监控需要额外处理,否则服务器一重启就会遇到“数据库活着、ArcSDE 进程没起来”的尴尬。这个我在下一章展开。
5. 避坑记录:安装后连不上 Oracle 的 5 个翻车现场与排查路径
5.1 ORA-00942 表或视图不存在:初始化提前中止,后患留在系统表里
现象:执行 sdesetup -o install 时,终端中途报 ORA-00942: table or view does not exist,随后退出。
原因:最常见的是-u参数并没有指向 SDE 用户,而是用了一个普通业务用户跑初始化。ArcSDE 初始化要访问 SDE 用户下的系统表,普通用户没有访问权限,查询任何 SDE 对象都会报 00942。第二种情况是之前有失败残留,第二次运行时 sdesetup 以为系统表存在,实际缺依赖表。
解决:确认命令里-u sde而不是-u system。如果有残留,必须先彻底清理:
DROP USER SDE CASCADE; DROP TABLESPACE SDE INCLUDING CONTENTS AND DATAFILES;然后重建用户、授权,再重跑 sdesetup。不要抱着侥幸心理在一个坏掉的 SDE schema 上重复执行,系统表之间存在外键和同义词依赖,半初始化状态比完全没装更难救。
5.2 ArcGIS 连接失败但 SQLPLUS 能连接:问题可能卡在监听与 TNS_ADMIN
现象:在数据库服务器上用 sqlplus 连接 ORCL 正常,但同一台机器上 ArcCatalog 或 ArcGIS Server 填同样信息报连接超时或监听服务无法启动。
原因:ArcGIS 10.2 是 64 位进程,它找的 Oracle 客户端和你在命令行里用的 sqlplus 可能不是同一套。Windows 机器上同时存在 32 位和 64 位 Oracle 客户端时,命令行 PATH 先命中 32 位,ArcGIS 却只认 64 位 TNS_ADMIN。也有可能是 ArcGIS Server 作为 Windows 服务运行时,读取的是系统环境变量而不是你登录账号的环境变量。
解决:先确认 ArcGIS 进程用到的 TNS_ADMIN 具体指向哪里。Windows 下在命令行执行:
echo %TNS_ADMIN%然后确认在这个目录下的 tnsnames.ora 里,ORCL 是否配置了正确的 HOST 和端口。再用与 ArcGIS 相同位数的客户端工具测试:
%ORACLE_HOME%\bin\tnsping ORCL如果 tnsping 不通,先检查监听服务是否真的在运行,再检查 listener.ora 的 HOST 是否写了 127.0.0.1。我之前遇到过一台机器 listener.ora 全部写的 localhost,本机 sqlplus 能连,远程 ArcGIS 连接当然全失败。把 HOST 改成内网 IP 后lsnrctl reload,问题当场解决。
5.3 ORA-29875 空间索引生成失败:ST_Geometry 类型没装全
现象:sdesetup 初始化时显示成功,但 ArcCatalog 里创建要素类或空间索引时,Oracle 报 ORA-29875: failed in the execution of routine SDE.ST_GEOMETRY_INDEX_METHOD。
原因:ArcSDE 的 ST_Geometry 类型方法对象没有全部编译成功。常见场景是初始化时 SHARED_POOL 太小,PL/SQL 包在编译阶段被 ORA-04031 中断,sdesetup 没把错误当致命错误,继续跑完了。也可能是 SDE 用户的 CREATE TYPE 或 CREATE PROCEDURE 权限缺失。
解决:先查 SDE schema 下是否有 INVALID 对象:
SELECT owner, object_name, object_type, status FROM all_objects WHERE owner = 'SDE' AND status = 'INVALID';如果有无效对象,用 Oracle 自带的脚本重编译:
BEGIN UTL_RECOMP.RECOMP(); END;重编译完成后,再检查 SHARED_POOL_SIZE:
show parameter shared_pool_size;如果偏低,调大并重启:
ALTER SYSTEM SET shared_pool_size = 512M SCOPE = SPFILE;如果无效对象重编译也救不回来,最直接的办法是把 SDE schema 清掉重新初始化,这一次要在 Oracle 负载低的时候执行,避免其他大事务抢共享池。
5.4 密码带特殊字符导致 sdesetup 悄悄截断:引号、转义与环境变量
现象:SDE 用户的密码设置为Sde#2024,sqlplus 连接正常,但 sdesetup 命令报 ORA-01017: invalid username/password。
原因:sdesetup 本身是个命令行程序,它对特殊字符的处理远没有 Oracle 那么宽容。Linux shell 下#会把后面的内容当注释,!会触发历史展开,@在某些参数里会被 ArcSDE 误当成连接字符串分隔符。这不是 Oracle 密码设置失败,而是密码在传到 sdesetup 之前已经被 shell 或命令行解析器截断了。
解决:把密码放到环境变量里再传给命令:
export SDE_PASS='Sde#2024' $SDEHOME/bin/sdesetup -o install -d ORACLE -T ORCL -u sde -p "$SDE_PASS" -E ST_GEOMETRY如果这样仍然报错,就别跟命令行死磕,最有效的后悔药是先用简单密码初始化,完成后再改密码:
ALTER USER SDE IDENTIFIED BY "Sde#2024";这种方式不影响已经建好的系统表,也不用重新初始化,是目前最节省时间的处理路径。
5.5 服务器重启后 ArcSDE 服务像“黑匣子”一样断开:启动顺序问题
现象:机房断电或服务器异常重启后,Oracle 和 ArcGIS Server 都显示已启动,但应用连不上空间图层;sdemon -o status 显示 SDE 服务进程没有运行。
原因:服务模式下,sdemon 没有注册成随系统自动启动的服务,或者启动脚本里没处理好顺序。sdemon 在 Oracle 监听器启动之前尝试连接,连接失败后进程退出,而且它不会自动重试,又没有明显的日志告警,所以看起来像一只黑匣子,摸不透它为什么断。
解决:把 sdemon 的启动放到 Oracle 和监听器之后。Linux 上我习惯在 rc.local 里加一行,但要放在合适位置:
su - arcsde -c "$SDEHOME/bin/sdemon -o start -u sde -p 'Sde2024' -d ORACLE -T ORCL"注意脚本里的密码和权限。不要把这个脚本设置成 777,至少 chmod 700,并且单独建一个 arcsde 系统用户来跑 ArcSDE 进程,不要用 root。Windows 上可以用sc start命令注册服务,并把启动类型设为自动或延迟启动,依赖 OracleServiceORCL 服务。
如果用的是直连模式,没有 sdemon 可检查,那就要把注意力放在监听器是否正常。直连模式下 ArcGIS 只认数据库监听,监听器没起来,连接照样失败。
6. 用 sdelayer 验证安装,再用备份习惯告别“后悔药”
6.1 sdelayer 建一条测试点图层
初始化完成后,我会先用 sdelayer 创建一个临时点图层,验证空间数据的写入链路。不要一上来就往业务库塞真实数据,测试图层能一次性暴露类型安装、系统表注册、权限分配这三类问题。
命令行示例:
$SDEHOME/bin/sdelayer -o create \ -l TEST_POINT,POINT \ -t ST_GEOMETRY -e 2 \ -C ID,USER \ -T ORCL -u sde -p "Sde2024"参数上,-o create是建图层,-l后面是图层名和几何类型,-t指定 ST_Geometry,-e 2表示二维坐标,-C是主键列名和类型。执行成功后,到 sqlplus 里确认系统表登记情况:
SELECT layer_name, owner, spatial_column FROM sde.layers WHERE layer_name = 'TEST_POINT';能查到一行记录,就说明 ArcSDE 与 Oracle 之间的空间类型注册、系统表写入和权限链路全部打通。接着我还要在 ArcCatalog 里再画一个点,保存,检查要素类能否正常编辑。这一步通过后,安装包才算真正交付。
6.2 定期备份 SDE schema 的实用习惯
我的习惯是安装完成当天就把备份脚本写上,而不是等业务上线再说。ArcSDE 的系统表和业务空间表一样重要,版本化地理数据库的状态表一旦丢失,所有版本记录都会失效。定期用 expdp 导出 SDE schema 是最轻量的一层保护:
expdp sde/"Sde2024"@ORCL \ directory=DATA_PUMP_DIR \ schemas=SDE \ dumpfile=sde_$(date +%F).dmp \ logfile=sde_exp_$(date +%F).log如果业务空间表建在业务用户下,不要只导出 SDE,把业务用户 schema 一起导出。更严谨的做法是启用 RMAN 整库备份,因为 SDE 系统表和业务表之间存在跨 schema 的事务一致性,expdp 只能做到导出时刻的一致性,不能保证崩溃恢复时数据库文件和 SDE 系统表文件在时间点上完全对齐。
经历了这么多次 ArcSDE 部署,我最深的体会是:不要相信安装包默认完成就是完成,必须用测试图层把空间存储链路打通,再把它写成部署检查清单,方便下次照做。这十年踩过来的血泪经验,很多都集中在字符集、监听和权限这三件事上。希望帮到你。
本文还有配套的精品资源,点击获取