【问题标题】:Missing records in SQL server tablesSQL Server 表中缺少记录
【发布时间】:2012-02-07 00:14:27
【问题描述】:

我有一个数据库,客户端似乎在一夜之间丢失了数据。他们输入记录并退出系统,然后声称第二天无法再次找到它们。

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

我已尝试使用DBCC CHECKDBDBCC REINDEX,但记录没有重新出现,问题仍然存在。

从 VB.NET 2010 应用程序退出时,我使用以下内容为每个表写入记录:

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

这个系统已经运行了 2 年,但现在正在发挥作用。数据库损坏可能是问题吗?

【问题讨论】:

  • 很难说发生了什么!您是否使用过 sql server 审计和数据库审计规范来找出谁/哪个进程使用 delete 语句访问了表?
  • 不太可能是数据库。奥卡姆剃刀法则表明,如果数据库和代码最近都没有改变,那么您需要查看数据/用户/月球的相位等作为起点。

标签: sql sql-server-2008 vb.net-2010


【解决方案1】:

现在似乎已排序 - 客户端正在运行一个镜像硬盘,其中一个硬盘开始出现 SMART 错误报告。自从更换了这个,问题就没有再出现过。

感谢您的帮助!

【讨论】:

    【解决方案2】:

    由于这刚刚开始,他们是否有可能在某个地方进入 2012 年或者与 2012 年有关,也许这个值在查找表中不存在,事务被回滚

    当一个事务回滚时,标识值没有被重用,这就是你看到差距的原因,你需要找出你有回滚的原因

    【讨论】:

    • 谢谢 - 这个问题实际上是从去年年底开始的。不过我会检查回滚。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-04
      • 1970-01-01
      相关资源
      最近更新 更多