我运行了一个带有错误 WHERE 条件的删除语句(它从表中删除所有记录,而不是仅 10 条记录),但在执行过程中我找到了它并取消了 Management Studio 中的执行,该执行仍在查询执行取消过程中(它是一个大表) .
据我所知,如果我的取消成功完成,我不会丢失任何数据,我的理解是否正确?如果不能,请告诉我有没有办法从事务日志中恢复已删除的数据。数据库处于简单恢复模式。
我运行了一个带有错误 WHERE 条件的删除语句(它从表中删除所有记录,而不是仅 10 条记录),但在执行过程中我找到了它并取消了 Management Studio 中的执行,该执行仍在查询执行取消过程中(它是一个大表) .
据我所知,如果我的取消成功完成,我不会丢失任何数据,我的理解是否正确?如果不能,请告诉我有没有办法从事务日志中恢复已删除的数据。数据库处于简单恢复模式。
假设它是单个语句,则操作将作为一个整体成功或失败 - 不可能删除某些行而保留一些行。(如果删除成功,正如上面@Shanky 建议的那样,在简单的恢复中,除了恢复到先前的备份之外,您将无法恢复数据。)
也就是说,不要急于尝试强杀用户,或者让数据库下线,或者关闭服务,或者断开网线,或者断开电源线。您需要等待回滚完成 - 即使它阻止其他用户 - 以确保您的数据完好无损。请注意,回滚操作可能比初始操作花费更长的时间,因为回滚通常是单线程的,但删除可能是并行的。
将来,您应该
BEGIN TRANSACTION;
在针对生产或其他关键系统运行临时/不受控制/牛仔 DML 之前发布。这样无论何时意识到自己的错误,都可以等待操作完成再发出 aROLLBACK TRANSACTION;
,而不是在 SSMS 中疯狂地反复按停止按钮。这将使您免于删除无法轻松恢复的数据,但有一个警告 - 如果您做了正确的事情,您需要COMMIT TRANSACTION;
记住晚上或度假可能也是终止就业的事件。