3

我在大型数据库上设置了 MSSQL 合并复制。其中一个表有 15 亿条记录,并导致快照代理在此表上超时。所以首先我将表的数据导出到 .csv 文件,截断表,然后再次运行快照代理。现在成功了。制作快照并同步订阅者后,我想从 .csv 文件重新导入数据。但是,合并复制使用具有我无法更改的固定值的自动“身份范围管理”。这些值之一包含下一个起始值。插入表中的每条新记录都将从该值开始递增 1。但是,导出的数据当然已经有了它们的 ID 值,我也想再次导入这些对应的 ID。

我将如何通过自动身份范围管理重新导入这些数据?

提前致谢。

4

1 回答 1

1

您可以执行以下操作:

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

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

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

    • 一次性插入整个文件

或者

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

这是一个技巧:插入的行Bulk_InsertBCP不被复制代理拾取。因此,在运行复制代理之前,请执行或运行带有选项sp_addtabletocontents Table_Name的 BCP 。FIRE_TRIGGERS

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

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

于 2013-05-26T16:43:58.400 回答