【发布时间】:2014-12-16 15:53:37
【问题描述】:
我最近遇到一个奇怪的问题,在 Sql Server 2008 中只出现过一次。
我在 .net Web 应用程序 (C#) 中工作,并使用 SqlCommand 访问我的数据库并执行查询。我的流程如下:
-
我有一个视图可以让我获得特定表中存在的最大数量:
选择 MAX(数字) 作为 MaxNumber 来自我的表
我在一个变量中获取了这个 MaxNumber,并使用这个变量在 MyTable 中执行插入操作,MaxNumber + 1。这样,我总是在 MyTable 中记录最大数量
从一周前的一次开始,它运行良好,突然,我看到一个从 134200 到 1000000 的 MaxNumber!
我调查了我的代码,但不可能是这种行为的原因。我还检查了 Web 服务器的日志,没有抛出错误插入的日志。
我还查看了 Sql Server 的日志,但没有发现错误日志...
可疑的是,该数字从“普通”数字 (134200) 传递到“特定”数字 (1000000)。为什么是 1000000 ?为什么不是 984216 或 1000256?
有人遇到过同样的问题吗?
感谢您的帮助。
编辑 - 2014-12-23:
我进一步分析了这个问题,它似乎是在我在 PreProd 环境中恢复备份时发生的。
我解释一下:我有 PreProd 服务器,我有一个 Sql Server 实例 (PreProd),我有一个 Prod 服务器,我还有一个 Sql Server 实例 (Prod),每天都在同一台服务器上备份。
当我想使用有效数据进行测试时,我会在我的 PreProd 数据库上恢复 Prod 备份:
RESTORE DATABASE PreProd
FROM DISK = '\\Prod\Backup\SQL\Prod.bak'
WITH MOVE 'Prod' TO 'E:\Bases\Data\PreProd.mdf',
MOVE 'Prod_log' TO 'E:\Bases\Data\PreProd.ldf',
REPLACE
问题发生在我恢复备份的同一天。 “1000000 行”出现在我恢复的同一时刻,在我的 Prod 数据库中。有没有关联的可能性? Prod 服务器是否被我的 PreProd 服务器执行的 restore 命令淹没了,最终导致同时发生的 Insert 请求崩溃?
感谢您的建议
【问题讨论】:
-
那是一个身份列
-
将值恢复为134201会发生这种情况吗?
-
我假设 MyTable 中有 1000000 的记录,而 134201 - 999999 没有记录
-
@NoDisplayName : 不,这不是身份列
-
@faby : 今天下午我将恢复 134201 的值
标签: c# sql-server sql-server-2008 sql-server-2008-r2