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