我已经在一个大型数据库上设置了一个MSSQL合并复制。其中一个表包含 15 亿条记录,并导致快照代理在此表上超时。因此,首先我将表的数据导出到.csv文件,截断表,然后再次运行快照代理。现在成功了。创建快照并同步订阅服务器后,我想从.csv文件中重新导入数据。但是,合并复制使用具有固定值的自动"身份范围管理",我无法更改。其中一个值包含下一个起始值。从此值开始,插入到表中的每条新记录将递增 1。但是,导出的数据当然已经具有其ID值,我也想再次导入这些相应的ID。我已经将发布者/订阅者范围大小设置为 100 亿,但只有这样才能解决问题。
如何通过自动身份范围管理重新导入此数据?
提前谢谢。
您可以执行以下操作:
-
确保 中的 ID 为 。分配给发布服务器的范围内的 CSV 文件。
-
运行
SET IDENTITY_INSERT <Table Name> ON
- 这将允许插入标识值
将数据 插入表中。有两种方法可以做到:
- 一次性插入整个文件
或
- 插入行的子集,然后确保复制它:创建 SSIS 包,每 100k 或 1M 行插入它们,然后运行复制代理。
下面是一个技巧:复制代理不会选取带有 Bulk_Insert
或 BCP
的行。因此,在运行复制代理之前,请使用FIRE_TRIGGERS
选项执行sp_addtabletocontents Table_Name
或运行 BCP。
4 .运行 SET IDENTITY_INSERT OFF' - 禁止插入标识值
您可以在 10 个示例行上对其进行测试,然后重置两个系统。