2012-01-10 133 views
9

我有一个数据库就位,客户端似乎在一夜之间丢失了数据。他们输入记录并退出系统,然后宣称第二天不能再找到它们。SQL服务器表中缺少记录

受影响的表的主键索引中的ID号似乎在自动递增且连续的情况下存在差距。客户端没有删除记录的功能,所以似乎存在问题。

我试过使用DBCC CHECKDBDBCC REINDEX但记录不会重新出现,问题仍然存在。

在退出的VB.NET 2010应用程序,我用下面写的记录为每个表:

Me.binds_Tablename1.EndEdit() 
Me.binds_Tablename2.EndEdit() 
TableAdapterManager.UpdateAll(Me.Dataset_1) 

该系统已2年工作得很好,但现在打起来。数据库腐败可能是问题吗?

+0

很难分辨发生了什么!您是否使用过SQL Server审计和数据库审计规范来查明谁使用删除语句访问了哪些表? – Mithrandir 2012-01-10 15:32:59

+0

不可能是数据库。 Occam的Razor会指出,如果最近数据库和代码都没有改变,那么你需要将数据/用户/月相等作为起点。 – Simon 2012-01-10 15:42:04

回答

0

这现在看来是排序 - 客户端运行一个镜像硬盘,其中之一是开始使用SMART错误报告。由于这被替换,问题没有重新发生。

感谢您的帮助!

2

如果内存服务,TableAdapterManager.UpdateAll()方法将更新包装在事务中。自动递增字段在事务之外增加,所以我猜测你的一些事务可能会回滚。

+0

谢谢,我会检查一下。 – 2012-01-10 15:44:41

3

,因为这只是开始,是有可能,他们正在某处进入2012年或它关系到2012年,也许这个值不会在查找表中,该交易被回滚

当一个事务回滚身份值不被重用,这就是为什么你看到差距,你需要找出为什么你有回滚

+0

谢谢 - 这个问题实际上是去年年底开始的。尽管我会检查回滚。 – 2012-01-10 15:44:14