7

昨日、ID列のあるテーブルにレコードを突然挿入できなくなったという異常な問題が発生しました。

次のような単純な挿入:INSERT INTO MyTable(Column1、Column2)VALUES('text'、236764)

主キー制約違反のスローを開始しました。

テーブルでDBCCCHECKIDENTを実行したところ、SQL Serverが最後に使用された値の更新を停止したため、挿入時に古い値を使用して増分され、新しいID値は通常テーブルにすでに存在していたため、違反エラーが発生しました。 。

問題の解決は問題ではありませんでした。次に大きいシーケンス番号のテーブルを再シードしただけですが、これが発生するのはこれまで見たことがありません。

SQL ServerがIDプロパティの更新を停止する原因と、証拠を探す場所を誰かが知っていますか?レプリケーションやトリガーは含まれていません。これは単なる古いテーブルです。

編集:SQL Log Rescueが理想的でしたが、SQL Server 2000でのみ機能します。SQL2005ログ用の同様のツールはありますか?

4

2 に答える 2

1

SETIDENTITY_INSERTONはIDを再シードすると思います。

BOLから

挿入された値がテーブルの現在のID値よりも大きい場合、SQLServerは新しく挿入された値を現在のID値として自動的に使用します。

この問題を再現できる唯一の方法は、DBCCCHECKIDENTを使用してシードを手動で低く設定しすぎることでした。

于 2008-10-27T04:57:14.640 に答える
1

誰かがSET IDENTITY_INSERT ONを使用してテーブルに挿入した場合、誰かがテーブルに無効な値を入力した可能性があります。それが私の最初の推測です。SQL Log Rescueのようなログ アナライザーを使用して、トランザクション ログを過去にさかのぼって、データをめちゃくちゃにした悪者を見つけることができるかどうかを確認できます...

于 2008-10-27T03:56:43.450 に答える