2009-08-20 21 views
0

削除されたテーブルとストアドプロシージャの回復に役立つツールを知っている人はいますか?削除されたオブジェクトをSQLサーバーから回復する

このデータベースは誤って別のDBと同期されていたため、このデータベースで作成された新しいテーブルは削除されました。

おかげ

+2

http://en.wikipedia.org/wiki/Prayer – cakeforcerberus

+0

それはおそらくそれほど単純ではありません。あなたが何かを削除するときには、通常、ディスクスペース(この場合、OSを介してファイルシステムに戻すことを意味する)を含め、OSが保持するリソースをOSに戻します。私はカーネルプログラマーではありませんが、あなたの削除後にリソースが既に使用されているという保証はないので、ほとんどのカーネルが安全な "削除の取り消し"機能を許可するのではないかと疑います。私が言っていることは、たとえそれが動作しても、データの完全性について心配するということです。この分野の経験を積んだ他の人は、この問題について私に教えてもらえます。 –

答えて

4

私は、「SQL Serverが削除された表をリストアする」ググで親切フォーラムの答えを思い付きました。 「データベースがSQL Serverで作成されると、デフォルトで最大のフルバックに設定されている。だから、あなたのテーブルには、トランザクションのバックアップを復元することによって利用可能であるべきである。に行くお試しください 『

http://www.eggheadcafe.com/community/aspnet/13/11519/are-you-sure-you-dont-ha.aspx

データベースの復元』 Enterprise Managerでデータベース名を右クリックし、[すべてのタスク]を選択してオプションを選択します。

私はそれがテーブルまたはデータだけを復元するかどうか質問します。

RedGateによる「SQL Log Rescue」と呼ばれる非常に低コストのソフトウェアがあります。これは、これを手助けすることになっています。このSQL Server Centralの記事を参照してください。 http://www.sqlservercentral.com/articles/Product+Reviews/sqlrescuereview/2086/

EDIT:RedGateソフトウェアはフルバックアップが必要なので、役に立たないでしょう。私はちょうどそれをキャッチしました。

しかし、トランザクションログは、テーブル自体を実際に復元できない場合でも、テーブル構造の回復に役立ちます。

+0

残念なことに、彼は以前に述べたように、バックアップを持たないことになっています!まだ研究が不十分なgjに投票しています!ありがとう。 –

+0

:)はい - RedGateソフトウェアはバックアップが必要なので動作しません。ただし、DBでトランザクションが実行された場合、トランザクション構造にはテーブル構造の回復に役立つデータが含まれている可能性があります。何かがバックアップされていない場合は、通常、トランザクションログがログに記録されるように、作成時にデフォルトが使用されていると想定できます。 – user158017

3

データベースはどのリカバリモデルですか?

短い回答: バックアップがなければ、データが失われました。それがバックアップの要点です。

長い回答: リカバリモデルがFULLでフルバックアップを実行したことがない場合、実際には単純復旧モデルと同じように動作しています。つまり、トランザクションログのバックアップを取ることはできません。また、すべてのチェックポイントでトランザクションログが切り捨てられます。つまり、削除されたテーブルがトランザクションログにあったとしても、新しいトランザクションによってほとんど確実に上書きされ、永久に失われます。ツールはあなたを助けることができません。

DBCC PAGEで内部構造を知っていれば、DBCC PAGEでフォレンジックを行い、それらのエクステントが他のオブジェクトデータで上書きされていないことを期待できます。また、テーブルのトランザクションログレコードがすでにfn_dblog()で上書きされている(おそらく存在する)かどうかを確認することもできます。テーブルが削除された正確な時刻を特定するために使用できるサーバー側のトレースがあります。

ボトムライン:自動バックアップが必要です。フル・リカバリ・モデルのみが、ポイント・イン・タイム・リカバリを可能にします。このリカバリ・モデルを使用して、dropコマンドの直前のポイントにテーブルをリカバリできます。

8

データベースがフル・リカバリ・モードであり、トランザクション・ログのバックアップがある場合やトランザクション・ログが切り捨てられない場合は、ApexSQL LogまたはSQL Log Rescue(無料ですがSQL Server 2000のみ)などのサード・パーティ・ログ・リーダーを使用してみてください。

トランザクションログを読み取るためのその他のオプションは、DBCCログにはあまり記載されていません。

トランザクションの完全なチェーンが存在する場合、これはこのテーブルに対して実行された以前のCREATEまたはALTERテーブルがまだどこかのトランザクションログにあることを意味します。残念ながら、トランザクションログが非常に大きい場合、特にサードパーティのツールを使用しない場合は、この情報を見つけるのは簡単な作業ではありません。

7

バックアップがない場合でも、SQL Serverログから削除したオブジェクトを回復できます。

Select Convert(varchar(Max),Substring([RowLog Contents 0] 
,33 
,LEN([RowLog Contents 0]))) as [Script] 
from fn_dblog(NULL,NULL) 
Where [Operation]='LOP_DELETE_ROWS' And [Context]='LCX_MARK_AS_GHOST' 
And [AllocUnitName]='sys.sysobjvalues.clst' 

参考:http://raresql.com/2012/12/04/sql-server-recover-the-dropped-objects-view-stored-procedure-function-trigger/

+0

Brilliant!犯人私は最初の投票を追加しました。 – deadcrab

3

これが私の仕事:

Select Convert(varchar(Max), Substring([RowLog Contents 0] 
, 33 
, LEN([RowLog Contents 0]))) as [Script] 
from fn_dblog(NULL, NULL) 
Where [Operation] = 'LOP_DELETE_ROWS' And [Context] = 'LCX_MARK_AS_GHOST' 
And [AllocUnitName] = 'sys.sysobjvalues.clst' 
関連する問題