web-dev-qa-db-ja.com

DBCCCHECKDB整合性エラー

テーブルの複製に問題があり、最終的にソーステーブルの整合性エラーまで追跡しましたが、整合性エラーの原因について困惑しています。

DBCC Checkdbを実行したところ、テーブルに次のエラーが見つかりました

メッセージ2570、レベル16、状態3、行1ページ(1:5217772)、オブジェクトID 1038014829のスロット16、インデックスID 1、パーティションID 349502316544000、割り当てユニットID 349502316544000(タイプ「行内データ」)。列「MHGPTX」の値がデータ型「varchar」の範囲外です。列を有効な値に更新します。

テーブル内のどの行が問題の原因であるかをDBCCPAGEを使用して、問題のある行を追跡しました。

スロット16列6オフセット0x28長さ150

MHGPTX = [文字列(長さ150バイト)への変換エラー]

これは私が行き詰まったところです、フィールドのデータはうまく見えます、データは列の最大サイズをはるかに下回っています、私は行を照会することができます、など。

同じデータを使用して行を更新することで問題が解決された、同様の問題への参照がオンラインでいくつか見つかったので、それを試しましたが、変更はありませんでした。

アドバイスをいただければ幸いです

3
Patrick

しばらく経ちましたが、更新したことがないことに気づきました。

エラーの原因は2バイト文字(アジア言語)で、2番目のバイトが切り捨てられていることがわかりました。列を1つ増やしてから、元の幅に戻すことで、問題を修正することができました。これにより、2バイト文字の長引く最初のバイトが切り捨てられ、checkdbがエラーなしで返されるようになりました。

0
Patrick

私はそれを試してみます:

  • すべてのインデックスを削除します
  • クラスター化されたインデックスを再構築します
  • dbccを実行します
  • インデックスを作成する
  • dbccを実行します

また、ハードウェア(ディスク)に不整合がないかチェックします。

0