0

我有一些非常奇怪的问题。我有一个从多个客户端运行在 Windows 2003 终端服务器上的应用程序。该应用程序使用 SQL Server 2008 Express 作为其数据库。

昨天,我连接到应用程序,关闭了服务器上一些没有响应的会话,令我惊讶的是,我发现数据库中缺少一些数据。经过进一步搜索,我发现上周所做的所有数据库更改都丢失了。

就像数据库回滚了所有的变化,回到了一周前的状态!我可以确认所有更改都已丢失。事实上,我已经将一条记录插入到一​​个表中identity_insert ON(在自动数字列上手动插入一个 ID)并且该记录丢失了,所以这不可能是程序故障。

有谁知道这里会发生什么?

编辑

我有一个疑问:会话发起的事务是否可以在一周内保持未确认状态,保留所有数据库更改,并在我关闭会话时回滚所做的所有更改?

编辑二

在日志中找到这个: 日志

4

2 回答 2

1

SQL Server 永远不会将数据库回滚到以前的状态(像这样)。恢复了数据库,或者回滚了整个磁盘/VM,或者执行了 DML 以产生回滚发生的印象(但实际上没有)。也许有人以错误的方向执行了同步工具。

该问题没有可以找到问题的信息。但它肯定不是 SQL Server 回滚数据库。

您可以尝试使用检查日志fn_dblog

于 2015-04-24T13:13:11.610 回答
0

从日志看来,服务器在重新启动或服务重新启动后才刚刚启动。

如果数据库没有完全关闭,那么数据库可能会保留部分应用的事务。如果发生这种情况,则数据库会在启动时恢复。

任何不完整的事务都会回滚。尚未应用的已提交事务将前滚。此恢复需要多长时间取决于日志中尚未应用到数据库的事务的大小。

事务在崩溃后回滚后可能不会显示在日志中。这取决于它们在日志中的位置和数据库的恢复模式。

  • 如果事务位于日志的末尾,则很可能日志将被回滚并删除事务。
  • 如果事务在日志中间,您可能会在日志中看到 LOP_ABORT_XACT。
  • 当使用简单恢复时,日志很有可能在恢复后被清除(因为日志只保留到事务提交之前)。

请参阅是否从 ldf 文件中删除日志记录以进行回滚?更多细节。

于 2015-04-24T16:54:45.943 回答