☰
ArcGIS Server数据存储注册:文件夹与数据库注册实战
2026/9/29 1:33:48 网站建设 项目流程

只要你在 ArcGIS Server 上发布过带数据源的服务,八成都会遇到一个选择题:让服务器把数据复制过去,还是把已有的文件夹或数据库注册进来。前者看起来省事,后面往往带来数据不同步、编辑冲突、磁盘暴涨、服务启动慢;后者前期配置稍微麻烦,但服务稳定性和运维效率完全不是一个量级。ArcGIS Server 数据存储里的“注册文件夹”和“注册数据库”,就是解决这个问题的核心动作。它适合 GIS 管理员、实施工程师、数据运维人员,也适合刚开始接触 ArcGIS Enterprise 的开发者。下面我按实际项目里的踩坑顺序,把注册文件夹、注册数据库、发布验证和排错讲透,能直接照着做。

1. 先弄明白注册数据存储到底在解决什么问题

1.1 不注册时 ArcGIS Server 会偷偷复制数据

发布服务时,ArcGIS Pro 或 ArcMap 会检查数据源是否已经在目标 ArcGIS Server 的 Data Stores 里注册过。如果没有注册,发布向导通常会给出两个选项:一个是复制所有数据到服务器,一个是注册数据存储。很多人为了快点看到服务,直接选复制。这个动作的后果是:服务器端会生成一份副本,服务读的是副本,不是你的原始数据。你后续在原始文件地理数据库里改了字段、加了要素,服务不会自动变;你在服务里编辑了要素,原始库也不会同步。更麻烦的是,服务器端副本的位置通常在 ArcGIS Server 的站点目录或托管目录里,时间一长,多个服务各带一份,磁盘空间会被迅速吃掉。尤其是影像、缓存、大型要素类,复制一次就是几十 GB 起步。注册数据存储的本质,就是让服务器知道“原始数据在哪里”,并确认服务账户能直接访问,从而避免复制。

1.2 注册文件夹与注册数据库的边界

注册文件夹针对的是文件型数据源,比如 Shapefile、文件地理数据库、栅格数据集、CAD、LAS、影像服务源数据等。这些数据的共同特点是躺在某个磁盘目录里,服务器通过共享路径访问。注册数据库针对的是企业级地理数据库,比如 SQL Server、PostgreSQL、Oracle、Dameng、Kingbase 等数据库中的地理数据库。它的数据不在文件目录里,而在数据库实例中,服务器需要通过数据库连接文件或连接属性访问。两者在 Server Manager 里看起来像两个按钮,但背后的权限模型完全不同:文件夹注册关心的是 SMB 共享、NTFS 权限和服务账户;数据库注册关心的是数据库客户端、连接文件、数据库账户权限和地理数据库版本。把这两个边界搞清楚,排错时就不会拿文件夹权限的思路去查数据库连接,也不会拿数据库连接字符串去套共享目录。

1.3 为什么建议优先注册而不是复制

注册优先的理由有三条。第一,数据一致性。原始数据更新后,服务直接读源,不存在两份数据谁新谁旧的问题。第二,编辑能力。要素服务要支持编辑,通常要求数据源已经注册,未注册的数据复制到服务器后,编辑的是副本,回写原始库需要额外同步逻辑,生产环境很难维护。第三,运维成本。注册之后,服务启动、查询、缓存生成都直接访问源数据,磁盘占用和发布等待时间都会降低。下面这张表可以帮你快速判断:

对比项未注册直接复制注册文件夹/数据库
数据位置服务器站点目录副本原始共享目录或数据库
数据同步手动替换或重新发布自动实时读取
编辑回写容易错乱直接作用于源数据
磁盘占用每个服务一份副本基本不额外占用
发布速度大数据集很慢通常较快
依赖条件基本无服务账户权限、网络、数据库连通性
适用场景临时演示、小型静态数据生产环境、编辑服务、大数据

注意:注册不是“万能加速器”。如果共享网络本身不稳定,或者数据库连接很慢,注册后服务也会受网络和数据库性能影响。注册只是消除复制,不解决底层 I/O 问题。

