たまたま、次のようなクエリを実行しました。
update table1
set data=(select data from table1 where key1=val1 and key2=val2)
これは 1 行だけを更新するはずでしたが、2 番目のwhere
句を見逃したので、数百万行を含むデータベース内のすべての行を更新し始めたと思います。
正しいクエリは約 0 秒かかり、次のようになります。
update table1
set data=(select data from table1 where key1=val1 and key2=val2)
where key1=val1 and key2=val3
数秒後、時間がかかりすぎることに気づき、停止しました。
データベースは完全復旧モードに設定され、 で実行されていsql server 2008 r2
ます。
問題は、このクエリの効果は何でしたか? 完了する前にクエリが停止され、SQL Server が変更を自動的にロールバックしたため、影響がないことを願っています。あれは正しいですか?
そうでない場合、データベースを特定の時点 (不幸な更新を行う直前) の状態に戻すにはどうすればよいですか?
(この質問を見ました:長時間実行されているクエリを停止すると、ロールバックしますか?しかし、1 つではなく複数の変更を実行するという点で異なります。)
(そして、はい、私は非常に最近のバックアップを持っていますが、DB のサイズを考えると、バックアップから復元する必要はありません)