SQL Server Express将数据库回滚到先前状态的原因是什么?

时间:2015-04-24 13:06:53

标签: sql-server sql-server-2008-express data-loss terminal-server

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

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

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

有没有人知道这里会发生什么?

修改

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

编辑II

在日志中找到这个: Log

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

从日志中看起来服务器刚刚重启或服务重启后才启动。

如果数据库没有干净地关闭,那么数据库可以留下部分应用的事务。如果发生这种情况,则数据库将在启动时恢复。

回滚任何不完整的交易。尚未应用的已提交事务将向前滚动。此恢复所需的时间取决于日志中尚未应用于数据库的事务的大小。

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

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

有关详细信息,请参阅Are log records removed from ldf file for rollbacks?