2. 注册文件夹:共享路径、服务账户与权限怎么配

2.1 共享文件夹的设计原则

文件夹注册最核心的一句话:ArcGIS Server 服务账户必须能通过网络路径访问到原始数据。这里的“网络路径”不是你在 ArcGIS Pro 机器上看到的D:\gisdata,而是服务器能解析的 UNC 路径,比如\\fileserver\gisdata。我一般建议把 GIS 数据放在专门的文件服务器或存储上,不要放在 ArcGIS Server 本机的系统盘。目录结构也要提前设计,比如\\fileserver\gisdata\vector、\\fileserver\gisdata\raster、\\fileserver\gisdata\projects。这样做的好处是:多个 ArcGIS Server 节点可以访问同一份数据,后续做集群或迁移时路径不变。共享名不要用中文和空格,避免某些旧版本解析异常。共享路径一旦确定,就不要轻易改,因为注册记录、服务定义、缓存路径都可能引用它。如果确实要迁移,优先用 DFS 命名空间或新共享名加别名,减少对服务的影响。

2.2 服务账户与 NTFS/SMB 权限实操

Windows 环境下,ArcGIS Server 安装时会创建一个服务账户,常见是arcgis或DOMAIN\arcgis,具体看安装时的设置。你可以在“服务”里查看 ArcGIS Server 服务的登录账户,也可以用services.msc确认。这个账户必须对共享目录同时具备共享权限和 NTFS 权限。共享权限我通常给“更改”或“完全控制”,NTFS 权限至少给“修改”,如果服务需要创建缓存、写入临时文件,建议给“修改”并勾选继承。PowerShell 示例:

# 创建共享并给 ArcGIS Server 服务账户读写权限 New-SmbShare -Name "gisdata" -Path "D:\gisdata" -FullAccess "DOMAIN\svc_arcgis" # 设置 NTFS 权限,OI 和 CI 表示对象继承和容器继承 icacls "D:\gisdata" /grant "DOMAIN\svc_arcgis:(OI)(CI)M" /T

Linux 环境下,共享通常用 NFS 或 SMB 挂载,服务账户是arcgis。要注意 UID/GID 映射,如果 NFS 服务端和客户端 UID 不一致,即使权限写成777也可能出现“拒绝访问”。我一般会在 ArcGIS Server 机器上先切到服务账户,用touch测试写入:

sudo -u arcgis touch /mnt/gisdata/_perm_test.txt sudo -u arcgis rm /mnt/gisdata/_perm_test.txt

如果这一步失败,后面在 Server Manager 里注册也一定失败。不要跳过这个验证。

2.3 Server Manager 注册文件夹步骤

打开https://<server>:6443/arcgis/manager,登录管理员账号。进入 Site 或 Data Stores,点击 Register Folder。填写显示名称和共享路径,比如\\fileserver\gisdata。有些版本还会让你填写“发布者文件夹路径”和“服务器文件夹路径”,这是为了方便 ArcGIS Pro 端和服务器端路径不一致时做映射。填写完之后点击验证或保存,状态变成绿色对勾才算成功。如果你是在 ArcGIS Pro 发布流程里注册,发布向导会弹出“注册数据存储”窗口,这时可以选择“注册文件夹”,让 Pro 把路径信息提交给服务器。我的习惯是先在 Server Manager 里注册好,再发布服务,这样发布时直接选已注册的数据源,少一次失败重试。

注意:Server Manager 注册文件夹时,填的是服务器视角的路径。不要填C:\Users\你的名字\Desktop,也不要填映射盘符Z:\。映射盘符对服务账户通常不可用。

2.4 发布时在 ArcGIS Pro 里注册与验证

