SQL Serverでデータベースの状態が「未確認」になりデータベースにアクセスできない現象について紹介します。
SQL Serverでデータベースの状態が「未確認」になります。
SQL Server Management Studio のオブジェクトエクスプローラのデータベースのノードに「未確認」が表示されます。
データベースが破損、または整合性に問題があります。
完全復旧モデルの場合は、エラーが発生する直前の状態にデータベースをロールバックします。また、バックアップ時点までのロールバックが許容できる場合は、バックアップをリストアします。
バックアップをリストアできない場合は以下の手順で修復します。ただし、完全な一貫性は保証されず、データの欠損や不整合が出る可能性があります。
「未確認」の状態になっているデータベースを緊急モードにします。
SQL Server Management Studioなどで、以下のSQLコマンドを実行します。
USE master
GO
ALTER DATABASE 対象データベース SET EMERGENCY
GO
USE master
GO
ALTER DATABASE iPentecSandBox SET EMERGENCY
GO
コマンドが成功すると、データベースの状態が「緊急」になります。
下記の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 がエラー メッセージを出力した場合は、システム管理者に相談してください。
データベースを修復します。
下記SQLを実行してシングルユーザーモードに変更します。
ALTER DATABASE 対象データベース SET SINGLE_USER
GO
下記SQLを実行してデータベースの修復をします。
DBCC CHECKDB('対象データベース','REPAIR_REBUILD')
GO
下記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のSQLコマンドを実行し、データベースをチェックします。
DBCC CHECKDB(対象データベース)
GO
CHECKDB により、データベース 'iPentecSandBox' に 0 個のアロケーション エラーと 0 個の一貫性エラーが見つかりました。
DBCC の実行が完了しました。DBCC がエラー メッセージを出力した場合は、システム管理者に相談してください。
のメッセージが表示されることを確認します。
下記のコマンドを実行し、テーブル、データベースの整合性をチェックします。
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
コマンドが成功すると、データベースが通常のオンライン状態に戻ります。