环境:发布服务器A Windows2008+SQL2008,分发服务器B Windows2008+SQL2008,订阅服务器C Windows2008+SQL2012
发布服务器A上的用户信息表member,通过事务复制,推送到订阅器C上的用户信息表member。订阅服务器C上存在一张用户账户表,之前的机制是通过在用户信息表上的insert触发器往用户账户表初始化数据。
问题:发布服务器上的用户信息表的某一字段与订阅服务器上的用户信息表的某一字段内容不一致,近一个月出现了两次,运营反馈这个问题已经持续很长一段时间,希望我们能彻底解决,而不是每次用户反馈了再查再同步!
处理:主库导一份用户数据到订阅数据库上,对比不一致的字段有多少记录,无意中发现订阅的数据量少于发布的记录数。问题重心由字段不一致转移到数量不一致,是什么原因导致记录条数都不一样呢?启动复制监视器,查看分发到订阅的历史记录,发现下面的错误信息,查看这些时间点主库有记录插入,但订阅上找不到对应记录。
此时基本可以想到是插入过程中出了问题,如果有分发库上的权限完全可以查出具体的错误信息。现在假设数据已经传到订阅数据库,由于某种原因,导致数据没能插入成功。 2、模拟触发器
模拟生产环境下通过触发器将用户表中的数据插入到用户账户信息表。
1 create table test1 (id int ,name varchar(20),date datetime default getdate()) 2 create table test2 (id int ,name varchar(20),date datetime default getdate()) 3 create unique nonclustered index [uniqueindex] on [dbo].[test2] ([id] asc) 4 create trigger tr_test1 5 on test1 6 for insert 7 as 8 begin 9 insert into test2(id,name,date) 10 select * from inserted 11 end 12 --连续插入两次 13 insert into test1 select 1,\'abs\',getdate()