2009-05-22 11 views
4

私は、SQL ExpressのSQL Server保守計画を模倣する予定のジョブを作成しています。 (私はSQLエージェントと関連ツールがSQL Expressのために存在しないので、これを行う必要があります).NETからDBCC CHECKDBを実行できますか?

データベース整合性チェックを行うことです。このためTSQLは次のとおりです。エラーは、このコマンドの実行中に発生した場合

DBCC CHECKDB(N'Northwind') WITH NO_INFOMSGS 

は、どのように私はADO.NETを使用しているとき、それは例外がスローされます、知っていますか私はを解析する必要がありますテキスト出力コマンドの(該当する場合は出力で何を探しますか)

これは、私が手元に壊れたデータベースを持っていないため、テストするのが難しいです。

答えて

3

はいDBCC CHECKDBから返されたテキスト出力を処理する必要があると思います。

SQL Serverデータベースを意図的に破損させる方法については、次の参考文献を参照してください。

http://sqlblogcasts.com/blogs/tonyrogerson/archive/2007/03/10/how-to-create-a-corrupt-database-using-bulk-insert-update-and-bcp-sql-server-as-a-hex-editor.aspx

+0

DBを破損させる方法のURLをありがとう、本当に便利です。 –

+0

あなたは大歓迎です! –

2

あなたはCHECKDBDBCC CHECKDB WITH TABLERESULTS)とTABLERESULTSオプションを使用することができます。 これは、ErrorLevelStateMessageText(その他多くのもの)のような列を持つレコードセットを提供します。

Levelそのレコードセットの列(重大度)は、エラーがあるかどうかを判断するのに十分である必要があります。

MSは、レベル11〜16は「ユーザーによって生成され、ユーザーが修正できる」としています。だから私は17以上のものは、バックアップを作るのを止め(壊れたもので良いバックアップを上書きしないように)、できるだけシステムをオフラインにして、すぐにオペレータに知らせるということです。

レベル11〜16は、(通常の電子メールなどで)オペレータにも報告する必要があるため、必要に応じて確認する必要があります。 (。CHECKDBが今まで/エラーを記録ものの傷つけることはありません、おそらくオペレータに通知するためにそこにコードを有するものの16を介してレベル11でエラーを報告するかどうか私はわからない。)

ます。if TABLERESULTSNO_INFOMSGSを組み合わせて、CHECKDBにエラーが見つからない場合は、ではありません。レコードセットを結果として得ます。

注2:特定の条件下では、CHECKDBはエラーコードで失敗します。これまでのところ、私はこれだけをトリガーつのエラーを見てきましたし、それは次のようになります。

Msg 211, Level 23, State 51, Line 3 
Possible schema corruption. Run DBCC CHECKCATALOG. 
Msg 0, Level 20, State 0, Line 0 
A severe error occurred on the current command. The results, if any, should be discarded. 

私は多くのADO.NETを使用していないんだけど、私は、ADO.NETが例外をスローすることによって反応すると思います。 また、重大度> = 20のエラーであるため、クライアント接続が閉じられます。


は、すべてのアップこれを要約すると:私は DBCC CHECKDB WITH TABLERESULTSを実行すると思います。コマンドが失敗した場合、問題が発生している可能性があります。そうでない場合は、結果セットをループして、重大度> = 17を探します。見つけた場合は、重大な問題もあります。

+0

1つのコメントを追加しますか?重大度レベル10のメッセージは情報メッセージであり、入力した情報の誤りによる問題を示しています。 11〜16の重大度はユーザーによって生成され、ユーザーが修正することができます。したがって、レベル> = 11を確認することをお勧めします。ほとんどのエラーは実際にはレベル= 16です。 –

+0

私はすでにレベル11〜16がおそらくオペレータに報告されるべきだと書いています。もし彼が間違ったSQLを提供すれば、おそらく11〜16の範囲でエラーになるでしょう。しかし、彼の仕事は常に失敗します。しかし構文が正しい場合、私はどのように/なぜCHECKDBが "ユーザーが訂正可能なエラー"を報告するかは分かりません。そして、たとえそれがあっても、データベースが壊れているために99%はないと確信しています。私は本当にその場合レベル21以上のメッセージを期待しています。 –

関連する問題