CHECKDB DBCCコマンドを利用してデータベースの論理性確認と修復をする - SQL Server
DBCCコマンドを利用してデータベースの論理性確認と修復をする手順を紹介します。
手順
[任意] データベースを緊急モード、またはシングルユーザーモードにする
必要に応じて、データベースを緊急モードまたは、シングルユーザーモード にします。
SQL Server Management Studioなどで、以下のSQLコマンドを実行します。
緊急モードにする場合
USE master
GO
ALTER DATABASE 対象データベース SET EMERGENCY
GO
シングルユーザーモードにする場合
USE master
GO
ALTER DATABASE 対象データベース SET SINGLE_USER
GO
コマンド例
USE master
GO
ALTER DATABASE iPentecSandBox SET EMERGENCY
GO
コマンドが成功すると、データベースの状態が「緊急」になります。
[推奨] データベースのバックアップをとる
一連の作業前にデータベースのバックアップをとることをお勧めします。
バックアップの手順は
こちらの記事を参照してください。または、SQL Serverのデータディレクトリにあるmdf,ldfファイルを直接バックアップする方法も利用できます。
CHECKDB を実行しデータベースをチェックする
下記のSQLコマンドを実行し、データベースをチェックします。
DBCC CHECKDB(対象データベース)
GO
コマンド例
DBCC CHECKDB(iPentecSandBox)
GO
チェックが実行され、チェック結果のメッセージが表示されます。
エラーが無い場合
CHECKDB により、データベース 'iPentecSandBox' に 0 個のアロケーション エラーと 0 個の一貫性エラーが見つかりました。
DBCC の実行が完了しました。DBCC がエラー メッセージを出力した場合は、システム管理者に相談してください。
エラーがある場合 (軽度)
CHECKDB により、データベース '(データベース名)' に 0 個のアロケーション エラーと 2 個の一貫性エラーが見つかりました。
repair_rebuild は DBCC CHECKDB ((データベース名)) で見つかったエラーの最小修復レベルです。
DBCC の実行が完了しました。DBCC がエラー メッセージを出力した場合は、システム管理者に相談してください。
エラーがある場合 (重度)
CHECKDB により、データベース '(データベース名)' に 0 個のアロケーション エラーと 18 個の一貫性エラーが見つかりました。
repair_allow_data_loss は DBCC CHECKDB ((データベース名)) で見つかったエラーの最小修復レベルです。
DBCC の実行が完了しました。DBCC がエラー メッセージを出力した場合は、システム管理者に相談してください。
データベースの修復
エラーが発生している場合はデータベースを修復します。
「repair_rebuild は DBCC CHECKDB ((データベース名)) で見つかったエラーの最小修復レベルです。」の場合
下記SQLを実行してシングルユーザーモードに変更します。
ALTER DATABASE 対象データベース SET SINGLE_USER
GO
下記SQLを実行してデータベースの修復をします。
DBCC CHECKDB('対象データベース','REPAIR_REBUILD')
GO
「repair_allow_data_loss は DBCC CHECKDB ((データベース名)) で見つかったエラーの最小修復レベルです。」の場合
下記SQLを実行してシングルユーザーモードに変更します。
ALTER DATABASE 対象データベース SET SINGLE_USER
GO
下記SQLを実行してデータベースの修復をします。
DBCC CHECKDB('対象データベース','REPAIR_ALLOW_DATA_LOSS')
GO
修復処理が開始されます。修復の進行状況のメッセージが表示されます。修復が完了すると以下のメッセージ(一例)が表示されます。
CHECKDB により、データベース '(データベース名)' に 0 個のアロケーション エラーと 17 個の一貫性エラーが見つかりました。
CHECKDB により、データベース '(データベース名)' で 0 個のアロケーション エラーと 14 個の一貫性エラーが解決されました。
repair_allow_data_loss は DBCC CHECKDB ((データベース名), repair_allow_data_loss) で見つかったエラーの最小修復レベルです。
DBCC の実行が完了しました。DBCC がエラー メッセージを出力した場合は、システム管理者に相談してください。
エラー解消の確認
CHECKDB での確認
再度下記のCHECKDBのSQLコマンドを実行し、データベースをチェックします。
DBCC CHECKDB(対象データベース)
GO
エラーが無い場合(例)
CHECKDB により、データベース 'iPentecSandBox' に 0 個のアロケーション エラーと 0 個の一貫性エラーが見つかりました。
DBCC の実行が完了しました。DBCC がエラー メッセージを出力した場合は、システム管理者に相談してください。
のメッセージが表示されることを確認します。
CHECKCONSTRAINTS での整合性確認
下記のコマンドを実行し、テーブル、データベースの整合性をチェックします。
USE [対象データベース]
GO
DBCC CHECKCONSTRAINTS
GO
エラーが無い場合(例)
DBCC の実行が完了しました。DBCC がエラー メッセージを出力した場合は、システム管理者に相談してください。
データベースをオンラインにする
下記SQLコマンドを実行し、データベースをオンラインにします。
ALTER DATABASE [対象データベース] SET ONLINE
下記SQLコマンドを実行し、データベースのシングルユーザーモードを解除します。
ALTER DATABASE [対象データベース] SET MULTI_USER
コマンド例
ALTER DATABASE [iPentecSandBox] SET ONLINE
GO
ALTER DATABASE [iPentecSandBox] SET MULTI_USER
GO
コマンドが成功すると、データベースが通常のオンライン状態になります。
データベースの復旧モデルを「完全復旧モデル」に変更する
データベースの修復を実行した場合、復旧モデルが「単純復旧モデル」に変更されます。
通常データベースを新規で作成した場合デフォルトでは「完全復旧モデル」になるため、データベース修復後に「完全復旧モデル」に戻しておく必要があります。
下記のコマンドを実行して「完全復旧モデル」に変更します。
ALTER DATABASE [対象データベース] SET RECOVERY FULL
コマンド例
ALTER DATABASE [iPentecSandBox] SET RECOVERY FULL
SQL Server Management Studio のデータベースのプロパティから復旧モードを変更する手順もあります。詳しくは
こちらの記事を参照してください。
著者
iPentec.com の代表。ハードウェア、サーバー投資、管理などを担当。
Office 365やデータベースの記事なども担当。