没有主键的事务复制(唯一索引)

时间:2009-07-22 11:31:57

标签: sql-server primary-key transactional-replication

我刚遇到令人不安的事情,我试图从设计不受我们控制的数据库中实现事务复制。这种复制是为了执行报告而不会对系统造成过多的负担。在尝试复制时,只有一些表发生了。

由于调查表没有主键,因此没有选择复制调查表,我认为如果我使用ODBC和ms访问而不是在管理工作室中,它甚至不会显示为主键。此外,查询的速度也不是很慢。

我尝试插入重复记录,但未能说出唯一索引(不是主键)。似乎是使用唯一索引实现的表与主键相对。为什么我不知道我可以尖叫。

无论如何执行事务复制或替代方案,它都需要处于活动状态(最后一两分钟)。主数据库服务器当前是sql 2000 sp3a和报告服务器2005。

我目前唯一想到的尝试是将复制设置为另一种类型的数据库。我相信复制说oracle是可能的,这会强制使用像我假设访问正在使用因此显示主键的ODBC驱动程序。我不知道这是否准确无误。

1 个答案:

答案 0 :(得分:7)

作为MSDN states,无法在没有主键的表上创建事务复制。您可以使用Merge replication(单向),不需要主键,如果不存在,它会自动创建rowguid列:

  

合并复制使用全局   唯一标识符(GUID)列   在合并期间识别每一行   复制过程。如果发表了   table没有uniqueidentifier   具有ROWGUIDCOL属性的列   复制增加了一个唯一的索引   一。确保任何SELECT和INSERT   引用已发表的陈述   表使用列列表。如果一张桌子   不再发布和复制   添加了列,列是   删除;如果列已经   存在,它不被删除。

不幸的是,如果使用合并复制,您将会受到性能损失。

如果您只需要将复制用于报告,并且您不需要数据与发布者上的数据完全相同,那么您也可以考虑快照复制