在 Standard 或 Advanced 许可等级下可用。
传统版本化允许多个编辑者对企业级或工作组级地理数据库中的相同数据进行编辑,而无需应用锁或复制数据。传统版本化通过将编辑内容存储在称为增量表的端表中来实现此功能。
要编辑参与拓扑、网络数据集或几何网络的要素类,或者要编辑宗地结构,必须将数据注册为版本。这是因为编辑网络、拓扑或宗地结构中的要素时,并非所有要素都锁定,这就意味着,其他编辑者对网络、拓扑或宗地结构中的其他部分进行编辑时可能与您的编辑相冲突。
您总是可以通过版本访问企业级或工作组级地理数据库。首次连接到 ArcGIS 中的地理数据库时,将自动连接到默认版本。如需连接到其他版本并将该信息与数据库连接文件 (.sde) 一同存储,则必须在地理数据库属性中指定该版本。
什么是版本?
版本是一种用于划分编辑的地理数据库视图。当不同的用户连接到同一版本时,他们将看到在该版本中所作的编辑。在您对这些更改进行协调并发布到公共祖先版本之前,连接到其他版本的客户端不会看到这些更改。
Default 版本
Default 版本为根版本,因此它是其他所有版本的祖先版本。
与其他版本不同,Default 版本始终存在,且不能被删除。在大多数工作流策略中,Default 版本是您发布或用作权威记录系统的版本,原因是它能够代表要建模的系统的当前状态。可随时将其他版本中的变更发布到 Default 版本,从而维护和更新 Default 版本。此外,您还可以像编辑其他版本一样,对 Default 版本直接进行编辑。
创建其他地理数据库版本
您可通过从任意现有传统版本创建子版本或分支版本的方式在地理数据库中创建传统版本。您所创建的第一个版本是 Default 版本的子版本。创建此子版本后,该子版本与 Default 版本相同。随着时间的推移,版本会随着对 Default 版本和子版本所做的更改而发生变化。
一个地理数据库可以有多个传统版本。下面的屏幕截图显示了 ArcMap 中的 版本管理器对话框。本示例显示了对话框的树视图,描述了 Default 版本和其他四个版本以及这些版本的关联方式。Cases 版本和 Base 版本是 Default 版本的子版本,Case1 版本和 Case2 版本则是 Cases 版本的子版本。
创建版本会给您造成一个正在创建整个地理数据库副本的假象,但实际上并非如此。无论有多少个传统版本,各表和各要素类仅在数据库中存储一次。ArcGIS 会保留各要素类或表的原始格式,但会在被称为增量表的表中记录所有更改。
版本可同时被多个用户编辑。
传统版本和版本化编辑的工作原理
对任意传统版本中的数据开始执行版本化编辑之前,必须注册数据集以参与传统版本化。
在注册数据集(要素类、要素数据集或表)以便用于传统版本化工作流时,会创建两个增量表:记录插入和更新的 A(或添加)表和存储删除的 D(或删除)表。每次更新或删除数据集中的记录时,都会向这两个表或其中一个表添加行。因此,针对传统版本化注册的数据集包含原始表(称为基表或业务表)及增量表中的所有更改。进行可填充增量表的编辑时,地理数据库会追踪您所连接的地理数据库版本。查询或显示地理数据库版本中的数据集时,ArcGIS 聚合原始表和增量表中的相关行,呈现出数据的无缝视图。
无论从哪个版本进行编辑,对特定要素类或表进行的所有编辑都会记录在同一增量表中。这表示任何一个版本都只能引用这三个表中的行的子集。那么,ArcGIS 如何追踪增量表中的哪些行属于哪个版本呢?
A 表和 D 表中的各行使用被称为状态 ID 的整型标识符进行标记,以在向表中添加行时提供参考。每次编辑版本时均会创建新的状态,并向这两个增量表或其中一个增量表添加新行。状态可被看作是树结构的一部分,在树结构中,各分支记录了版本的发展情况。记录版本从基表到当前状态之间一连串变更的一系列状态称为谱系。显示或查询版本时,ArcGIS 会查询版本的谱系以获取状态 ID,然后从 A 表和 D 表中检索正确的记录。
随着对地理数据库不时进行编辑,增量表的大小和状态的数量会有所增加。表越大、状态越多,每次显示或查询版本时 ArcGIS 所必须处理的数据就越多。要维护数据库性能,地理数据库管理员必须定期运行压缩命令以移除未使用的数据。
将编辑内容移动到基表
如果在注册数据以参与传统版本化时指定将编辑移动至基表,则更改会记录在增量表中。但是,在编辑 Default 版本并保存编辑时,会立即将更改从增量表中移动至基表中,且增量表中不会保存更改。请注意,仅在编辑 Default 版本时才会发生上述情况。对后代版本进行的编辑不会立刻移动至基表。
满足以下条件时,将编辑移动至基表的选项会很有用处:
- 完成编辑仅需要花费几分钟时间。
- 数据不会参与到网络或拓扑中。
- 您将使用第三方应用程序来访问使用传统版本化的地理数据库。
大多数第三方应用程序仅查询基表,它们无法访问增量表。如果使用传统版本化且未选择将编辑移动至基表,则这些应用程序将无法整合尚未协调和发布到 Default 版本的其他版本中所做的编辑。请注意,编辑 Default 以外的版本时,会在同一增量表中记录更改。在上述其他版本中保存编辑时,更改会保留在增量表中。但是,一旦通过协调和提交过程将更改合并到 Default 版本,则系统会将更改从增量表中移动至基表中。将更改合并到 Default 以外的版本时,更改会保留在增量表中,就像尚未指定将编辑移动至基表一样。
权限及版本编辑
地理数据库版本的所有者(创建该版本的人员)或地理数据库管理员可以授予该版本的访问权限。访问权限选项如下:
- 私有 - 只有版本所有者或地理数据库管理员才可查看和编辑该版本中的数据集。
- 受保护的 - 任何用户均可查看版本中的数据,但只有版本所有者或地理数据库管理员可以进行编辑。
- 公共 - 任何用户均可查看和编辑数据,前提是他(她)已被授予对表和要素类的编辑权限。
版本访问在创建版本时设置,但版本所有者和地理数据库管理员随后可以使用版本管理器对话框对权限进行更改。有关详细信息,请参阅创建版本和设置访问权限及使用版本属性。
将表或要素类注册为版本化并创建版本(如有需要)后,您或其他编辑者即可编辑数据。如需在 ArcMap 中进行编辑,请连接到希望编辑的地理数据库版本并将版本化表或要素类添加到地图中。
默认情况下,ArcMap 中的所有编辑会话都是版本化编辑会话。因此,如果地图中存在版本化数据,那么打开编辑会话后便可立即开始进行编辑。
您所作的编辑仅适用于编辑时所连接的版本。编辑完成后,需利用祖先版本对更改进行协调,并将更改提交到祖先版本。
协调并提交更改
协调和提交操作可将更改整合到当前使用的版本的任一祖先版本,如父版本或 Default 版本。进行协调时,会将正在编辑的版本中的更改与用来合并更改的版本进行对比。
在版本中修改数据时,不会对数据应用任何锁。因此,多个编辑器在同一版本或不同版本中对同一数据进行操作会导致冲突。某行在进行对比的两个版本中不相同时会产生冲突。协调过程可显示各冲突,您还可以利用该过程选择要保留的行的表示。
实际操作中,编辑冲突是较为罕见的,因为与涉及到的地理数据的量相比,编辑的量相对较小。在正确设计的工作流中,与在编辑事务期间不必锁定或检出要素所节省的成本相比,协调冲突的成本相对较小。
完成协调并解决冲突后,可提交更改。这会将所做的更改应用到祖先版本中。如果不再需要所提交的版本(子版本),则可将其删除。此外,您还可以进一步编辑该版本,然后进行协调并再次提交更改。
版本:示例
为了说明如何使用传统版本,请参阅市政自来水公司的一个情景。自来水公司具有存储要素的地理数据库,这些要素可表示所有供水管道、阀门、抽水机及供水系统中其他组件的当前状态。该公司需要向供水系统添加新的扩展管线。
编辑器可从 Default 版本创建新版本,并将新版本命名为 Extension_project。这个新版本中将包含对新扩展管线设计所进行的编辑。但是,公司职工不确定该为新扩展管线设计 16 英寸管道还是 24 英寸管道。因此,他们根据 Extension_project 版本创建了一个版本以研究 16 英寸设计,并创建了另一个版本以研究 24 英寸设计。
员工最终决定使用 24 英寸的管道,因为其可满足 12 年以上的计划供水需求,且较高的初期建设成本相对合理。24 英寸的设计得到了认可,在对其进行精度检查和协调之后,将其发布到 Extension_project 版本。
新供水扩展管线的建设将在几个月后完成。要更新地理数据库的已发布版本,需要对 Extension_project 版本进行精度审核、协调,并将该版本发布到 Default 版本。