sqlserver对等发布——(三)踩坑随笔

【坑点1】

如果 sqlserver 服务 重启过,最好把 sqlserver代理 服务 也重启下,否则有可能会出现 未初始化的订阅 的错误,导致同步失效。

 

【坑点2】

对等复制,报 22815 的错误,Insert-Insert 的 主键 冲突, 见下图

 

 

分析原因:

 

经过检查,发现a表有触发器,在a表插入记录的时候,同时向b表也插入一条记录,这样在同步的时候,被同步的库在同步a表记录后,也通过触发器向b表插入了一条记录,这样在同步b表插入记录的时候,就已经存在了一条相同记录。

 

解决办法:

 

1、配置订阅任务,将 冲突检测后继续复制 改为 true

 

 

 

 

 

 

 2,将从表的触发器设置为禁用或删除,但如果两个库需要切换使用的情况下,推荐用第一种解决办法

 

【坑点3】

A库和B库对等同步,比如主库是A,备库是B,在切换B库为主库时,插入记录的时候出错,原因是B库的表中,自增ID的基础值还是在同步A库之前的值,

需要在有自增ID的表中创建触发器:

USE [dbName]
GO

ALTER TRIGGER [dbo].[trig_setID]
ON [dbo].[tbName]
AFTER INSERT
AS
BEGIN
DBCC CHECKIDENT('tbName', reseed);

END

 

顺便扩展一下CHECKIDENT命令:

1、DBCC CHECKIDENT ('tbName', NORESEED) 这个是查询当前表 tbName 的自增ID值,到多少了,下一条记录是这个值+1
2、DBCC CHECKIDENT('tbName', reseed, 10) 这个是把当前表 tbName 的自增ID值重置到 10,下一条记录从 11 开始
3、DBCC CHECKIDENT ('tbName', RESEED) 这个是把当前表 tbName 的自增ID值重置为ID列的最大值,也就是最大的ID数字,下一条自动会加1

 

posted @ 2021-01-29 02:17  ktfaith  阅读(616)  评论(0)    收藏  举报