10

私は大きな間違いを犯しました、私はこのクエリを実行しました:

update Contact set ContaPassword = '7FD736A3070CB9766'

条項を忘れたWHEREので、このようにしてすべてのユーザーのパスワードを更新しました。:(

このクエリの前にデータを回復する方法はありますか?

4

1 に答える 1

7

BEGIN TRANSACTION / ROLLBACKの外部で実行した場合、変更を元に戻すことはできません。これが、私があらゆる種類の本番データの更新を次のように開始する理由です。

BEGIN TRANSACTION

-- report the bad or undesired data condition before-hand
SELECT ...

-- change the data
INSERT/UPDATE/DELETE ...

-- ensure we changed a reasonable number of records; may not be accurate if table has triggers
SELECT @@ROWCOUNT

 -- get the data condition afterwards and be sure it looks good.
SELECT ...

-- always start with this enabled first
ROLLBACK

-- don't do this until you are very sure the change looks good
-- COMMIT

Martin Smithは、このトピックに関するdba.stackexchange.comのBrentOzarによるこの優れた投稿を指摘しました。フルリカバリモードでは、ログファイルを調べて何が変更されたかを確認できます。

また、Odedが指摘したように、バックアップがある場合、元のデータに戻すことは難しくありません。バックアップをどこかに復元して、元のデータをコピーできます。

于 2012-09-20T18:12:20.510 に答える