web-dev-qa-db-ja.com

マスターデータベースにエラーが発生するCheckdb

マスターデータベースでdbcccheckdbを実行すると、次のようなエラーが発生します

Msg 5030, Level 16, State 12, Line 1
The database could not be exclusively locked to perform the operation.
Msg 7926, Level 16, State 1, Line 1
Check statement aborted. The database could not be checked as a database snapshot could not be created and the database or table could not be locked. See Books Online for details of when this behavior is expected and what workarounds exist. Also see previous errors for more details.

私がそれを検索したとき、私はたくさんの links を取得しました。これは、データベースに読み取り専用のファイルグループがあるか、ファイルがFAT32ファイルシステムにある場合に発生することを示しています。しかし、マスターデータベースが読み取り専用ファイルグループにないことを確認したところ。しかし、mdfファイルはFAT32ファイルシステムにありました。したがって、解決策は、checkdbコマンドでTABLOCKを使用することでした。だから私はdbcc checkdb With Tablockを試しました。しかし、私は同じエラーメッセージを聞いています。では、このエラーの理由は何ですか。 SQL Server 2008 R2 Express(サービスパック2)を使用しています。

3
IT researcher

ここではFAT32が理由です。また、マスターデータベースでTABLOCKCHECKDBを実行することはできません。 WITH TABLOCKデータベースを読み取り専用モードにします-マスターデータベースで実行および実行する必要があるシステム操作のため、マスターデータベースに対してそれを行うことはできません。

これは、同じファイルシステム上に新しいユーザーデータベースを作成してからCHECKDBを試し、同じエラーを確認してから、TABLOCKオプションを指定してCHECKDBを実行することで簡単に確認できます。私の推測では、オプションなしでも同じエラーが発生し、オプションを指定してもエラーは発生しません(誤ってデータベースへの接続を開いていない限り)

残念ながら、これを解決するまで、マスターで通常のCHECKDBを実行できないという問題が発生します。

それまでの間、このプロセスを実行できます(少し面倒ですが、機能します)

  1. SQL Serverに接続するすべてのサービスがオフ/停止していることを確認します(これには、SSIS、SQL VSSライターなどのサービスが含まれます)
  2. -m起動パラメータを使用してシングルユーザーモードでSQLServerを再起動します( ここで説明
  3. シングルユーザーとして接続し、 [〜#〜] tablock [〜#〜] を指定してCHECKDBを実行します。

SQL Server 2012インスタンスでこれを試したところ、機能しました。あなたがこれを行うことができる唯一の方法。

私にとってここでの大きな質問は-なぜあなたのファイルシステムはFAT32なのですか?これはどのOSにありますか?すべてのデータベースはFAT32上にありますか? FAT32を使用することは可能ですが、NTFSボリュームを使用することをお勧めします。 FAT32では、NTFSで得られる特定のアクセス許可の利点は得られません。操作や結果として生じる問題、そして明らかにこのCHECKDBの問題のためにいくつかのファイルを開いたままにしておきます。

3
Mike Walsh