在SQL Rollback事务中需要帮助

时间:2009-06-13 15:41:17

标签: sql-server

我已使用此查询更新了我的数据库:

 UPDATE suppliers SET contactname = 'Dirk Lucky'

所以供应商表中的所有行都有联系人姓名:“Dirk Lucky。”

如何回滚此交易?我想恢复供应商表中的contactname列。

谢谢, 程序员

3 个答案:

答案 0 :(得分:4)

听起来您的交易已经提交。你再也不能回滚了。

您唯一的选择是恢复备份。您可以将备份还原为新数据库,这样您就可以只复制联系人名称而不会丢失任何其他更改。

答案 1 :(得分:4)

如果您具有FULL模式的完整日志,则可以从日志中进行还原。有一篇关于它的优秀博客文章here

如果你不这样做,我真的希望你有一个备份。

供将来参考:当我进行更新时,我使用以下语法:

SELECT *
--UPDATE a SET col = 'val'
FROM myTable a
WHERE id = 1234

这样,您可以看到您首先要更新的内容。然后,当您最终准备好更新时,您只需从UPDATE中选择并运行查询。我用这个技巧多次抓住自己。它也适用于删除,因此这是一个奖励。

答案 2 :(得分:0)

希望您的数据库使用完整恢复模型。如果是这样的话:

首先,您需要立即进行事务日志备份。

然后,您可以从FULL backup + Differntials执行数据库还原。

完成后,您可以将事务日志还原到更新语句之前的特定时间点。

请参阅"How to Restore to a point in time"

正如其他海报所建议的那样,您可以恢复到另一个数据库,并在您希望最大限度地减少停机时间时将更新应用回实时数据库。

希望这是有道理的,但如果您需要帮助,请告诉我。