在 ArcGIS Pro 中,添加数据后点击 Share As Web Layer 或 Publish Web Layer,选择目标 ArcGIS Server 连接。发布向导分析阶段如果提示“数据源未注册”,点击配置数据存储,选择注册文件夹。Pro 会把当前数据路径提交给服务器注册。发布完成后,不要只看服务能不能打开,还要回 Server Manager 的 Data Stores 页面看状态。另一个验证方法是查看服务的缓存或日志:如果服务日志里出现“无法访问数据源”或“路径不存在”,说明注册记录和实际路径不一致。实测下来,最容易出问题的是 Pro 端用本地路径D:\data,服务器端实际共享是\\fileserver\data,注册时只填了一边,发布时就会报错。遇到这种情况,删掉注册项重新注册,确保发布端和服务器端路径映射正确。

3. 注册数据库:企业级地理数据库的连接与注册方式

3.1 数据库注册和文件夹注册的本质区别

文件夹注册是“让服务器能打开某个目录”,数据库注册是“让服务器能用某个连接身份登录数据库并访问地理数据库”。所以数据库注册多了一层连接文件。ArcGIS 里常用的连接文件是.sde,里面保存数据库实例、数据库名、用户名、密码、版本、认证方式等信息。注册数据库时,Server Manager 需要你提供这个连接文件,或者直接输入连接属性。服务器拿到连接信息后,会用它去连接数据库,并检查该用户是否有权限访问地理数据库。如果连接文件是在 ArcGIS Pro 机器上创建的,直接用个人账号,上传到服务器后可能因为服务账户没有数据库权限而失败。所以生产环境我强烈建议使用专门的数据库账号,比如gis_service,给它地理数据库的读写和编辑权限,而不是用sde超级管理员到处跑。

3.2 准备 .sde 连接文件:直连、版本与客户端

在 ArcGIS Pro 的 Catalog 窗格中,右键 Database Connections > New Database Connection。选择数据库平台,比如 SQL Server、PostgreSQL、Oracle。填写实例、数据库、认证方式。如果使用数据库认证,填写用户名密码;如果使用操作系统认证,要确保 ArcGIS Server 服务账户在数据库里有登录名。保存为.sde文件。这里有几个关键点:第一,ArcGIS Pro 和 ArcGIS Server 的数据库客户端版本要匹配,Oracle 尤其敏感,Pro 能连不代表 Server 能连;第二,连接文件里的地理数据库版本要和数据库中的版本一致;第三,如果使用直连,要确认数据库实例允许远程连接,防火墙端口已放行;第四,密码不要包含特殊字符导致连接字符串解析异常,虽然新版本支持较好,但旧版本踩过坑。创建完成后,先在 Pro 里双击连接,能展开要素类才算通过。

示例连接信息: 数据库平台:PostgreSQL 实例:gisdb01.example.com 数据库:egdb 认证:数据库认证 用户名:gis_service 密码:******** 版本:dbo.DEFAULT 保存为:C:\connections\egdb_gis_service.sde

3.3 在 Server Manager 注册数据库

登录 Server Manager,进入 Data Stores > Register Database。选择“已注册数据库”或类似选项,上传刚才创建的.sde文件。如果界面要求选择“是否由 ArcGIS Server 管理”,普通企业级地理数据库选“否”或“非托管”。托管数据库是给 ArcGIS Data Store 使用的,和这里的企业级注册不是一回事。填写显示名称,比如egdb_prod,点击验证。验证通过后,Data Stores 列表会出现该数据库,状态为绿色。此时发布要素服务时,如果数据源来自这个数据库,发布向导就不会再提示复制数据。需要提醒的是,注册数据库并不会改变数据库本身的权限,它只是让 ArcGIS Server 知道连接方式。如果服务账户或连接用户没有SELECT、INSERT、UPDATE、DELETE权限,服务照样不能编辑。

3.4 托管数据库与普通注册数据库

