玩转C科技.NET

从学会做人开始认识这个世界!http://volnet.github.io

导航

[FIM]两张表结构相同完美同步,如何做?ObjectAlreadyExistsException

假设有这么一个场景:
 
    表1和表2,假设结构相同(这不是重点),两张表都以userId作为Key。目标是从表1的数据同步到表2。
 
    实现:1、表1中有,表2中没有的数据,从表1同步到表2。
 
              2、表1中有,表2中也有的数据,以表1的各个字段为准。
 
              3、表1中没有,表2中有的数据,在表2中继续保留。
 
做法1:
 
    两个MA,分别以userId作为Anchor,DistinguishedName,并且字段分别映射。
 
    为MV编写Provisioning代码,并设置选项为启用MVExtension。
 
    同步顺序:表1 FullImport -> 表2 FullImport -> 表2 FullSync -> 表1 FullSync -> 表2 Export
 
    存在问题:
 
           当表2中原本存在数据,且该数据已经在表1中存在的时候,该条记录将引发ObjectAlreadyExistsException异常,该条记录没有处理,但正确的行为是不是应该是Join?遇到这个情况(异常)正确的解法是什么?
 
做法2:(改进做法1)
 
    考虑到有ObjectAlreadyExistsException异常,因此打算在Provisioning代码中将此异常抛弃,算作正常行为(因为此时对象确实存在),这样FIM应该按照自行逻辑进行Join操作?但是事实上,并非我所想(应该是理解有误),MV数据里面既有表1的数据,也有表2的数据,互不相干。

解决方案:

    当表1中的数据在表2种已经存在的时候(第一次同步)会抛出ObjectAlreadyExistException,应先关闭MV扩展(Tools->Options->清空第一个复选框),执行表2的FullImport->FullSync,然后再打开MV扩展,执行正常同步(表1的FullSync)。

    在实际操作过程中,其实通常并不需要先关闭MV扩展,只需要将表2先做一次FullSync,这样表1再做FullSync的时候,就可以避免这个问题了。

posted on 2012-01-03 05:03  volnet(可以叫我大V)  阅读(834)  评论(0编辑  收藏  举报

使用Live Messenger联系我
关闭