ログファイルからデータを復元する方法を考えていました。SQL 2005 (完全バックアップ) を使用しています。
問題は、サービスが昨夜私のデータを消去したことです (これはすべきではありません)。そして今、以前に削除された行を回復したいと考えています。
誰かが私にこれを行う方法を教えてもらえますか?
ログファイルからデータを復元する方法を考えていました。SQL 2005 (完全バックアップ) を使用しています。
問題は、サービスが昨夜私のデータを消去したことです (これはすべきではありません)。そして今、以前に削除された行を回復したいと考えています。
誰かが私にこれを行う方法を教えてもらえますか?
削除前のデータベースのバックアップと、最後のデータベース バックアップ以降に作成されたすべてのトランザクション ログ バックアップがある限り、特定の時点に復元できます。
最初に行うことは、トランザクション ログのバックアップを取ることです。
次に、最後のデータベース バックアップと、それ以降、削除の直前までのすべてのトランザクション ログ バックアップを復元します。
その方法については、このMSDN の記事を参照してください。
既存のデータベースをそのままにして、バックアップを新しいデータベースに復元することをお勧めします。次に、いくつかのスクリプトを記述して、必要なデータをライブ データベースに戻すことができます。
まず、データベースが完全復旧モデルである必要があり、トランザクション ログ バックアップの完全なチェーン (ログ シーケンス番号 (LSN) の途切れのないシーケンスを持つ一連のログ レコード) が必要です。
ログ バックアップ チェーンは、データベースの完全バックアップが作成されるか、復旧モデルが SIMPLE から FULL に切り替えられて完全バックアップが作成されるときに開始されます。その後、トランザクション ログのバックアップが定期的に作成されます。ログ バックアップ チェーンは、次の 2 つの方法でのみ切断できます。
ログ バックアップ チェーンを壊すと、トランザクション情報が失われる可能性があります
以下を使用して、特定の時点に復元できます。
構文
RESTORE LOG database_name
FROM <backup_device>
WITH STOPAT = time, RECOVERY…
ここにリストされているすべてのオプションの手順を見つけることができます:特定の時点にデータベースを復元する
免責事項: 私は ApexSQL でサポート エンジニアとして働いています。
次の場合にのみ、データを回復できます。1) データベースが完全復旧モデルを使用している。2)誤って削除する前に作成した完全なバックアップがあります。3) まだこのデータベースを復元またはバックアップしていません。
これが正しければ、次のことを行う必要があります。1) トランザクション ログのバックアップを作成します。2) NORECOVERY オプションを使用して完全バックアップからデータベースを復元します。3) STOPAT オプションを使用してトランザクション ログを復元します。
トランザクション ログ ファイルを特定の時点に復元するには、データベースを完全復旧モデルで実行する必要があります。したがって、最初に最新の完全なデータベース バックアップを復元する必要があります。
RESTORE DATABASE *database* FROM DISK = 'D:/Full.bak' WITH NORECOVERY, REPLACE
次の手順では、最後の差分データベース バックアップを復元します。
RESTORE DATABASE *database* FROM DISK = 'D:/Diff.bak' WITH NORECOVERY
次に、最後の差分バックアップ以降に作成されたすべてのトランザクション ログ バックアップを正しい順序で復元します。
RESTORE LOG *database* FROM DISK = 'D:/log1.bak' WITH NORECOVERY
RESTORE LOG *database* FROM DISK = 'D:/log2.bak' WITH NORECOVERY
RESTORE LOG *database* FROM DISK = 'D:/log3.bak' WITH NORECOVER
復元する必要がある最後の 1 つのトランザクション ログ バックアップは、stopat
オプションで障害が発生した後に作成されたトランザクション ログ バックアップです。オプションの後stopat
、データベースを復元する時間を設定する必要があります。
RESTORE LOG *database* FROM DISK = 'D:/log4.bak' WITH STOPAT = '2015-11-26 16:22:40.000', RECOVERY