很多刚接触 ArcGIS Enterprise 的朋友会把“注册数据库”和“托管数据库”混在一起。普通注册数据库是把已有的企业级地理数据库告诉 ArcGIS Server,数据还在你的库里,你负责备份、调优、权限。托管数据库是 ArcGIS Data Store 里的关系数据存储,门户发布托管要素图层时,系统会自动把数据复制到托管库中,用户不需要直接管理底层数据库。这两者的适用场景不同:如果你已有成熟的企业级地理数据库,并且要支持多源编辑、版本管理、历史归档,应该注册普通数据库;如果你只是要快速发布托管要素图层,让门户管理数据,应该配置 ArcGIS Data Store 并注册为托管数据库。把企业级地理数据库强行当托管库用,后续运维会非常别扭,备份和升级都要额外考虑。

4. 实操过程:从共享目录到发布服务的完整链路

4.1 场景假设与参数规划

假设我们有一套生产环境:文件服务器fileserver,共享目录\\fileserver\gisdata;数据库服务器gisdb01,PostgreSQL 企业级地理数据库egdb;ArcGIS Server 站点https://gis.example.com:6443/arcgis;服务账户DOMAIN\svc_arcgis。目标是把矢量数据放在文件地理数据库中,把需要编辑的要素类放在企业级地理数据库中,并发布两个服务:一个只读地图服务读文件地理数据库,一个要素服务读企业级地理数据库。规划如下表:

项目值说明
共享路径\\fileserver\gisdata服务器视角 UNC 路径
本地路径D:\gisdata文件服务器本地路径
服务账户DOMAIN\svc_arcgisArcGIS Server 服务登录账户
数据库连接egdb_gis_service.sde使用gis_service账号
注册名称gisdata_folder、egdb_prod便于识别
数据源文件地理数据库、企业级地理数据库分别注册

参数规划的核心是“路径、账号、权限”三件事。路径必须服务器可达,账号必须两边一致,权限必须覆盖读和写。发布只读服务时,文件夹至少给读权限;发布编辑服务时,数据库账号至少给增删改查权限。如果服务还要生成缓存,文件夹需要写权限。

4.2 文件夹注册实操记录

第一步,在文件服务器上创建目录并共享。第二步,给DOMAIN\svc_arcgis共享权限和 NTFS 权限。第三步,在 ArcGIS Server 机器上用服务账户测试访问。可以在 ArcGIS Server 机器上打开文件资源管理器,地址栏输入\\fileserver\gisdata,如果弹窗要求输入凭据,说明服务账户没有权限或当前登录账户不匹配。更准确的方式是用psexec以服务账户身份打开命令行,但生产环境可能不允许。简单方法是看 ArcGIS Server 日志里的账户名,然后在文件服务器安全日志里查访问记录。第四步,Server Manager 注册文件夹,填写\\fileserver\gisdata,验证通过。第五步,在 ArcGIS Pro 中发布地图服务,分析时如果提示数据源未注册,选择已注册的gisdata_folder。发布完成后,修改文件地理数据库中的一个符号或字段,重启服务或刷新缓存,确认服务读取的是源数据。

// ArcGIS Server Admin API 注册文件夹的请求体示例,字段名以实际版本为准 { "type": "folder", "path": "/arcgis/shared/gisdata", "id": "gisdata_folder", "info": { "path": "\\\\fileserver\\gisdata", "clientPath": "\\\\fileserver\\gisdata" } }

如果你要批量注册多个文件夹,可以用 Admin API。先获取 token,再向/arcgis/admin/data/registerItem提交 JSON。但我不建议新手一上来就手写,因为不同版本的path、id、info字段有差异,写错会注册出无效项。更稳的是用 Server Manager 或 ArcGIS Pro 图形界面。

4.3 数据库注册实操记录

第一步,在 ArcGIS Pro 中创建.sde连接文件,使用gis_service账号,测试能展开地理数据库。第二步,把.sde文件复制到 ArcGIS Server 可访问的位置,或者直接在 Server Manager 上传。第三步,在 Server Manager 中注册数据库,上传连接文件,选择非托管。第四步,验证状态。如果验证失败,先不要反复点注册,而是回到数据库端检查:gis_service是否能从 ArcGIS Server 机器连接?数据库端口是否放行?客户端是否安装?地理数据库是否已启用企业级地理数据库?第五步,发布要素服务。发布时选择已注册的数据库数据源,不要复制。发布后打开服务 REST 页面,测试查询和编辑。编辑测试可以用 ArcGIS Pro 添加要素,保存后直接去数据库里查,确认数据已经写入源库。

