MSSQL合并复制自动身份范围管理

时间:2012-06-07 10:15:45

标签: sql-server constraints replication

我在大型数据库上设置了MSSQL合并复制。其中一个表有15亿条记录,导致快照代理在此表上超时。首先,我将表的数据导出到.csv文件,截断表,然后再次运行快照代理。现在取得了成功。在创建快照并且订户已同步之后,我想从.csv文件重新导入数据。但是,合并复制使用具有固定值的自动“身份范围管理”,我无法更改。其中一个值包含下一个起始值。插入表中的每个新记录将从此值开始递增1。 但是,导出的数据当然已经有了ID值,我想再次导入这些相应的ID。我已经将发布者/订阅者范围大小设置为100亿,但只有这样才能解决问题。

我如何能够使用自动身份范围管理重新导入此数据?

提前致谢。

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

  1. 确保.CSV文件中的ID在分配给Publisher的范围内。

  2. 运行SET IDENTITY_INSERT <Table Name> ON - 这将允许插入标识值

  3. 将数据插入表格。有两种方法可以做到:

    • 一次性插入整个文件
  4. OR

    • 插入行的子集,然后确保它被复制:创建SSIS包,每100k或1M行将插入它们,然后运行复制代理。

    这是一个技巧:复制代理不会选择使用Bulk_InsertBCP插入的行。因此,在运行复制代理程序之前执行sp_addtabletocontents Table_Name或使用FIRE_TRIGGERS选项运行BCP。

    4。运行SET IDENTITY_INSERT OFF` - 禁止插入标识值

    您可以在10个样本行上测试它,然后重置两个系统。