間違えて削除してしまったデータを復元する方法(MS SQL SERVER)

2019-10-24

普段あまり使う機会がないと、いざ必要なときにあせりますね。

MS SQL SERVERにて、間違えてテーブルからデータをDELETEしてしまったとき、DELETE直前の状態に戻したい場合の手順です。

既にコミットされていて、ロールバックとかは使えない状況という前提です。

[環境]
OS : Windows Server 2003 R2 Standard Edition SP2
DB : Microsoft SQL Server
(2000以降ならたぶんできるけど、2008用のツールがあるとかなり楽)
完全復旧モデルで運用

[手順]
1.間違えてとっても大事なデータをDELETEしてしまう
2.あせるので、とりあえず落ち着いて現在時刻を書き留める
3.トランザクション ログをバックアップする
  (このトランザクション ログの中に戻したい時点の復旧ポイントが含まれている)
*.できれば別のマシン(仮想マシンなどでも可)に、MSSQL2008とかを入れて作業するとなおいい
  180日間お試しバージョンとかもあるし。まあ、まずインストールしてるような時間はないけどね。
http://www.microsoft.com/downloads/details.aspx?familyid=6B10C7C1-4F97-42C4-9362-58D4D088CD38&displaylang=ja
*.ただ今回はたまたまMSSQL2008環境が別にあったので、そこにバックアップから復元しました。
4.直近の完全バックアップを、「WITH NORECOVERY」オプションを付けて復元する。
  (これを付けないと、その後のトランザクション ログの反映ができない)
5.復元した完全バックアップ以降のログバックアップを順番に復元していく。
6.3でバックアップした最新のログバックアップを復元するときに、RESTOREコマンドをSTOPATオプションを付けて実行する
  (ここで時刻を指定できるので、1のDELETEを実行する直前の時刻を指定する)
7.復元完了!やったー!

もっとも、この手間をかける必要のあるような重要なテーブルは簡易的にでもミラーリングするなりしておくべきではとも思うのだけど。

参考URL:

[SQL Server 2008 オンライン ブック]バックアップ内の特定の時点へのデータベースの復元
http://msdn.microsoft.com/ja-jp/library/ms190244.aspx

[SQL Server 2008 オンライン ブック]RESTORE (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms186858.aspx

[ITPro]今から始めるSQL Server 2005[第3回]バックアップ/リストアの高速化(1)
http://itpro.nikkeibp.co.jp/article/COLUMN/20051202/225613/

PCPC,SQLServer

Posted by velfon