首页 > 开发 > 综合 > 正文

Replication的犄角旮旯(五)--关于复制identity列

2024-07-21 02:50:22
字体:
来源:转载
供稿:网友
Replication的犄角旮旯(五)--关于复制identity列

《Replication的犄角旮旯》系列导读

Replication的犄角旮旯(一)--变更订阅端表名的应用场景

Replication的犄角旮旯(二)--寻找订阅端丢失的记录

Replication的犄角旮旯(三)--聊聊@bitmap

Replication的犄角旮旯(四)--关于事务复制的监控

Replication的犄角旮旯(五)--关于复制identity列

Replication的犄角旮旯(六)-- 一个DDL引发的血案(上)(如何近似估算DDL操作进度)

Replication的犄角旮旯(七)-- 一个DDL引发的血案(下)(聊聊logreader的延迟)

Replication的犄角旮旯(八)-- 订阅与发布异构的问题

Replication的犄角旮旯(九)-- sp_setsubscriptionxactseqno,赋予订阅活力的工具

---------------------------------------华丽丽的分割线--------------------------------------------

今天被群友问到复制环境中identity属性的问题。在此通过几个测试说明一下identity列是如何在复制环境中实现的;

以下测试均是基于SQLSERVER 2012 SP1下的事务复制环境;

先抛出几个测试目的;

1、identity列和not for replication的关系,发布端及订阅端何时添加not for replication属性

2、快照初始化、备份初始化、不初始化订阅对not for replication参数的依赖

3、如何添加not for replication,在哪添加not for relication,以及替代not for replication的方法

先解释一下not for replication

NOT FOR REPLICATION

在 CREATE TABLE 语句中,可为 IDENTITY 属性、FOREIGN KEY 约束和 CHECK 约束指定 NOT FOR REPLICATION 子句。 如果为 IDENTITY 属性指定了该子句,则复制代理执行插入时,标识列中的值将不会增加。 如果为约束指定了此子句,则当复制代理执行插入、更新或删除操作时,将不会强制执行此约束。

http://msdn.microsoft.com/zh-cn/library/ms174979.aspx

简单说,对于identity、外键约束、check约束,可以通过指定not forreplication避免订阅端写入数据失败;

测试开始:

  先在同一个实例下创建两个库test_byxl_1、test_byxl_2,分别作为本次测试的发布库和订阅库;

  

  test_byxl_1下创建tb_ident_1表,结构如下

1 create table test_byxl_1.dbo.tb_ident_1 (id int PRimary key identity ,name varchar(10))
View Code

  添加这个表的发布,只创建publication、添加article即可;

  

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表