我想了解在以下Lotus-Domino服务器到服务器复制场景中会发生什么:
- 服务器A有一个数据库副本。
- 服务器B有相同数据库的副本。
- 两个服务器都有对数据库的管理权限,包括删除文档的权限。
- 复制器进程刚刚复制了A和B,并且都是同步的。
- 数据库包含一个注释,该注释有一个reader字段,其中提到了两个服务器。 在服务器A上,服务器B的条目从readers字段中删除。
- 服务器A向b发起复制。
在这个场景中,我期望服务器A将从服务器B中删除文档。该场景有多种变体,服务器C与B复制,B与A启动复制。
我有一个围绕这个期望构建的应用程序,它在大多数时候都运行良好。但是服务器B上仍然有一些注释,它们被排除在复制过程之外。OID保持不变。在某些情况下,DSN在两个注释上都进行了更新,但在复制过程中没有任何结果。
确实,一旦readernames字段不再包含serverB的条目,那么备注本身对serverB是不可见的,但是备注已经更改的事实对复制器不是不可见的。复制器应该注意到这一点,确定serverB不再具有对文档的权限,并删除它——而不留下存根。
您是否尝试清除两侧的复制历史?
这是一个很容易陷入的陷阱,你不应该使用Reader字段来控制服务器之间的复制,它们非常适合控制用户和组,但是一个复制组中的所有服务器应该总是可以访问所有内容。
在服务器B上保留/不更新文档的原因是,从文档的reader字段中删除服务器B使其对服务器不可见,因此它不知道它已更改或已被删除。删除在服务器的原因被服务器B是删除将文档转换为一个删除存根UNID那么多读者字段也会使删除"可见"服务器B,你甚至不能迫使服务器写入服务器B,因为服务器就知道服务器B不允许看到文档所以推动复制将忽略文档的问题。
IBM已经为此创建了一个SPR:
Problem正常情况下,当服务器从一个文档,在计划复制发生后,该文档为从服务器上删除,因为该服务器不再有权访问文档。在某些情况下,当从中删除辅助服务器时位于主服务器上的文档的Reader字段复制发生在两个服务器之间,而文档不是已按预期从辅助服务器删除。启用复制debug会在源服务器上显示以下错误:"您不是被授权执行该操作"。清除复制无法解析历史记录和从两个服务器初始化复制这个问题。经进一步调查,确定辅助服务器上的文档具有更高的序列号的文档更新时间较晚主服务器。通常,当文档不包含阅读器时字段中列出了复制所涉及的两个服务器文档的两个副本的Reader字段,复制冲突之前在两个服务器上修改文档时会生成吗开始复制。然而,在这种特殊情况下,既然辅助服务器没有访问文档的权限主服务器,复制失败,如预期和复制不产生冲突是因为为了使冲突文档生成时,两个服务器都需要有访问文档的权限。
解决问题1)。短期的解决方案是修改主服务器上的文档,使其序列号高于主服务器上的文档备用服务器。复制发生后,更改是否应该复制到辅助服务器,文档应该是已按预期从辅助服务器删除。2)。更持久的解决方案是防止用户和服务器几乎同时对两个服务器上的文档进行更改时间。此外,更频繁地复制应该有助于减少发生这种情况不会发生,因为在一台服务器上所做的更改将可能在对另一个进行更改之前进行复制服务器。这个问题在SPR MKHS8MLQVD下被跟踪
我们在整合服务器时遇到过类似的情况,但结果并不理想。如果我使用服务器A/服务器B的场景我们的情况是服务器B与服务器A复制文档从服务器B中消失了。不幸的是,这被跟踪为删除所以当A和B再次复制时文档就从服务器A中删除了。
幸好我们有备份。