山田 浩史
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 ユーティリティ
http://msdn.microsoft.com/ja-jp/library/ms162806.aspx
sqlcmd ユーティリティ
http://msdn.microsoft.com/ja-jp/library/ms162773.aspx