- PR -

Oracle10g 実データ数より多くエクスポートされる

投稿者投稿内容
ぴんふ
ベテラン
会議室デビュー日: 2006/07/13
投稿数: 80
投稿日時: 2008-03-14 20:53
こんばんは。ぴんふです。
Linux上のDB(Oracle10g)からexpコマンドでテーブルデータをエクスポートしたところ、
実際にテーブルに格納されている件数より多くエクスポートされました。
(500万件程度のテーブルで2万件ほど多くエクスポートされたというメッセージが出力)
そのDMPデータを別サーバの同定義のテーブルにインポートしたところキー重複が発生しました。
エラーは出ていません。
コマンドは
exp XXXX/XXXX@XXXXXX tables=TBL_A file=TBL_A.dmp log=TBL_A.log
という具合です。
「Oracle10g exp 件数」等で検索しましたが同様の状況についてはヒットしませんでした。
似たような経験をされた方がいらしたらアドバイスをお願いします。
ぴんふ
ベテラン
会議室デビュー日: 2006/07/13
投稿数: 80
投稿日時: 2008-03-17 12:58
若干訂正します。
多かった件数は約2000件でした。
エラーが出ていないというのは
エクスポート時にエラーが出ていないということです。

以上、よろしくお願いします。
YASUYOKA
ベテラン
会議室デビュー日: 2007/03/19
投稿数: 71
投稿日時: 2008-03-17 15:24
引用:

ぴんふさんの書き込み (2008-03-14 20:53) より:
こんばんは。ぴんふです。
Linux上のDB(Oracle10g)からexpコマンドでテーブルデータをエクスポートしたところ、
実際にテーブルに格納されている件数より多くエクスポートされました。
(500万件程度のテーブルで2万件ほど多くエクスポートされたというメッセージが出力)
そのDMPデータを別サーバの同定義のテーブルにインポートしたところキー重複が発生しました。
エラーは出ていません。
コマンドは
exp XXXX/XXXX@XXXXXX tables=TBL_A file=TBL_A.dmp log=TBL_A.log
という具合です。



インポート先のデータベースに同一テーブルに重複分のデータが既に登録済みという
ことはありませんか?
ぴんふ
ベテラン
会議室デビュー日: 2006/07/13
投稿数: 80
投稿日時: 2008-03-17 16:06
YASUOKAさん、ご返答ありがとうございます。
引用:

インポート先のデータベースに同一テーブルに重複分のデータが既に登録済みという
ことはありませんか?


インポート前にTRUNCATEしているのでそれは無いです、業務上の制約でexpしたデータをワークテーブルにインポートしての比較もできない状態なので困っている次第です。
いーた
大ベテラン
会議室デビュー日: 2004/07/12
投稿数: 154
お住まい・勤務地: 東京
投稿日時: 2008-03-17 18:09
エクスポートした時点で想定より多かったのではないでしょうか。
expコマンドを発行する直前でcountを取って確認してみてはどうでしょうか。
ステップ毎に確認するのが確実かと思います。
1. EXP元の件数取得
2. EXP
3. IMP先をTRUNCATE
4. IMP先の件数取得
5. IMP
ぴんふ
ベテラン
会議室デビュー日: 2006/07/13
投稿数: 80
投稿日時: 2008-03-17 19:44
いーたさんご返答ありがとうございます。
お勧めいただいた方法で2.まで試しました。
1.の件数(SELECT結果)と
2.の件数(expのログに出力されるXXXX行エクスポートされましたのXXXX行)
において、やはり2.の件数のほうが焼く2000件多い状態です。
件数に差異がある状態なので3.以降は試していません。
(何か他の環境的な要因があるかと思い、いったんテーブルスペースを再作成、データを再投入してからexpを試したり、expではなくData Pumpを使ったりもしましたが、結果は上記と同じでした)
サポートに聞くしかないのでしょうか・・・?
indigo-x
大ベテラン
会議室デビュー日: 2008/02/21
投稿数: 207
お住まい・勤務地: 太陽の塔近く
投稿日時: 2008-03-17 19:51
最近Oracle触ってないな。。。(あまり詳しくないですが)

expのオプションでCONSISTENTをYに設定して実行してはどうでしょうか?

(ロールバックセグメント消費するらいいので注意)

分離レベルが低いのでファントムが発生しているのではと。。。
上総
大ベテラン
会議室デビュー日: 2006/06/22
投稿数: 107
投稿日時: 2008-03-17 20:06
Oracleのインポートではどうか分かりませんが、PostgreSQLではインポート処理時に
トリガー(INSERTトリガー)が起動する為、デュプリケートエラーが発生する事があり
ます。(INSERT時に別テーブルへINSERT処理を行うトリガー)

[ メッセージ編集済み 編集者: 上総 編集日時 2008-03-17 20:07 ]

スキルアップ/キャリアアップ(JOB@IT)