削除されたレコードを取り戻すにはどうすればよいですか?


49

リモートのSQL Server 2008テーブルから約2,000,000レコードを誤って削除しました。サーバーがサーバー側のバックアップファイルへのアクセスを許可していません。

これらの記録を取り戻す方法はありますか?


18
バックアップを最後にテストしたのはいつですか?
ジョー

20
バックアップの復元を最後にテストしたのはいつですか?
datagod

回答:


116

データベースは完全復旧モードですか?

  • はいの場合、トランザクションログのバックアップを行っていますか?

    • はいの場合、Quest LiteSpeed、Red Gate SQL Backup、またはIdera SQLSafeなどのバックアップユーティリティはありますか?
      • はいの場合、これらのユーティリティはバックアップファイル(フルおよびトランザクションログを含む)からオブジェクトの削除を取り消すことができますが、それらの使用方法の説明は、ここでできることの範囲を超えています。手順については、ベンダーにお問い合わせください。
      • いいえの場合、フルバックアップとトランザクションログを別の名前のデータベースとして復元します。(既存のデータベースを上書きしないでください。)削除が行われる前にオブジェクトの最新のコピーを取得できますが、復元コマンドのstopat部分を使用して指定する必要があります。コマンドの復元をいつ停止するか。削除が行われる前に停止する必要があります。
    • いいえの場合、Quest LiteSpeedやApex SQL Logなどのログリーダーユーティリティのコピーを入手してください。これらのユーティリティは、データベースサーバーに接続し、ログファイルを調べて、トランザクションを取り消すのに役立ちます。デモ版が機能するかどうかはわかりませんが、有料版は間違いなく機能します。
  • いいえ(完全復旧モードではない)場合、別の名前のデータベースとして最後の完全バックアップを復元します。(すでに取得しているデータベースを上書きしないでください。)そこから、バックアップ時にオンラインであったレコードを復元できますが、それ以降の変更はすべて失われます。


4
すばらしい答えは、監査または変更追跡がある場合、1つのテーブルのみが影響を受けているときにそれらのテーブルからデータを取得するのが通常最も簡単であることを付け加えます。そしてもちろん、上記の一部またはすべてに対する答えが「いいえ」の場合、可能な限りレコードを復元した後、バックアッププロセスと、場合によっては実稼働データにアクセスできる人を修正します。
HLGEM

シンプルモードの場合、一部のページに行がまだ物理的に存在している可能性があります。たぶんそれらのいくつかは(非常に高い時間および/またはお金のコストで)回復することができます。
usr

ご参考までに。ApexSQL回復(のために利用可能な合計行毎に10行のみ1つのアウト、時間制限以外に評価版の回復を回復apexsql.com/faqs/faqs_recover.aspx
サミール

30

SQL Serverは、削除された各レコードのログを保持します。これらのログは、fn_dblogSQL Server関数を介してクエリできます。

SELECT [RowLog Contents 0] 
FROM   sys.fn_dblog(NULL, NULL) 
WHERE  
       AllocUnitName = 'dbo.TableName'        
   AND Context IN ( 'LCX_MARK_AS_GHOST', 'LCX_HEAP' )        
   AND Operation in ( 'LOP_DELETE_ROWS' )   
;

ただし、このログは16進形式であるため、この16進形式を実際のデータに変換する必要があります。

以下の記事は、上記で定義した方法で削除されたレコードを回復するのに役立ちます。

http://raresql.com/2011/10/22/how-to-recover-deleted-data-from-sql-sever/


3
これはかなりクールです。このアプローチはどのような条件下で機能しますか(または機能しませんか)?
ニックチャマス

3
@NickChammas-アクティブログにあるもののみを回復できるため、単純な回復モデルではチェックポイントが発生してはなりません。また、現在、スナップショット分離を使用するデータベースでは正常に動作しないように見えますが、これは簡単に修正できるはずです。@user1059637-コードに機能を追加する人々に対するあなたの態度はどうですか?
マーティンスミス

@MartinSmith、今ではスナップショット分離でも完璧に動作しています。
user1059637

22

残念ながら、多くの情報がなければあなたを助けることはできません。しかし、あなたの質問から、データベースから200万レコードと思われるものを削除したことがわかりました。ほとんどの場合、データベースに完全なログを記録し、非常に特殊なツールを購入しない限り、この情報を回復することはできません。

自分が何をしたと思うか、レコードを取り戻すことができないと思う理由、およびデータベースの構成を説明できる理由を詳細に説明できる場合は、もう少しお手伝いできます。

いくつかの一般的なアドバイス:200万件のレコードを削除したと思われる場合、おそらく今は少しおかしくなります。したがって、5分間の休憩を取り、落ち着いて問題を再検討する必要があります。また、合理的である場合(午前2時に起床せずに上司に伝えて)、解決策を検討している場合は、すぐに上司に伝える必要があります。必死に回復し、潜在的に事態を悪化させて詳細を隠そうとするよりも、起こったことを認める方がよい。上司が何らかの形で助けてくれることを知っていれば、問題を解決するのに役立ちます。私が言ったように、ほんのいくつかの一般的なアドバイス。


10
5分間の休憩をお勧めします。常に機能します。集中するのに役立ちます。:-)それが行われました。
ジョン別名hot2use
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.