ArcSDE 服务疑难解答
由于系统环境问题,出现的大部分问题都与启动 ArcSDE 服务有关。通常,在安装或配置软件的过程中,会遗漏一些关键步骤。
此主题中的疑难解答提示涉及多个不同的管理命令。有关此命令使用方法的详细信息,请参阅随 ArcSDE 应用程序服务器安装的《管理命令参考》。
识别问题
- Windows 事件查看器
对于在 Windows 操作系统上的安装,您可使用“Windows 事件查看器”来查找潜在的问题。“Windows 事件查看器”提供的诊断信息可能还有助于解释 ArcSDE 的启动问题。要使用“Windows 事件查看器”
- 打开“控制面板”。
- 双击“控制面板”菜单中的“管理工具”。
- 单击“管理工具”菜单中的“组件服务”。
- 展开“组件服务”菜单中的“事件查看器”文件夹,选中“应用程序”选项。
- 查找“类型”列中的红色停止标志图标以及“源”列中的 ArcSDE 服务的对应名称。双击 ArcSDE 服务条目,弹出“事件详细信息”窗口。
- “事件详细信息”窗口中包含问题的说明。
- 错误日志文件
通过将事件消息写入 ASCII 日志文件,ArcSDE 及所支持的所有数据库管理系统 (DBMS) 都会追踪它们的活动。可以检查日志文件,以追踪所发生的错误。ArcSDE 会对以下两个日志文件执行写操作:giomgr_<服务>.log 和 sde_<服务>.log。(若您使用的是直连,应用程序会将错误消息写入 sdedc_<dbms>.log 文件,而不会将其写入应用程序服务器的 sde_<服务>.log 文件。)
- Giomgr_<服务>.log 文件
Giomgr_<服务>.log 文件是包含所有 giomgr 进程活动输入信息的 ASCII 文件。(<服务> 是 ArcSDE 服务的名称。)每次用户连接或试图连接 ArcSDE 服务时,都会记录一条消息。当用户断开连接时,会记录另一条消息。Giomgr_<服务>.log 文件还将采集 ArcSDE 服务的启动和关闭程序。然而,该文件中不包含具体的错误消息,而是只显示 giomgr 进程的活动。
- Sde_<服务>.log 文件
每当 gsrvr 进程出现问题时,ArcSDE 服务都会在 sde_<服务>.log 中记录一条条目。有时,这些消息为警告消息;而有时,这些消息则指向您必须加以解决的 ArcSDE 服务错误。检查 sde_<服务>.log 文件时,需要注意的是:当 ArcSDE 服务进程出错时,即会向此文件中写入消息。虽然有时 ArcSDE 应用程序会报告 ArcSDE 相关问题,但该事件不会显示在 sde_<服务>.log 中。这是由于该错误发生在 ArcSDE 客户端,而不是发生在服务器端。自 9.3 版本起,即使发送了不正确的连接请求,sde_<服务>.log 文件也会存储信息。这可能表明某人正试图非法侵入服务器。下图为此类条目的示例:
[Mon Mar 05 09:35:14 2007] [0] [GIOMGR] Invalid connection request length of -2147477504 from [10.47.6.5:32923] [Mon Mar 05 09:35:14 2007] [0] [GIOMGR] Could Not Get XDR Request.
请注意,日志条目中列出了建立连接请求的 IP 地址。在该消息中,因长度无效,使得 giomgr 无法接受或识别连接请求,因此返回“无法获取 XDR 请求”消息。每次停止和重新启动 ArcSDE 服务时,sde_<服务>.log 都会被截断。
- DBMS 错误日志文件
每个 DBMS 都有其各自的错误记录方式。请查阅相关的 DBMS 管理指南,以确定您的 DBMS 如何记录错误。
- Giomgr_<服务>.log 文件
UNIX 服务器上 ArcSDE 服务的疑难解答
系统路径变量问题
若系统路径变量设置不当或尚未进行设置,则会出现以下错误。有关如何设置路径变量,请参阅适用于您的 DBMS 的 ArcSDE 应用程序服务器安装指南。
- 若 PATH 环境变量中未包含 $SDEHOME/bin 目录,则会报告以下错误消息:
sdemon: Command not found
- 若库路径环境变量中未包含 $SDEHOME/lib 目录,则会报告以下错误消息:
ld.so.1: sdemon: fatal: libsde90.so: open failed: No such file or directory Killed
- 若库路径环境中未包含必要的 DBMS 库目录,则会报告类似以下内容的错误消息:
ld.so.1: /ultra1/ora10gexe/bin/giomgr: fatal: libclntsh.so\: open failed: No such file or directory Killed Could not start ArcSDE - Check Network, $SDEHOME disk, DBMS settings and dbinit.sde.
临时文件权限问题
若存在任何不归 ArcSDE 管理员所有的 ArcSDE 临时文件,则会返回以下错误消息:
ERROR: Cannot Initialize Shared Memory (-79) Delete /tmp/<service name> and /tmp<service name>.lock if present. Could not start ArcSDE - Check Network, $SDEHOME disk, DBMS settings and dbinit.sde.
要修复此错误,请删除临时文件 /tmp/<服务名称> 和 /tmp/<服务名称>.lock。例如,若服务名称为 esri_sde,则您可删除文件 /tmp/esri_sde 和 /tmp/esri_sde.lock。您可能需要以根用户身份登录才能删除这些文件。
已从 /tmp 中删除文件
启动 ArcSDE 服务之后,若存储在 /tmp 目录下的文件被删除,则无论用户是否与 ArcSDE 服务连接,ArcSDE 服务都将运行失败。该服务依赖于 UNIX 套接字协议文件(在 /tmp 目录下创建)。通常情况下,不应删除 /tmp 目录下的文件。不过,若您一定要这样做,应在此之前先关闭 ArcSDE 服务。有关如何执行此操作的说明,请参阅停止 Linux 或 UNIX 上的本地 ArcSDE 服务,停止 Windows 上的本地 ArcSDE 服务或停止远程 ArcSDE 服务。
DBMS 相关问题
- 若未启动 DBMS,您将收到一条类似以下内容的错误消息:
init_DB DB_instance_open_as_dba: -51 DBMS error code: 1034 ORA-01034: ORACLE not available Could not start ArcSDE - Check Network, $SDEHOME disk, DBMS settings, and dbinit.sde.
请确保数据库实例已被启动,然后重试。
- 若 ArcSDE 服务管理员的密码不正确,您将收到一条类似以下内容的错误消息:
init_DB DB_instance_open_as_dba: -93 DBMS error code: 1017 ORA-01017: invalid username/password; login denied Could not start ArcSDE – Check Network, $SDEHOME disk, DBMS settings, and dbinit.sde.
请使用正确的密码重新发出命令。若您忘记了密码,则需要与数据库管理员联系,以重新设置密码。
- 若没有 ArcSDE 服务管理员,您将收到一条类似以下内容的错误消息:
init_DB DB_instance_open_as_dba: -93 DBMS error code: 1017 ORA-01017: invalid username/password; login denied Could not start ArcSDE – Check Network, $SDEHOME disk, DBMS settings, and dbinit.sde.
具有大部分所支持的 DBMS 的 ArcSDE 都要求数据库中存在一个 ArcSDE 服务管理员。若没有,您或数据库管理员必须创建一个 ArcSDE 服务管理员。
Solaris server 上的 SE_OUT_OF_MUTEXES (-109) 错误
Solaris 操作系统使用文件来实现 ArcSDE 所使用的 POSIX 共享信号灯。如果操作系统出现故障或断电之后这些文件被遗留下来,有时可能会引发许多问题。这些文件的位置是由 Solaris 操作系统控制的。它们位于 /tmp 或 /var/tmp 目录下,如下所示:
/tmp/.SEMD/ SDE_9.0_<instance>_iomgr_shared_semaphore /tmp/.SEML/ SDE_9.0_<instance>_iomgr_shared_semaphore
或者
/var/tmp/.SEMD/ SDE_9.0_<instance>_iomgr_shared_semaphore /var/tmp/.SEML/ SDE_9.0_<instance>_iomgr_shared_semaphore
在操作系统出现故障后,若无法启动 ArcSDE 服务并接收到 -109 错误,则可能是因为这两个共享信号灯文件已存在。若您发现这些文件中的任何一个文件位于 /tmp 或 /var/tmp 下,请删除这些文件并尝试重新启动 ArcSDE 服务。
Windows 服务器上 ArcSDE 服务的疑难解答
下面列出了在 Windows 上启动 ArcSDE 服务时经常遇到的错误。此列表中包含错误代码及可能的原因(若适用)。
997 启动 esri_sde 服务时出错
如果 ArcSDE 应用程序服务器的安装或配置不正确或不完整,则可能会导致该错误:
"ESRI_sde service failed during initialization. Please check event log or error log files. Error starting ESRI_sde service(997) Could not start ArcSDE — Check Network, $SDEHOME disk, DBMS settings"
解决方案
- 确认输入的 ArcSDE 服务管理员用户的密码正确。若使用的密码不正确,则 sde.errlog 中会显示 -93 错误。
- 完全移除当前的 ArcSDE 服务,并创建新的服务。
- 使用 sdeservice –o delete 命令删除该服务。
- 检查注册表中是否存在孤立的服务注册表项。在以下目录中进行查找,若存在 [esri_sde] 文件夹/注册表项,请将其删除:
HKEY_LOCAL_MACHINE > SOFTWARE > ESRI > ArcInfo > ArcSDE > ArcSDE for [DBMS] > [service_name]
HKEY_LOCAL_MACHINE > SYSTEM > ControlSet001 > Services > [service_name]
HKEY_LOCAL_MACHINE > SYSTEM > ControlSet002 > Services > [service_name]
HKEY_LOCAL_MACHINE > SYSTEM > CurrentControlSet > Services > [service_name]
- 重新启动服务器,以使对注册表所做的更改生效。
- 在命令提示符下输入 set,并验证 %SDEHOME%\bin 是否为 PATH 环境变量中的第一个条目 (PATH=%SDEHOME%\bin;...)。
- 验证 %SDEHOME%\etc\services.sde 文件中的 ArcSDE 服务名称及端口号是否与 C:\WINNT 或 WINDOWS\system32\drivers\etc\services 文件中的相应条目匹配。
- 导航到 %SDEHOME%\bin 目录,使用 sdeservice –o create 命令重新创建 sdeservice。
- 运行 sdeservice –o list 命令,检查服务名称和 SDEHOME 路径是否正确。
若 SDEHOME 路径中有两个反斜线 (\\),或者路径末尾有一个反斜线 (\),请手动将其移除。
- 在命令提示符处,使用 sdemon –o start 命令或 net start <service_name> 命令重新启动 ArcSDE 服务。
1068 依存关系失败
找不到 ArcSDE 服务试图连接的 DBMS。最有可能导致该问题的原因是
- DBMS 服务未启动。
- DBMS 服务器已被移除。
- 创建 ArcSDE 服务时输入的 DBMS 连接信息不正确。
请确保 DBMS 服务器存在且服务已启动,并检查 DBMS 连接信息以确保其正确。若错误依然存在,则请使用 sdeservice 命令删除现有的 ArcSDE 服务,并重新创建 ArcSDE 服务。
1069 登录失败
通常,该错误表示:启动 ArcSDE 服务的 Windows 用户既不是 Windows 管理员,也不是 Windows 高级用户。还有可能是密码不正确。
若未使用系统管理员帐户启动该服务,则需确保该用户帐户是管理员组或高级用户组的成员。
1072 注册表忙
在涉及 ArcSDE 服务条目的注册表中,出现了一些问题。也许是运行了带删除操作的 sdeservice,或者已使用注册表编辑器开启了该服务。还有可能是对象链接及嵌入数据库 (OLE DB) 提供程序有问题。
1075 服务依存关系已删除
ArcSDE 服务无法定位应与其连接的 DBMS 服务。请确保 DBMS 服务存在且已被启动。若问题依然存在,则请使用 sdeservice 命令删除 ArcSDE 服务,并重新创建该服务。
2140 内部 Windows 错误
ArcSDE 服务无法完成启动进程。请检查 sde 错误日志文件 - %SDEHOME%\etc\sde_<sde_instance>.log,以获取有关 ArcSDE 服务未启动的可能原因。
可能的原因及其解决方案
- 在系统的服务文件中,无实例条目。请检查系统的服务文件中是否存在与试图启动的 ArcSDE 实例相对应的服务条目。
- 系统服务文件中的条目与 ArcSDE 服务文件不匹配。检查系统服务文件中的条目是否与 %SDEHOME%\etc\services 文件中的条目相同。
- 若系统服务文件的末尾不是行结束符,则可能不会读取系统服务的最后一行。若条目处于系统的服务文件最末行,则请验证该行是否以一个回车符结束。
- TCP/IP 组件可能已损坏。请重新安装 TCP/IP 组件。有关如何执行此操作的详细信息,请参阅 Windows 文档或 Microsoft 支持网站。
- ArcSDE 服务管理员密码输入的不正确。若确实如此,请使用 sdeservice –o modify –r SDE_DBA_PASSWORD 命令来修正密码。
- 您正试图使用 ArcSDE 服务以 Windows 验证用户的身份连接到数据库,但 Windows 验证用户无权访问包含 ArcSDE 服务器中 gsrvr.exe 的文件夹。ArcSDE 服务器上的 Windows 管理员用户必须将 %SDEHOME%\<dbms>exe 文件夹的 READ 和 EXECUTE 权限授予尝试进行连接的 Windows 登录用户。
gsrvr.exe - DLL 初始化失败或 gsrvr.exe - 应用程序错误:正常初始化应用程序失败
在 Windows 中,ArcSDE 服务以非交互桌面形式启动。名为 SharedSection 的 Windows 初始化参数用于设定分配给非交互桌面的堆内存上限值。若您接收到此错误消息,可能需要更改 SharedSection 参数。
SERVER_CONFIG(SQL Server 和 PostgreSQL 中的 sde_server_config)表中的 CONNECTIONS 参数也将限制可为地理数据库设置的并发连接数量,但可能需要增大该参数值。
- 堆内存
无论是交互桌面还是非交互桌面,所有桌面的可用堆内存上限值均为 48 MB。由于内存量有限,因此,应注意调节 SharedSection 参数。若 ArcSDE 服务以域帐户启动,则 gsrvr.exe 会从桌面分配一个大小为 512 KB 的非交互桌面堆,专门用于 ArcSDE 服务。若 ArcSDE 服务以 LocalSystem 帐户启动,则 gsrvr.exe 会从共享桌面分配一个大小为 512 KB 的非交互桌面堆,专门用于以 LocalSystem 运行的所有服务。若 ArcSDE 服务以 LocalSystem 帐户启动(使用“允许”服务与已启用桌面交互),则 gsrvr.exe 会从默认桌面分配一个大小为 3 MB 的交互桌面堆。
解决方案解决方案取决于操作系统。当前没有方法可确定单个桌面使用的内存数量或全局池内剩余的内存数量。可使用 oh.exe(一种 Windows 资源工具包工具)来监视正在使用的桌面数量。
- 更改注册表中的 SharedSection 参数。
估计所需 gsrvr 的数量。对于诸如 ArcGIS for Desktop Basic、ArcGIS for Desktop Standard和 ArcExplorer 之类的客户端,gsrvr 通常是单个 ArcSDE 连接。而对于 ArcIMS 来说,gsrvr 的数量取决于服务类型。假设每个空间服务器 CPU 有两个虚拟服务器线程,以下为通用公式:
(2 image service threads * total CPUs) + (number of query server threads)
例如:(2 * 8) + 8 = 24 个 gsrvr,此建议还假定使用了图像和查询服务,而且,所有的 AXL 以相同用户和数据库连接到 ArcSDE 服务器。若您的 AXL 中引用了不同的数据库或用户,则公式如下:
(#databases * #mapservice threads)+ (#dbs*#queryservices)
若 gsrvr 的数量超过 64 个 - ArcSDE SERVER_CONFIG 表中的默认 CONNECTIONS 设置 - 需考虑增大注册表中的第三个 SharedSection 参数。
可使用 Windows 注册表编辑器修改此参数。若要在 MS_DOS 提示符下更改 SharedSection,请在输入行中输入 regedit,并单击确定。导航到以下注册表路径,并双击 Windows 注册表项。警告:此步骤中的说明涉及更改操作系统的重要组成部分。继续操作之前,建议备份您的操作系统及文件,包括注册表。必要时,请咨询合格的计算机系统专业人士。在遵循这些说明进行操作时,Esri 无法保证非正确修改后的结果。因此,请谨慎使用并自行承担风险。
\\HKEY_LOCAL_MACHINE\ SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems
该字符串中包含 Windows 的启动参数。该字符串中包含 SharedSection 参数。其默认值为 1024,3072,512。其中,第三个参数是分配给非交互桌面的堆内存上限值。默认情况下,其设定值为 512 KB 或 1 MB。如果使用此设置,一个 ArcSDE 服务大约可接受 56 个连接。如果将非交互桌面的最大堆大小增至 2 MB,则 ArcSDE 服务最多可接受 270 个连接。如果将非交互堆大小设置为 2 MB,则 SharedSection 值为 1024,3072,2048。请将 SharedSection 参数的第三个值从 512 增至 1024,这会使 ArcSDE 服务可生成的 gsrvr 数量加倍。
SharedSection=1024,3076,1024
一旦 SharedSection 被更改,则必须重新启动服务器。
- 使用 Windows 身份验证进行企业级地理数据库连接的 SQL Server 站点
当用户使用 Windows 身份验证连接到 ArcSDE 服务时,可能会发生不同的连接行为。当 ArcSDE 服务通过某一经 Windows 身份验证的连接生成某个 gsrvr 时,虽然该 gsrvr 不会从与服务器进程 giomgr.exe 相同的桌面进行分配,但是会接收其自己的大小为 512 KB 的桌面(非交互)。虽然同一台计算机上的经 Windows 身份验证的多个连接可从相同桌面进行分配,但来自不同计算机的连接将从新桌面进行分配。若以独占方式在 Windows 身份验证模式下进行操作,可通过减少交互与非交互桌面堆大小(而不是按先前所述的方式增大其大小)来为更多的 ArcSDE 连接提供服务。
- 在 ArcSDE 服务器上部署了终端服务或 Citrix 的站点。
终端服务会将桌面全局内存池从 48 MB 减少到 20 MB。这意味着,创建的桌面总数将更少。若在此环境中操作,可增大 SharedSection 的第三个参数,但是,如果想创建不同数量的非 LocalSystem 服务,请谨慎使用。谨记:每次启动非 LocalSystem 服务时,都会为新桌面分配全局内存池中的内存。建议 SQL Server 站点不要将终端服务用于经 Windows 身份验证的 ArcSDE 连接。若必须运行此配置,且支持足够多的 ArcSDE 连接存在困难,则允许 ArcSDE 服务与桌面进行交互可以解决此问题。在此情况下,不要更改任何 SharedSection 参数。
- 更改注册表中的 SharedSection 参数。
- SERVER_CONFIG CONNECTIONS 参数
对于 SERVER_CONFIG 系统表(SQL Server 和 PostgreSQL 地理数据库中的 SDE_SERVER_CONFIG)中设置的 CONNECTIONS 初始化参数所允许的最大并发连接数,若不断地达到此最大值,则需要增大该参数值。该参数的默认值为 48。有关详细信息,请参阅giomgr defs 文件和 SERVER_CONFIG 系统表。
您可使用 sdeconfig 管理命令来修改 SERVER_CONFIG 表中的 CONNECTIONS 初始化参数。注:直连数与 CONNECTIONS 参数的连接数相当。换句话说,直连与 ArcSDE 服务连接的数量均不得超过 CONNECTIONS 参数值。
- 若要查看当前的 CONNECTIONS 参数值,请在命令提示符下使用 sdeconfig –o list 命令。该命令的语法为
sdeconfig –o list [–p <SDE_admin_password>]
- 可使用 sdeconfig –o alter 命令来修改 CONNECTIONS 参数值。
sdeconfig –o alter –v <Property_Name=Value,...> [–i <service] [–s <server_name>] [–D <database>] –u <SDE_admin_user> [–p <SDE_admin_password>] [–N] [–q]
- 若要查看当前的 CONNECTIONS 参数值,请在命令提示符下使用 sdeconfig –o list 命令。该命令的语法为