# 使用 Admin API 注册数据库的伪代码,connectionString 通常需要加密,建议优先用 Server Manager 上传 .sde import requests, json server = "https://gis.example.com:6443/arcgis/admin" token = "从 tokens 接口获取的令牌" item = { "type": "database", "path": "/enterpriseDatabases/egdb_prod", "id": "egdb_prod", "info": { "connectionString": "ENCRYPTED_CONNECTION_STRING", "isManaged": False } } resp = requests.post( f"{server}/data/registerItem", data={"item": json.dumps(item), "token": token, "f": "json"}, verify=False ) print(resp.text)

注意:上面的connectionString不是明文,而是 ArcGIS 加密后的字符串。手写几乎必错。批量场景建议先用界面注册一个,再从 Admin API 的dataItems里看结构,照着复制字段。

4.4 发布服务并验证是否走了注册数据源

发布完成后,怎么确认没有复制?有三个检查点。第一,看服务定义或服务属性里的数据源路径,如果指向\\fileserver\gisdata或企业级地理数据库连接,而不是 ArcGIS Server 站点目录下的副本,说明注册生效。第二,修改原始数据,重启服务或清理缓存后刷新页面,如果内容变化,说明读的是源。第三,看服务器站点目录大小,如果发布后没有明显增长,基本可以判断没有复制。对于要素服务,还可以检查 REST 页面的editing能力是否开启,以及数据库里是否出现服务写入的记录。如果服务日志提示“数据源未注册”,但你已经注册了,八成是路径映射不一致,比如 Pro 端注册的是D:\gisdata,服务器端需要\\fileserver\gisdata。这时删除注册项,重新在 Pro 发布向导里选择“注册数据存储”,让 Pro 把两端路径都提交。

5. 常见问题与排查技巧实录

5.1 文件夹类问题速查

文件夹注册的故障大多集中在权限和路径。下面这张表是我在项目里遇到频率最高的几类:

现象可能原因排查动作
注册验证失败,提示无法访问服务账户无共享或 NTFS 权限用服务账户测试 UNC 路径写入
发布时仍提示复制数据注册路径与发布路径不一致检查 Server Manager 中的路径映射
服务启动失败,日志报路径不存在共享名变更、DNS 解析失败在服务器上 ping 文件服务器并访问 UNC
编辑服务无法保存文件夹只给读权限给服务账户“修改”权限
缓存生成失败缓存目录无写权限检查站点目录和共享目录写权限
Linux 下权限明明放开仍拒绝NFS UID/GID 映射问题统一 UID/GID 或改用 SMB

我的经验是,先在 ArcGIS Server 机器上用服务账户访问共享,能创建、修改、删除一个测试文件,再进 Server Manager 注册。这个前置动作能节省至少一半排错时间。

5.2 数据库类问题速查

数据库注册的故障更隐蔽,因为网络通不代表数据库客户端通,数据库客户端通不代表地理数据库权限通。常见问题如下:

现象可能原因排查动作
连接文件在 Pro 可用,在 Server 不可用客户端版本不匹配在 Server 机器安装匹配的数据库客户端
验证失败,提示无效连接实例名、端口、服务名错误用 telnet 或数据库工具测试连通性
验证通过但发布失败用户无地理数据库权限检查gis_service的 SELECT/EDIT 权限
要素服务不能编辑连接文件只读或版本错误使用读写账号,检查版本权限
服务日志报连接数满连接池或数据库限制调整连接池,检查数据库会话数
Oracle 连接报 TNS 错误TNS 配置或环境变量问题检查TNS_ADMIN和客户端位数

注意:不要在 Server Manager 里反复注册失败项,容易留下无效记录。先删掉失败项,修好权限和连接后重新注册。

5.3 注册状态、服务启动与许可问题的边界

