2011-03-17 43 views
1

我在两个不同的服务器上有两个相同的数据库:一个主数据库和一个备份数据库。用户目前在两个服务器中。我们在tblOrder中有一个OrderId列作为自动递增主键。现在,当我将orderid发布到我们的amazon服务器时,它有时会显示错误,因为两个数据库上的orderid都是相同的数字,并且系统不接受重复的orderid。通过比较两个不同的数据库获取最大ID

我想从两个服务器获取最大的orderid,然后将新的orderid赋给当前工作的数据库。我将从中删除自动递增的种子,以便在插入命令中手动插入orderid。

+0

是SQL-Server还是Oracle? – CloudyMarble 2011-03-17 06:28:46

+0

谢谢你们这么棒的主意。我一定会执行它。 :-D – 2011-03-17 09:06:26

+0

这里的解决方案是让您的生产用户退出备份数据库。 – 2012-03-24 01:37:37

回答

4

解决方案:

  1. 如前所述,您可以更改每个标识字段设置为2的增量,并有一个服务器的1和种子其他的种子为2.

  2. 假设您没有预见到在每台服务器上处理超过10亿个订单,只需将第二台服务器上的种子设置为1,000,000,000。无需改变增量。

  3. 使用uniqueidentifier(GUID)作为主键而不是整数。对于SQL Server 2005及更高版本,可以将缺省约束设置为NEWSEQUENTIALID(),以防止插入不断创建页面拆分。

+0

我同意你的意见,但我们的服务器每天做约5,000,000每天的交易。它会正常工作。但这不是一个永久的解决方案。但我会执行你的观点3,确实非常有用。感谢: - 分享它。 – 2011-03-17 09:08:29

1

在MS-SQL中,您可以为自动编号字段指定种子和增量。 使种子不同,选择的增量= 2

+0

可能值得一提的是两个种子之间的差异必须是奇数:) – 2011-03-17 06:42:37