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