2009-08-04 149 views
3

我正在使用事务更新表中的某些数据。事务的日志在数据库的ldf文件中可用。现在,用户错误地提交了删除记录的事务,并且它已经提交并且数据被删除。那么是否有任何方式回滚该特定交易。请提出建议。我将衷心感谢您的帮助。回滚事务

谢谢,

回答

3

您不能回滚已提交的事务。

在事务提交之前,您将拥有数据库的'point in time recovery'。您从事件发生前的最后一次完整备份开始,然后在事件发生前应用最新的差异,然后将所有日志记录到兴趣点上,并在事件发生时停止,当您恢复数据库时不使用任何其他日志。链接中的更多细节。如果在该时间点之后还有其他事务需要恢复,则可以在出现错误时复原数据库的副本,然后手动将已删除的数据从副本数据库复制到真实数据库中。

+0

,不要忘记之后删除可以通过这种方法迷路这项工作。如果数据库在事件发生后已经使用了很多,这将变得非常棘手 – djna 2009-08-04 07:34:58

0

此外,对于以前的解决方案(即上述),可以使用日志恢复命令中的“WITH STANDBY ='filename'”选项。这将允许您在恢复之间读取数据库,这使恢复数据变得容易一些。

如果是SQL 2000并且您有完整的备份和事务日志备份文件,则可以使用该工具来提取撤消脚本。它仍然依赖于具有可恢复备份和事务日志文件,但可以让您过滤事务日志并将SQL解压缩为脚本。我没有收到任何副本,但它是一个免费的主要SQL工具供应商(例如Quest,Red Gate,Idera)。

3

使用内置的SQL Server函数和命令(如fn_dblog和DBCC LOGINFO)读取事务日志可能很困难,因为所有数据都以十六进制格式存储。手动查询和转换对于获取可读数据是必需的。这些是没有记录的功能,不能给出结果。理论上你可以跟踪删除的记录,看看已被删除

请注意,recovery model也是非常重要的,当涉及到数据,FULL或大容量日志记录模型应该用于

至于时间点的恢复恢复你可以看看article,它描述了使用SQL Server Management Studio和名为ApexSQL Log的第三方工具的过程。还有其他第三方工具,如RedGate的SQL Rescue。请注意,您必须提供完整的事务日志备份链:自存在完整数据库备份以来的事务日志备份链,或完整数据库备份,然后是差异数据库备份,然后是事务日志备份链,直至点及时你想要数据恢复。

声明:我ApexSQL工作作为支持工程师