事务回滚

3
我正在使用事务更新表中的一些数据。交易日志可在数据库的ldf文件中找到。现在,由于用户错误地提交了一个删除记录的事务,并且该事务已被提交并删除了数据。那么有没有办法回滚特定的事务呢?请给出建议。我真的很感激你的帮助。
谢谢,
3个回答

3
使用内置的SQL Server函数和命令(例如fn_dblog和DBCC LOGINFO)读取事务日志可能很困难,因为所有数据都以十六进制格式存储。必须进行手动查询和转换才能获取可读数据。这些是未经记录的函数,无法提供即用型结果。理论上,您可以跟踪已删除的记录并查看已删除的内容。
请注意,恢复模式在数据恢复方面也非常重要,应使用FULL或BULK LOGGED模式。
关于时间点恢复,您可以查看文章,其中介绍了使用SQL Server Management Studio和第三方工具ApexSQL Log的过程。还有其他第三方工具,如RedGate的SQL Rescue。请注意,您必须提供完整的事务日志备份链:自存在完整数据库备份以来的事务日志备份链,或者完整数据库备份,然后是差异数据库备份,然后从那里开始的事务日志备份链,直到您想要数据恢复的时间点。

免责声明:我在ApexSQL担任支持工程师


3

你无法回滚已提交的事务。

在事务提交之前,您将对数据库进行'时间点恢复'。您从事件之前的最后一次完整备份开始,然后应用事件之前的最新差异,然后应用到感兴趣的时间点的所有日志,并在事件发生时停止,当您恢复数据库时不再应用任何其他日志。有关详细信息,请参见链接。如果在该时间点之后有其他需要恢复的事务,则可以将数据库副本还原到错误点,然后手动将已删除的数据从副本数据库复制到实际数据库中。


请注意,使用此方法删除后的工作可能会丢失。如果自事件以来数据库被频繁使用,这将变得非常棘手。 - djna

0
此外,对于之前的解决方案(即上述),您可以在日志还原命令中使用“WITH STANDBY = 'filename'”选项。这将允许您在还原之间读取数据库,从而使数据恢复变得更加容易。
如果是SQL 2000,并且您有完整备份和事务日志备份文件,那么有一个工具可以帮助您提取撤销脚本。它仍然依赖于可还原的备份和事务日志文件,但可以让您过滤事务日志并提取SQL到一个脚本中。我手头没有副本,但是有一个免费的工具可以从主要的SQL工具供应商(例如Quest、Red Gate、Idera)那里获取。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接