トランザクションログの再構築


20

トランザクションログファイルが(SQL Serverがシャットダウンされている間に)削除された非常に大きなデータベース(〜6TB)があります。

  1. データベースの切り離しと再接続。そして
  2. トランザクションログファイルの削除の取り消し

...しかし、これまでのところ何も機能していません。

現在実行中です:

ALTER DATABASE <dbname> REBUILD 
LOG ON (NAME=<dbname>,FILENAME='<logfilepath>')

...しかし、データベースのサイズを考えると、これを完了するにはおそらく数日かかります。

ご質問

  • 上記のコマンドと次のコマンドに違いはありますか?

    DBCC CHECKDB ('<dbname>', REPAIR_ALLOW_DATA_LOSS)
  • REPAIR_ALLOW_DATA_LOSS代わりに実行する必要がありますか?

データベースを再構築できるようにデータが他のソースから派生していることは注目に値しますが、すべてのデータを再挿入するよりもデータベースを修復する方がはるかに迅速になると思われます。


更新

スコアを保持している場合:ALTER DATABASE/REBUILD LOGコマンドは約36時間後に完了し、報告しました:

警告:データベース 'dbname'のログが再構築されました。トランザクションの一貫性が失われました。RESTOREチェーンが破損し、サーバーは以前のログファイルのコンテキストを失ったため、それらが何であるかを知る必要があります。
DBCC CHECKDBを実行して、物理的な一貫性を検証する必要があります。データベースはdbo専用モードになっています。データベースを使用可能にする準備ができたら、データベースオプションをリセットし、余分なログファイルを削除する必要があります。

その後、DBCC CHECKDB成功しました(約13時間かかりました)。データベースバックアップの重要性(そしてプロジェクトマネージャーにサーバーへのアクセスを許可すること...)をすべて知ったとしましょう。

回答:


20

疑わしいデータベースをデタッチしないでください。とにかく、デタッチ後にデータベースをどのようにアタッチしましたか?オプションで使用CREATE DATABASEFOR ATTACH_REBUILD_LOGましたか?

これらのコマンドはトリックを行っているはずです:

ALTER DATABASE recovery_test_2 SET EMERGENCY;   
ALTER DATABASE recovery_test_2 SET SINGLE_USER;  

DBCC CHECKDB (recovery_test_2, REPAIR_ALLOW_DATA_LOSS) 
WITH NO_INFOMSGS, ALL_ERRORMSGS;

この状況の投稿を書きました。

SQL 2005/2008データベースリカバリ手順-ログファイルの削除(パート3)

次の違いについて尋ねました:

  • DBCC CHECKDB ('<dbname>', REPAIR_ALLOW_DATA_LOSS) そして
  • ALTER DATABASE <dbname> REBUILD LOG ON (NAME=<dbname>,FILENAME='<logfilepath>')

問題は、両方を実行してログファイルを再構築できることです。ただしCHECKDB、ログを再構築し、データベースの整合性エラーもチェックします。

また、ログファイルが失われたときにアクティブなトランザクション(ディスクに書き込まれなかった)がある場合、2番目(変更後のデータベース)は機能しません。SQL Serverは、起動時または接続時に、ログファイルが存在しないログファイルからの回復(ロールバックおよびロールフォワード)を実行します。ディスクがクラッシュするか、サーバーの予期しないシャットダウンが発生し、データベースが正常にシャットダウンされない場合に発生します。私はそれがあなたの場合ではなかったと思うし、すべてあなたのために整理された。

  1. DBCC CHECKDB (DBNAME, REPAIR_ALLOW_DATA_LOSS)緊急状態のデータベースで実行すると、データベースの不整合エラーをチェックし、最初にログファイルを使用して不整合から回復しようとします。これがない場合、トランザクションログが再構築されます。

  2. ALTER DATABASE REBUILD LOG ON...文書化されていない手順であり、DBCC CHECKDBエラーを修正するには後続の手順が必要です。


12

はい、これらは2つの異なるステートメントであり、それぞれが非常に異なることを行います。

ファイルが削除されたときのデータベースの状態に応じて、次を使用してデータベースを接続し、ログを再構築することにより、起動して実行できる場合があります。

EXEC sp_attach_single_file_db 'dbname here', 'file path and name here'

製品ドキュメントのsp_attach_single_file_db(Transact-SQL)を参照してください。

Paul S. Randalによるこのブログ投稿も参照してください。

緊急モードの修復:非常に最後の手段

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.