web-dev-qa-db-ja.com

sp_MSforeachDBをエラーをマスクせずにDBCCCheckDBに使用できますか?

_DBCC CheckDB_をテストするために意図的に破損したインデックスを持つテストデータベースがあります。

実行すると:DBCC CHECKDB (Test2) WITH ALL_ERRORMSGS, NO_INFOMSGS, DATA_PURITY

予想通り、次のようになります。

_Msg 8928, Level 16, State 1, Line 1
Object ID 2105058535, index ID 2, partition ID 72057594038845440, alloc unit ID 72057594039762944 (type In-row data): Page (1:156) could not be processed.  See other errors for details.
Msg 8939, Level 16, State 98, Line 1
Table error: Object ID 2105058535, index ID 2, partition ID 72057594038845440, alloc unit ID 72057594039762944 (type In-row data), page (1:156). Test (IS_OFF (BUF_IOERR, pBUF->bstat)) failed. Values are 12716041 and -4.
Msg 8980, Level 16, State 1, Line 1
Table error: Object ID 2105058535, index ID 2, partition ID 72057594038845440, alloc unit ID 72057594039762944 (type In-row data). Index node page (0:0), slot 0 refers to child page (1:156) and previous child (0:0), but they were not encountered.
CHECKDB found 0 allocation errors and 3 consistency errors in table 'Names' (object ID 2105058535).
CHECKDB found 0 allocation errors and 3 consistency errors in database 'Test2'.
repair_allow_data_loss is the minimum repair level for the errors found by DBCC CHECKDB (Test2).
_

ただし、実行すると:exec sp_MSforeachDB 'DBCC CHECKDB (?) WITH ALL_ERRORMSGS, NO_INFOMSGS, DATA_PURITY'

エラーは発生しません。

Sp_MSforeachDBがサポートされていないことを理解しています。ただし、いくつかのブログでは、sp_MSforeachDBを使用してSQLServerインスタンス上のすべてのDBをチェックすることを提案しています。

質問:私は何か間違ったことをしていますか?もしそうなら、修正は何ですか、それともこれは_sp_MSforeachDB_との特異性ですか?

2
Michael

sp_MSforeachDBがTest2データベースをスキップしているようです。これは、Aaron Bertrandが指摘したように、sp_MSforeachDBに関する多くの既知の問題の1つです。

NO_INFOMSGSパラメータを削除することで確認できます。

exec sp_MSforeachDB 'DBCC CHECKDB (?) WITH DATA_PURITY'

これにより、すべてのデータベースに対してメッセージが返されます。 Test2データベースの結果を検索します。私はそれがそこにないに違いない。

DBCC CHECKDBを使用すると、すべてのエラーメッセージがデフォルトで表示されます。 WITH ALL_ERRORMSGSパラメーターを指定または省略しても効果はありません。

SQL Serverバックアップ、整合性チェック、インデックスと統計のメンテナンス に対するOlaHallengrenのソリューションをご覧ください。

3
stacylaray