トランザクションログ破損時の復旧手順(How to Emergency Mode Repair) | Server OS Cafe

Server OS Cafe

Server OSの紹介等

さて久々にSQL Serverのトランザクションログが破損する事態が発生しました。
トランザクション実行中にPCの電源がOFFになっちゃんたんですね。
復旧は簡単にできるのですが、その手順をメモしておきます。

[手順]
以下のTransact-SQLを順に実行します。
(このサンプルではトランザクションログが破損したDBを[TestDB]としています)

1.ALTER DATABASE TestDB SET EMERGENCY
 問題のデータベースの状態をEMERGENCYに変更します。これでデータベースがREAD_ONLYになり、ログ記録が無効になります。

2.ALTER DATABASE TestDB SET SINGLE_USER
 問題のデータベースをシングルユーザーモードに変更します。

3.DBCC CHECKDB ('TestDB',REPAIR_ALLOW_DATA_LOSS)
 DBCC CHECKDBを実行してデータベースを復旧します。

4.ALTER DATABASE TestDB SET ONLINE
復旧が完了したらデータベースをオンラインに戻します。

5.ALTER DATABASE TestDB SET MULTI_USER
 マルチユーザーモードに戻します。

Server OS Cafe-トランザクションログ復旧

なお、データベースの状態はsys.databasesで確認します。

Server OS Cafe-sysdatabases

[参考文献]
SQL Serverヒント集:どのような場合に緊急モードでの修復を使用する必要があるか、およびその方法を理解する
MSDN:ALTER DATABASEのSETオプション(Transact-SQL)
MSDN:DBCC CHECKDB(Transact-SQL)


Note:How to Emergency Mode Repair
If you execute Emergency Mode Repair to your system's SQL Server user databases,you can use follow Transact-SQL.
("TestDB" is a sample database)

ALTER DATABASE TestDB SET EMERGENCY
GO
ALTER DATABASE TestDB SET SINGLE_USER
GO
DBCC CHECKDB ('TestDB',REPAIR_ALLOW_DATA_LOSS)
GO
ALTER DATABASE TestDB SET ONLINE
GO
ALTER DATABASE TestDB SET MULTI_USER
GO

If you check database state,you see sys.databases.