に役立つ必要がある「ディルク・ラッキー」は、私はこのクエリで私のデータベースを更新したSQLロールバック・トランザクション
このトランザクションをどのようにロールバックできますか?私はsupplierテーブルのcontactname列を復元したい。あなたのトランザクションがすでにコミットされているよう
おかげで、 プログラマー
に役立つ必要がある「ディルク・ラッキー」は、私はこのクエリで私のデータベースを更新したSQLロールバック・トランザクション
このトランザクションをどのようにロールバックできますか?私はsupplierテーブルのcontactname列を復元したい。あなたのトランザクションがすでにコミットされているよう
おかげで、 プログラマー
が鳴ります。もうロールバックできません。
唯一の選択肢は、バックアップを復元することです。バックアップを新しいデータベースとして復元できるため、連絡先の名前だけをコピーして、他の変更を失うことはありません。
フルモードでフルモードになっている場合は、ログから復元できます。それについての素晴らしいブログ記事はhereです。
あなたがしなければ、私は真剣にあなたがバックアップを持っていることを願っています。今後の参考のために
:私はアップデートを行うと、私は次の構文を使用します。
SELECT *
--UPDATE a SET col = 'val'
FROM myTable a
WHERE id = 1234
そのように、あなたが最初に更新するように選択しているかを見ることができます。最後に更新する準備が整ったら、UPDATEから選択してクエリを実行します。私はこのトリックで何度も自分を捕らえました。それはまた、削除で動作するので、それはボーナスです。
データベースが完全復旧モデルを使用していることを望みます。その場合:
まず、トランザクションログのバックアップを取る必要があります。
あなたはFULLバックアップ+差分からデータベースを復元することができます。
これが完了したら、トランザクションログを更新ステートメントの前の特定の時点に復元できます。
は、他のポスターが示唆したように、あなたは別のデータベースにリストアすることができ、あなたはダウンタイムを最小限に抑えることを望むべきで戻ってライブデータベースへの更新を適用"How to Restore to a point in time"
を参照してください。
希望しますが、これは意味がありますが、援助が必要な場合はお知らせください。
ここで良い点 - 私は同じ選択をします。さらに、私はbegin tranでコードをラップし、適切な数の行が更新されたことを確認した後にコミットしますが、おそらく私はちょうど編集的です。 –