web-dev-qa-db-ja.com

expdp / impdpコマンドは毎日のスキーマ同期に適していますか?

私は次のコマンドを実行しました:

expdp system/password@localdb ^
schemas=SCH directory=dumps_dir dumpfile=SCH_%date%.dmp logfile=expdpSCH_%date%.log

エラーなしでうまく動作します。しかし、私がコマンドを使用するとき:

impdp system/password@localdb ^
schemas=SCH directory=dumps_dir dumpfile=SCH_%date%.dmp logfile=impdpSCH_%date%.log

テーブル、シーケンス、その他のものがすでに存在するというエラーがたくさん発生しました。だから私は質問があります、私はそのようなアプローチを使うことができますか、それともそれは間違っていて、私は何か他のものを使うべきですか?

1
Dracontis

詳細についてはドキュメントを確認するか、impdp help=yと入力してください。既存のオブジェクトを上書きするか、追加するかを定義するパラメーター(TABLE_EXISTS_ACTION)があります。

TABLE_EXISTS_ACTION
インポートされたオブジェクトがすでに存在する場合に実行するアクション。
有効なキーワードは、APPEND、REPLACE、[SKIP]、TRUNCATEです。

0
Marco

いいえ、それは可能な方法ではありません:

  • テーブル以外のオブジェクトのほとんどは、スキーマにすでに存在します。あなたはすでにそのようなエラーメッセージを受け取ります。インポートはそれを上書きしません。
  • テーブルがすでに存在する場合にエクスポートがどのように機能するかを構成できますが、別のテーブルによって参照されるテーブルがある場合、TRUNCATEおよびREPLACEは機能しません。
  • テーブルインデックスへの外部キー参照がない場合でも、インポートが大幅に遅くなります
  • 他の多くの問題が発生する可能性があります(トリガー、パーティション、他のテーブルへの参照などに関して)

したがって、expdp/impdpを使用してスキーマを同期する唯一の合理的な方法は、インポートする前にスキーマを削除することです。

何らかの理由でスキーマを削除したくないが、テーブルのデータを置き換える場合は、多くの追加操作が必要です。

3
miracle173