以前に Microsoft SQL Server のトランザクションログが破損したことによりデータベースの挙動がおかしくなった事があり、その際に行った復旧方法を残しておきたいと思います。
※トランザクションログの再作成自体は緊急手段となりますので、実施する際は十分に確認を行った上で行うことをおすすめします。
トランザクションログの再作成
トランザクションログの再作成は、Microsoft SQL Server Management Studio 管理コンソールからクエリ実行する方法になります。
手順に進む前に対象データベース名を確認します。
手順1:データベースを緊急モードに変更する(SET EMERGENCY)
「ALTER DATABASE <データベース名> SET EMERGENCY」にて、トランザクションの再作成を行う対象のデータベース名を指定して、緊急モードへのステータス変更を行います。
クエリ例
use master go ALTER DATABASE <データベース名> SET EMERGENCY go
手順2:データベースの破損箇所を確認する(CHECKDB)
「DBCC CHECKDB (‘<データベース名>’)」にて、データベースの破損箇所の確認を行います。
破損箇所を確認した上でデータロスを許容する修正オプションを指定するため、他に破損している箇所がある場合は失われる可能性があります。
クエリ例
DBCC CHECKDB ('<データベース名>')
手順3:トランザクションログを再作成する(CHECKDB repair)
「DBCC CHECKDB (‘<データベース名>’,’repair_allow_data_loss’)」にて、対象データベースのトランザクション ログ ファイルの再作成を行います。
クエリ例
use master go DBCC CHECKDB ('<データベース名>','repair_allow_data_loss') go
手順4:データベースの整合性を確認する(CHECKDB)
「DBCC CHECKDB (‘<データベース名>’)」にて、リペア後のデータベースの整合性チェックを実施します。リペア後のデータで破損している箇所がないか確認します。
クエリ例
DBCC CHECKDB ('<データベース名>')
※DBCC CheckDB の結果に問題がなければ、緊急モードの解除に進みます。
手順5:データベースを緊急モードから解除する(SET ONLINE)
以下のクエリを実行し、緊急モードを解除します。
クエリ例
use master go ALTER DATABASE <データベース名> SET MULTI_USER go ALTER DATABASE <データベース名> SET ONLINE go
以上でトランザクションログの再作成の操作は完了となります。