问题描述:
从A导入数据,同步到B,在A系统中删除数据,在B系统中删除数据。
前提:A、B已经完成一次FULL_IMPORT、FULL_SYNC,假设在A中的数据在B中的数据(不考虑过滤),都一一对应。
按照之前的思路,在A中删除一条记录后,通过FULL_IMPORT的时候,在CS_A中会删除记录A,通过FULL_SYNC,因为CS_B中的DATA_1仍然与MV保持Connected,因此包括MV在内一直都会存在该条记录。
解决方案:
1、 首先要让MV中把这条记录删除才可能导致B系统删除该数据。
之所以出现以上现象的原因是在于MV的默认配置所决定的,右键对应的MV,“Configuration Object Deletion Rule…”,这是改变MV对象删除规则的。该设置默认为第一项,也就是考虑到所有MA都有可能成为源,当某MV对象与所有MA都断开联系后,才删除对应的MV,类似C++的引用计数。我们这里的需求是,一旦A中删除,就将其他系统中的该记录删除,因此这里就需要配置成第二项,任何一个被勾选的对象被删除之后,都删除该MV对象。
2、 完成了第一步还不够的,因为它只提到了删除MV中的对象,但并不会删除CS_B中的对象,因此这时CS_B中的对象是孤立无援的,在FIM中是disconnected object,这样的对象会在下次同步的时候,继续参与规则讨论。因此我们要把这种没有户口的对象删掉。做法就是在对应的MA的配置中,配置“Configure Deprovisioning”,指示在一个CS对象与MV失去联系后的行为,选择第三项“Stage a delete on the object for the next export run”,该选项表明在失去联系后在接下来的export操作执行的时候删除数据。这里会删除connected data source中的数据也就是DB_A,但是不会删除CS_A中的数据,因为这一步操作在下一次FULL_IMPORT的时候是会被处理掉的。
3、 执行FULL_SYNC、EXPORT,数据依次从MV、DB_B中删除,检查DB_A,确实删掉了,执行B.FULL_IMPORT,CS_B中的数据也删除了,至此完成了这条记录的整个删除生命周期。