我们采用了 SQL 2000 数据库。进行了光速备份。在 SQL 2008 主动/被动群集上恢复。然后设置复制以将数据复制回 SQL 2000。因此 2008 是发布者/分发者,而 2000 正在进行拉取订阅。一切运行良好,只是我们偶尔会在订阅者的 varchar/text 字段中收到损坏的数据。
例如,我们有一张包含 4500 条记录的表。当我们运行此语句时:
update MedstaffProvider set Notes = 'Cell Phone: 360.123.4567 Answering Service: 360.123.9876'
where LastName = 'smith'
2008 年数据库中的记录按预期更新。但在订阅者数据库中,我们会在注释字段中看到乱码:
óPÌ[1] T $Oé[1] ð²ñ. K
以下是我们所知的信息:
- 这是可重复的,这意味着我们可以整天运行相同的查询并得到相同的乱码。如果您稍微修改更新语句,数据就会被很好地复制。
- 两个数据库的排序规则相同。
- 到目前为止,我们仅检测到 text/varchar 字段的问题。(上面的 notes 字段是文本)。
- 表中只有一条或两条记录受到影响。
- 2000/2008 中的表结构看起来相同。我们没有做任何更改。
我们找到了一个可以解决这个问题的解决方案。基本上,如果我们在 2008 年重新创建表(例如 MedStaffProvider2),然后插入所有数据。删除原始表。将表重命名为其原始名称。再次设置复制。然后运行完全相同的更新语句,它就会按预期工作。
有人知道这里可能发生了什么吗?或者我们可以使用其他技术来解决这个问题吗?我找到了解决方案,但真的很想知道为什么会发生这种情况。
答案1
如果您在分发数据库和订阅数据库上运行 SQL Profiler,您是否会同时在分发数据库和订阅数据库上看到损坏的数据,还是只在订阅数据库上看到损坏的数据?
您是否尝试过在发布者/分发者上运行分发代理?