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やデータベースの記事なども担当。
掲載日: 2017-05-31
iPentec all rights reserverd.