- - PR -
PRIMARY KEYに重複データが登録されてしまう(Oracle 10g)
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-09-19 14:04
(意地悪でも何でも無く)にわかには信じられないのですが・・・ 全く同じPK値を持つレコードが複数存在するということを、 どうやって確認しましたか?例えば以下のSQLの結果は?
本当にOracleの重大な不具合なのでしょうか。 | ||||||||||||
|
投稿日時: 2007-09-20 13:17
可能性は低いと思いますが・・・
INDEXがDISABLEDになっているとか。 あとは、、、PRM_XXXXとかいう名前なんだけど 実はプライマリーとかユニークの設定じゃないとか。 (後者はうちの新人がやっていて笑ってしまった・・) | ||||||||||||
|
投稿日時: 2007-09-25 11:52
初めて投稿します。
実は私も同じような現象に遭遇し悩んでいたところ、この記事を見つけました。 客先に納品してあるデータをDUMP(exp.exe)し、社内のDBにそのデータを インポートしてみたところ、PRIMARY KEYの作成に失敗しました。原因は、 重複データが存在したからでした。そこで、PRIMARY KEYを無効にしデータのみを インポートしたら、やはりKEYの重複したデータがありました。 私も、PRIMARY KEYが重複するハズが無いと思っていたのですが、現地のDBを確認 してみたところ、確かに現地のDB(PRIMARY KEY有り)にも重複するデータが存在 しました。 インデックスを使用しないSQLでデータを抽出した場合、重複データが取得でき、 PRIMARY KEYを使用したSQLでデータを抽出した場合、重複データは取得出来ません でした。(なんか変な日本語になっていますが・・・) SQLの実行計画を確認したところ、TABLE ACCESS FULL となるSQLでデータを抽出すると 重複データが取得出来ました。 こあらさんのSQLを試せれば良かったのですが、現地から帰って来た後にこの記事を 見つけたもので・・・。 重複データのDB環境が手元に無いので、現在のところ色々と調査する事が出来ません。 会社のDBに同じような現象を起こそうとしても起きないのが、現状です。 一つ気になる事は、からすみさんと同じように、データの登録方法が同じで、データを 一括登録しています。(配列のデータを用いてINSERTしています) ODP.NET の OracleParameter を使用しています。 現在も、同じキーのデータを登録しようとすると、ちゃんと一意制約違反になります。 このような状態がどうやったら作れるのかが・・・謎です。 環境は、Oracle10g ODP.NET C# です。 | ||||||||||||
|
投稿日時: 2007-09-25 12:31
「現地のDB」にSQLLoaderのダイレクトモードでロードした可能性はありますか? OTN ダイレクト・ロード、整合性制約およびトリガー | ||||||||||||
|
投稿日時: 2007-09-25 12:56
データの登録には、SQLLoaderを使っていませんので、 ダイレクトモードでロードした可能性というのは無いですね。 |