MSSQL - 复制和违反PK约束

时间:2012-03-29 06:30:04

标签: sql-server constraints primary-key replication

我已经设置了事务复制,并且由于带宽限制而允许从备份初始化(因此不会生成快照)。现在,当在数据库中插入数据的应用程序启动时,我们会在Publication数据库上出现此错误(好吧,它会运行一小段时间,然后会因错误而停止)。复制监视器不显示任何错误,因此发布和订阅数据库之间不一致。也不关心自动生成的ID(即使用Identity列),因为该表依赖于日期戳作为PK。错误是:

  

System.Data.SqlClient.SqlException:违反PRIMARY KEY约束''。无法在对象中插入重复键   'DBO。'。声明已经终止。

复制设置是否可以对源/发布数据库执行某些操作?这可能是由订户数据库的高延迟引起的吗?由于我没有在复制监视器中看到错误,我甚至不确定在继续复制设置时是否出现此错误。

如何解决此问题?

1 个答案:

答案 0 :(得分:0)

<强> 1。确保使用PK中的复制设置创建要复制的表/文章

之前:

CREATE TABLE [dbo].[mytable](
    [mytableID] [BIGINT] IDENTITY(1,1)  NOT NULL,

之后:

CREATE TABLE [dbo].[mytable](
    [mytableID] [BIGINT] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,

你也必须对外键做同样的事情

<强> 2。复制监视器应显示错误消息

  • 选择出版物。
  • 在右侧窗口中选择订阅 订阅窗口会弹出。
  • 选择订阅者的分发者 历史(可能不适用于拉订阅类型,然后是您 需要去订阅服务器。)
  • 此选项卡将显示分发代理商交易。 您可以将代理配置文件参数“HistoryVerboseLevel”更改为2以获取更多详细信息。如果这样做,请记住停止并启动分发代理以查看更改。这可以在没有丢失复制数据的风险的情况下完成。