啊。答案确实是一个复杂的问题,需要很多ArcSDE背景知识,因此我将尝试尽可能简短。
请注意,我将参考ESRI网站上的超棒版本白皮书中的一些图表。如果您正在处理版本控制,我极力建议您通读它。
然后,您需要了解状态(即状态树中的节点)和命名版本(即指向状态的标签)之间的关系。
典型的数据库可能看起来像下面的状态图:
在这里,数据库中有四个版本(版本A,版本B,版本C和默认)。但是也许,我有点领先了。让我们从状态开始。
您可以将状态视为“事务”-一种逻辑单元,其中包含对一个或多个表的多次编辑。它可以包括两个插入件为“要素类A”,一个删除从“功能B类”和修改(有效地删除+的插入件),以“要素类X”。全部分组为一个。
让我们看一个小而简单的ArcSDE状态图,其状态ID为0:
如果您从状态0开始并且在编辑操作中对一个或多个表进行了编辑,则将创建一个子状态1并将其设为当前活动状态id。随后的另一组编辑将创建子状态2。如果要撤消操作,则无需以任何方式修改状态ID-您要做的就是将当前活动状态ID更改为1或0(取决于您想走多远)。重做是相反的-只需将当前活动状态ID向前移动-就可以一直向前移动。
这就是在ArcSDE版本控制中撤消/重做的方式。
好,继续。假设您要永久保存编辑(即,要保存)。你该怎么办 好吧,保存只是获取版本标签并将其移至特定状态。有点像盖章然后说“这是版本A的外观”。因此,如果您回顾第一个图,您将看到它具有四个命名版本。
这是您在ArcMap / ArcCatalog中看到的父子关系。目的是限制可以协调的版本。此时,您可能(正确地)问自己,为什么我需要这个?答案在于版本控制工作流。事实证明,人们已经使用版本控制了很长时间了,并且有一些结构化方式的首选方式,但这是我第二天要讨论的话题,因为我今天想回答您的问题:)
继续...
好的,那么这个命名版本还有什么作用?好吧,它们影响了这个称为compress的过程的行为方式。
压缩就是获取不必要的中间状态,并删除不必要的状态并将其组合在一起。您可以通过ArcCatalog触发ArcSDE压缩操作,设置一个可以一次执行的服务,并且某些ArcMap编辑操作将触发微型压缩操作(即,仅针对正在使用的小分支)。
左图显示了压缩前的状态树,右图显示了压缩后的状态树:
要理解的一个重要概念(一旦我终于回答你的问题,我会指代你)是每个状态都是潜在的候选压缩对象-带有标签(即命名版本)的状态除外。
您可以看到,在压缩之前,存在一些多余的不必要状态。实际上,整个[3,4,5]分支都已删除。如果在5处有一个命名版本,最终结果将有很大的不同。
通过删除不再需要的记录,可以进行压缩操作以节省数据库空间。
好,继续。
您需要了解的最后一个概念是协调 -有效地将两个分支合并为一个。
现在让我们回到第一个图表。假设您要针对SDE.DEFAULT协调版本A。
让我们来回顾一下:指向各种状态ID的四个命名版本。因此,我们要做的第一件事是在目标版本下创建一个子状态,因此我们在状态ID 4下创建一个子状态,在我们的示例中,我将该状态ID称为20。
下一步是计算两个版本之间的差异(本篇文章的详细信息太长了,但是我可以告诉您,它们是使用游标完成的),然后将这些差异应用于新的状态ID 20(蓝线)。
假设您决定进行更多编辑,或者发现冲突,并从一个版本或另一个版本中选择行。没关系 这些只是新的编辑,并且在编辑操作中完成,因为子状态在您合并的分支下。在此示例中,协调后,我又进行了两个连续的编辑组。
可爱。
所以现在说您准备好“ 发布 ”版本了。这意味着什么?那只是抓住标签并将它们指向相同的状态ID。在这里,我将发布版本A到SDE.DEFAULT。看起来是这样的:
TADAAA!因此,现在版本A和SDE.DEFAULT指向相同的状态ID,因此它们看起来相同。
好的,现在我终于可以回答您的问题。
您可以撤消帖子吗?ArcGIS的文档会告诉你没有 -不要惹它。请勿这样做,因为您会弄混这种逻辑,如果您不知道自己在做什么,则可能会破坏数据。
但是实际上,要做的就是对其中一个ArcSDE版本控制表 VERSIONS表进行一次更新,并修改标签的条目(也称为命名版本)。在我们的示例中,指向状态ID 21,您刚刚撤消了整个编辑操作。将其设置为3,您只需取消整个协调即可。将其设置为5,现在您处在完全不同的位置。有没有冲突是无关紧要的。
当然,这假定未发生压缩。让我们考虑一下在刚好同时更新SDE表的同时进行压缩的情况。请记住,如果您-或其他人-在发布后执行了压缩,这就是树的样子:
压缩后可以撤消对帐吗?好吧,在这种情况下,不会。压缩已炸毁了整个分支,因此您无法撤消-数据已被删除。如果该分支上还有另一个命名版本,则该压缩将不会破坏该分支。我希望到现在为止这是有道理的。
那你应该这样做吗?由您自己决定,如果您不知道自己在做什么,可以在压缩后轻松释放数据。