如果撤消读取器访问,则在服务器到服务器复制期间会发生什么

时间:2011-08-10 15:09:59

标签: replication lotus-notes lotus-domino

我想了解以下Lotus-Domino服务器到服务器复制方案中会发生什么:

  • 服务器A具有A数据库的副本。
  • 服务器B具有相同数据库的副本。
  • 两台服务器都具有数据库管理员访问权限,包括删除文档权限。
  • 复制器进程刚刚复制了A和B,并且所有进程都处于同步状态。
  • 数据库包含一个注释,其中包含一个提及两个服务器的reader字段。
  • 在服务器A上,将从reader字段中删除服务器B的条目。
  • 服务器A使用B启动复制。

在这种情况下,我希望服务器A将从服务器B中删除文档。方案有变化,服务器C与B复制,B用A启动复制。

我有一个围绕这个期望构建的应用程序,并且它在大多数时间都运行良好。但是有一些注释保留在服务器B上,并且从复制过程中排除。 OID仍然不同。在某些情况下,DSN会在两个备注上更新,而不会在复制过程中产生任何结果。

4 个答案:

答案 0 :(得分:3)

实际上,我不同意AndrewB的回答。根据我的经验,它应该按照您的期望工作。使用readernames字段来控制复制已经成为我标准武器库的一部分已有15年多了,我发现它比选择性复制的替代方案更可靠 - 这是邪恶的,应该不惜一切代价避免,但这是另一个故事!

确实,一旦readernames字段不再包含serverB的条目,注释本身对于serverB是不可见的,但是注释已经改变的事实对于复制器是不可见的。复制者应该注意到这一点,确定serverB不再拥有该文档的权限,并将其删除 - 而不留下存根。

您是否尝试过清除双方的复制历史记录?

答案 1 :(得分:2)

这是一个容易陷入的陷阱,您不应该使用Reader字段来控制服务器之间的复制,它们非常适合控制用户和组,但复制组中的所有服务器应始终可以访问所有内容。

在服务器B上保留/未更新文档的原因是从文档上的读取器字段中删除服务器B使得服务器不可见,因此它不知道它已经改变或被删除。服务器A上删除服务器A的原因是删除将文档转换为删除存根,该删除存根只是UNID,因此读取器字段也会使删除“可见”到服务器B.你不能甚至强制服务器A写入服务器B,因为服务器A将知道服务器B不允许查看文档,因此推送复制将忽略相关文档。

答案 2 :(得分:2)

IBM为此创建了SPR

  

问题通常,当从a的reader字段中删除服务器时   文档,在计划复制发生后,文档是   从服务器删除,因为该服务器不再具有访问权限   文献。在某些情况下,从中删除辅助服务器时   之后驻留在主服务器上的文档的reader字段   复制发生在两个服务器之间,文档不是   按预期从辅助服务器中删除。启用复制   debug在源服务器上显示以下错误:“你不是   授权执行该操作“。清除复制   历史记录和从两台服务器启动复制无法解决   问题。经过进一步调查,确定了   辅助服务器上的文档具有更高的序列号   暗示它的更新时间比最近的文件更新   主服务器。通常,当文档不包含阅读器时   字段或复制中涉及的两个服务器都列在   reader字段的两个副本文件,一个复制冲突   将在以前在两台服务器上修改文档时生成   复制发生。但是,在这种特殊情况下,因为   辅助服务器无权访问该文档   主服务器,复制失败,如预期和复制   因为冲突文件的原因不会产生冲突   生成后,两台服务器都需要访问该文档。

     

解决问题   1.)短期解决方案是修改主服务器上的文档,使其序列号高于文档   辅助服务器。复制发生后,更改   应该复制到辅助服务器,文档应该是   按预期从辅助服务器中删除。   2.)更持久的解决方案是防止用户和服务器在两台服务器上对文档进行更改   时间。此外,更频繁地复制应该有助于减少机会   由于在一台服务器上进行的更改将发生这种情况   可能会在另一方面进行更改之前复制出来   服务器。 SPR MKHS8MLQVD

正在跟踪此问题

答案 3 :(得分:0)

当我们整合服务器时,我们遇到了类似的事情,而且对我们来说效果不佳。如果我使用您的服务器A /服务器B场景,我们发生的事情是服务器B与服务器A复制,文档从服务器B中消失。不幸的是,这被删除,因此当A和B再次复制时,文档随后从服务器中删除甲

幸运的是我们有备份。