【发布时间】:2023-03-28 00:47:01
【问题描述】:
我们的生产环境中有一个大数据库(100 GB),我们有两个镜像。我们使用复制来同步我们的镜像数据库。(SQL Server 2012 上的事务复制)
当我们创建复制时,我们的 DBA 首先从我们的服务器下载完整备份并将其还原到镜像服务器上,然后配置发布者 (Production-DB) 和订阅者 (Mirror-1) 之间的复制。一切正常,镜像和制作完美同步。
在每次发布之前,我们应该在我们的 UAT 服务器上使用 REAL 测试我们的系统!数据。所以我们从我们的一个镜像服务器(现场镜像)创建一个备份,然后在我们的 UAT 数据库上恢复它。
我们数据库中的所有表都有一个 PK 类似:
[ID] [int] IDENTITY(1,1) NOT NULL
在我们的 UAT 数据库中,OrderTransaction 表的最后一条记录 ID = 160.000.000,但是当我们的应用程序尝试插入该表时,系统遇到问题并引发异常。
违反 PRIMARY KEY 约束“ID”。无法在对象中插入重复键...
系统尝试插入小于 160.000.000 (ID = 145.695.000) 的整数值 当我查询数据库时,此 ID 是生产数据库的备份恢复到镜像数据库时以及事务复制开始后的最后一个 ID。 生产和镜像的所有信息均已正确同步,并且两台服务器上的表 ID 相同且相同。
当我在 UAT 或镜像数据库上运行此命令时,它返回 145.695.000
SELECT IDENT_CURRENT( 'OrderTransaction' )
当我阅读 MSDN、博客和相关的 SO 问题时,这个问题与复制和身份列有关。
但是,我怎样才能强制我们的镜像数据库在生产中增加其身份。(并接受这个值作为本地身份值)。或者我们应该编写一个脚本来为每个表重新设置种子以便在我们的 UAT 环境中进行测试!?
谢谢。
【问题讨论】:
标签: sql sql-server sql-server-2012 replication identity-column