osql での DBCC CHECKDB 結果に "SQLGetDiagRec failed" が大量に出力される

山田 浩史
SQL Engine Support Engineer

みなさん、こんにちは。今回は、osql を使用していると直面しうるエラーについて紹介します。

現象
osql ユーティリティにて DBCC CHECKDB を実行した場合、出力結果内に "SQLGetDiagRec failed" のメッセージが大量に出力される。

-o オプションを使用して、結果をファイルに出力した場合も、コマンドプロンプトの標準出力に結果を出力した場合も同様に "SQLGetDiagRec failed" のメッセージが出力されます。

本現象の特徴は、出力結果内の 32768 行目から "SQLGetDiagRec failed" のメッセージが連続して出力される事です。

    出力例:
    -----
    32766 行目 'test_table' の DBCC 結果。
    32767 行目 オブジェクト "test_table" の 0 ページには 0 行あります。
    32768 行目 SQLGetDiagRec failed
    32769 行目 SQLGetDiagRec failed
    32770 行目 SQLGetDiagRec failed
    32771 行目 SQLGetDiagRec failed
    32772 行目 SQLGetDiagRec failed
    32773 行目 SQLGetDiagRec failed
    :
    -----

原因
osql の仕様上の制限です。

影響
DBCC CHECKDB の結果が正常に確認出来ません。

 

回避策
sqlcmd ユーティリティを使用します。

sqlcmd ユーティリティでは、"SQLGetDiagRec failed" のメッセージが出力される事はありません。
osql ユーティリティは SQL Server の将来のバージョンで削除される予定の機能となるため、sqlcmd ユーティリティの使用を推奨しています。

    コマンド例:
    sqlcmd -E -Q"DBCC CHECKDB (test_db)" -o C:\checkdb.txt

参考情報
osql ユーティリティ
https://msdn.microsoft.com/ja-jp/library/ms162806.aspx

sqlcmd ユーティリティ
https://msdn.microsoft.com/ja-jp/library/ms162773.aspx