有时候你会遇到 ArcGIS Server 本身起不来,或者 License Server 点击启动没反应。这类问题不要往数据存储注册上扯。注册数据库和文件夹的前提是 ArcGIS Server 站点已经正常运行,Server Manager 能登录。如果许可服务异常,Server Manager 可能根本打不开,或者站点处于未授权状态,此时应该先排查许可服务、端口、主机名和系统时间,而不是重新注册数据源。数据存储注册失败通常只影响具体服务的发布和启动,不会让整个 Server Manager 无法访问。把这两条排查线分开,能避免在错误方向上浪费时间。比如服务日志提示“数据源不可访问”,但 Server Manager 的 Data Stores 页面状态是绿色,那问题多半在服务账户运行时权限或网络波动,而不是注册记录本身。

5.4 独家避坑清单

第一,服务账户密码过期是隐形杀手,注册一直正常,某天服务全挂,日志报访问拒绝,优先查域账户密码策略。第二,共享路径不要用映射盘符,也不要用带空格的中文共享名,老版本兼容性差。第三,数据库连接文件不要用个人账号,离职或改密后服务全断。第四,注册数据库后,数据库备份策略仍由你负责,ArcGIS Server 不会帮你备份企业级地理数据库。第五,发布要素服务前,确认数据库已启用企业级地理数据库,并且版本、权限、注册状态都正确。第六,Linux 下 NFS 挂载如果用了root_squash,服务账户可能被映射成匿名用户,权限表现和你在服务端看到的不一致。第七,做集群时,每个 ArcGIS Server 节点都要能访问注册的共享路径和数据库,不要只在一台机器上测试通过就上线。

6. 长期维护:数据存储注册后的变更管理

6.1 路径迁移与连接变更怎么处理

注册数据存储不是一劳永逸。文件服务器迁移、共享名变更、数据库实例切换、服务账户改密,都会影响注册状态。我的做法是每次变更前先列清单:哪些服务引用了这个文件夹?哪些服务引用了这个数据库?注册项的名称和路径是什么?然后按“先加新、再切服务、最后删旧”的顺序做。比如文件服务器从\\oldfs\gisdata迁到\\newfs\gisdata,先在 Server Manager 注册新路径,再逐个修改服务的数据源或重新发布,确认服务正常后,再删除旧注册项。数据库迁移类似,先创建新连接文件,注册新数据库,再切换服务。不要一上来就删旧注册项,否则服务启动会直接失败,回滚成本很高。

6.2 监控与日志里该看什么

ArcGIS Server 的日志级别建议调到 Warning 或 Fine,但不要长期开 Verbose,否则日志会爆炸。重点看这几类关键字:数据源无法访问、连接失败、路径不存在、拒绝访问、地理数据库权限不足。Data Stores 页面的验证状态只能代表注册那一刻的连接结果,不代表服务运行时的持续可用。真正要监控的是服务日志、数据库会话、共享目录可用性、网络延迟。我一般会在数据库端看连接数,在文件服务器端看共享会话,在 ArcGIS Server 端看服务日志。如果注册状态是绿色但服务间歇性失败,优先怀疑网络抖动、服务账户锁定、数据库连接池耗尽,而不是注册记录丢失。

6.3 我个人在注册数据存储上的体会

我个人在数据注册上踩得最多的一类坑,其实不是步骤不会,而是权限和路径没对齐。图形界面点几下就注册成功,会让人误以为事情结束了,但真正的考验在服务运行之后:服务账户是否能持续访问、数据库连接是否稳定、共享目录是否高可用、备份是否覆盖源数据。我的习惯是每注册一个数据存储,就立刻用服务账户做一次读、写、删测试,再发布一个最小服务验证,最后把注册项名称、路径、账号、负责人记到运维文档里。这样后面换人维护,也不会对着一堆folder_1、database_2猜哪个是生产库。注册文件夹和注册数据库本身不难,难的是让它长期稳定地工作,而这部分功夫主要花在权限、命名、监控和变更管理上。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询