MSSQL 合并复制 自动标识范围管理



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

如何通过自动身份范围管理重新导入此数据?

提前谢谢。

您可以执行以下操作:

  1. 确保 中的 ID 为 。分配给发布服务器的范围内的 CSV 文件。

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

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

    • 一次性插入整个文件

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

下面是一个技巧:复制代理不会选取带有 Bulk_InsertBCP 的行。因此,在运行复制代理之前,请使用FIRE_TRIGGERS选项执行sp_addtabletocontents Table_Name或运行 BCP。

4 .运行 SET IDENTITY_INSERT OFF' - 禁止插入标识值

您可以在 10 个示例行上对其进行测试,然后重置两个系统。

最新更新