+ -
当前位置:首页 → 问答吧 → [SQL复制]IDENTITY列的处理

[SQL复制]IDENTITY列的处理

时间:2011-12-05

来源:互联网

环境:sql2005

方法一:
主库上改成:是(不用于复制) --现在的方法

方法二:
从库上直接去掉identity属性,让他变成简单的INT型,或者改成可插入的IDENTITY型


一直用的是第一种方法,刚才偶尔试了一下第二种方法,顺利通过。而且不会弹错误

所以,问题是:生产环境下 可不可以用第二种方法,这种方法有什么缺点?

作者: soufun91   发布时间: 2011-12-05

有可能不连续。不是自增的

作者: fredrickhu   发布时间: 2011-12-05

还是用第一种方法

作者: ssp2009   发布时间: 2011-12-05

如果标识列是主键,且库中有对应的外键,那去掉标识可能会破坏参照完整性.
因此,如果要用复制,设置了标识列的 NOT FOR REPLICATION 后,不能直接作为从表的外键.因为它可能不对.
你可以考虑不用外键约束,而在业务层检测主从关系.

作者: qianjin036a   发布时间: 2011-12-05

没有用到外键

这里说的主库(写) 从库(读),主库上字段还是IDENTITY(1,1),从库上去掉IDENTITY属性而已。这样它就不自增了。直接从主库上复制过来 岂不快哉?。。而且实验数据也正常复制过来了,没有出错

我奇怪的是有这么简单的方法,为什么还要改主库的 NOT FOR APPLICATION属性。。。

 

作者: soufun91   发布时间: 2011-12-05

TO:小F

它自增不自增没关系,刚好要的就是跟主库保持一致。。 订阅者本身也没有自增的需求,不是吗?

作者: soufun91   发布时间: 2011-12-05

想的是每个库的自增都不用123这样的
如果有两个要复制,那么一个用单数,一个用双数

四个的话,加上负数

或者。有的从1 开始有的 从亿开始。

这样合并的时候id列就不会重复

作者: Beirut   发布时间: 2011-12-05

引用 6 楼 beirut 的回复:
想的是每个库的自增都不用123这样的
如果有两个要复制,那么一个用单数,一个用双数

四个的话,加上负数

或者。有的从1 开始有的 从亿开始。

这样合并的时候id列就不会重复


不是要对等复制,还是一主一从的单向复制,只是觉得第二种方法也能解决 NOT FOR APPLICATION的问题

询问一下,第二种方法有什么坏处。

作者: soufun91   发布时间: 2011-12-05

引用 7 楼 soufun91 的回复:

引用 6 楼 beirut 的回复:
想的是每个库的自增都不用123这样的
如果有两个要复制,那么一个用单数,一个用双数

四个的话,加上负数

或者。有的从1 开始有的 从亿开始。

这样合并的时候id列就不会重复


不是要对等复制,还是一主一从的单向复制,只是觉得第二种方法也能解决 NOT FOR APPLICATION的问题

询问一下,第二种方法有什么坏处。
……

哦。实践通过没问题,那你就用吧 呵呵

弱弱的问一句NOT FOR APPLICATION 是什么?

作者: Beirut   发布时间: 2011-12-05