Geodatabase and ArcSDE系列讲座 第四部分:Versioning(版本)

Versioning使得多个用户能够同时编辑一个Geodatabase,而不用去复制数据库或者锁定数据库。一个Geodatabase能够有很多Version,事实上不管一个Geodatabase有多少个Version,数据库中只保存一套Tables和Feature Classes。Version是对Geodatabase的快照,而不是复制。对所有版本的编辑都是保存在Delta表中的。通过创建Version,多个用户可以同时对一个Geodatabase进行编辑,而且多个用户也可以同时编辑一个Version。

    在ArcCatalog和ArcMap中,可以像未版本化的数据一样实现数据的查询、浏览和编辑。当用户连接一个多用户的Geodatabase时,通常需要选定连接哪个Version。

    所有的ArcSDE Geodatabase均具备Default 版本,所有版本的最原始的源就是Default版本。能够通过提交更新的方式来维护和更新Default版本,也可以对其直接编辑。

     用户在创建版本时,可以为版本设定访问权限。对某个版本的编辑只会应用到该版本,而某个版本中Schema的变化则会影响到所有其它的版本。一旦停止编辑,可以将编辑结果提交到任意父版本。首先要Reconcile,即比较提交版本中的数据与父版本是否有冲突,如果有冲突则提供冲突解决办法。然后就是Post,则将编辑结果提交到父版本。

    每一个Table和Feature Class包含两个Delta表:A表和D表。每次更新或者删除版本中的一个记录时,则可能对一个或者两个Delta表进行修改。一个Version包含所有的Original 表以及所有的Delta表的变化,当显示和查询一个版本时,ArcGIS是从Original表和Delta表中查找相应的信息。

    对于Feature Class和Table的所有编辑,不管是位于哪个Vision中,都是保存在相同的Delta表中。因此Base中的所有行,以及A和D表的所有记录表示了Feature class和Table的所有版本的信息,任何一个版本都是这三个表的子类。

    ArcGIS记录Delta表中的记录属于哪个Version的办法是:A表和D表的每一行都用State ID进行标识。当编辑一个版本时,产生一个新的State,同时产生新的一行添加到A表或者D表。一个系列的States记录了版本从Base表到当前状态,该系列称为Lineage。当你显示或者查询一个Version时,ArcGIS从版本的Lineage中得到State ID,然后从A表和D表中找到相应的信息。

      当编辑Geodatabase时,Delta表的大小和State的数量都在增加,表格与State越多,每次处理时的速度就越慢,因此应该定期利用ArcCatalog中的Compress工具进行数据库压缩,利用Analyze工具实现数据库的Statistics的重建。

     在进行数据库处理的时候,有三种选项:Registered As Visioned without the option to move edits to base ,registered as visioned with the option to move edits to base,not registered as versioned.
    (1) Registered As Visioned without the option to move edits to base
能够实现的操作包括Undo和Redo操作、长事务编辑、为设计和工程使用命名版本、使用Geodatabase归档、使用数据库复制。
不能做的事:创建拓扑、从拓扑中添加或删除要素、添加和删除拓扑规则、创建几何网络、从几何网络中添加或删除要素类。
    (2) registered as visioned with the option to move edits to base
不能够做的事:编辑参与拓扑和几何网络的要素类、数据库归档、数据库复制
   (3)not registered as versioned
    是最原始的状态,能够实现复杂数据类型,包括拓扑和几何网络的编辑与更新。因为Default版本是数据库中最关键的,需要经常更新,因此需要对Default版本定期备份。

     如果用户注册版本时采用的是Register with the option to save edits to the base table,编辑简单要素时,编辑的结果还是保存在Delta表中,一旦保存,则这些变化就要从Delta表转移到Base Table中,而在Delta表中不再保存编辑的结果。用户如果编辑的不是Default版本,则变化也是记录到Delta表中,Save以后,变化也依旧保留在Delta表中,然而当Reconcile和Post到Default版本以后,变化就转移到Base 表中了。如果是将版本中的变化Reconcile和Post到非Default版本,则在Delta表中依旧会保留变化信息。Register with the option to save edits to the base table的缺陷就是一旦编辑错误,不能够回退,只能够放弃整个编辑过程。这种方法主要是使得第三方应用能够在版本化的环境下执行类似Non-Version 编辑,而ArcGIS用户是不能够通过这种设置来实现Non-Version编辑的。

     第三方应用(非ArcGIS软件或者非AO开发的软件)通常是只能对Base Table进行查询,不能够看到Delta表中的变化。如果将数据注册为版本化,而不选择move the edits to the base table,当用户还没有将编辑结果Reconcile和Post到Default版本时,第三方用户是无法看到其他版本的编辑情况。
Unregistered as Versioned将使得用户保留上一次Compress后的数据,而未Compress的数据则将丢失。

     对于海量的、多用户的数据库,可以使用 自动Reconcile和Post的功能。有两种方式可以实现: Batch ReconcileVersion Reconcile Services
     在版本化编辑中,可以多个用户同时编辑一个版本中的数据,也可以多个用户同时编辑同一数据库的不同版本。这两种情况会导致以下两种冲突的发生:
    (1)多个用户同时编辑一个版本中的数据:当多个用户同时编辑一个Version时,对每个用户都创建一个Edit Session,每个用户都不能看到其他用户的编辑状态,只有用户Save Edits以后,才能够看到其他用户的编辑状态。如果多个用户同时对一个要素做了不同的操作,则会发生Conflicts,在保存编辑结果时,会出现冲突信息,则根据在Editing Options的Versioning面板上设置的Preferences来处理冲突,看应该保存哪个用户的编辑结果;
    (2)如果是子版本和父版本的编辑发生冲突,则在Reconcile的时候会出现冲突信息,用户可以手动去解决冲突;如果用户正在查看的版本又被提交了新的内容,则用户只有Refresh以后,才能看到更新以后的内容。

 

你可能感兴趣的:(数据库,schema,网络,table,Class,statistics)