10

Oracle データ ポンプ インポート ツール (IMPDP.EXE) を使用して、REMAP_SCHEMA オプションを使用して、あるスキーマを別のスキーマにインポートできます。ただし、トリガーが適切に再マップされないという問題があります。これにより、トリガーがまったく作成されず、次のようなエラーが発生します。

ORA-39083: Object type TRIGGER failed to create with error: ORA-00942: table or view does not exist Failing sql is: CREATE TRIGGER "**NEW_SCHEMA**"."METER_ALARMS_BI"   BEFORE INSERT ON
**OLD_SCHEMA**.METER_ALARMS ...

これは、create SQL がまだ OLD_SCHEMA を参照しているためです。Oracleのドキュメントには次のように書かれています:

Import が検出できない特定のスキーマ参照があるため、マッピングは 100% 完了していない可能性があります。たとえば、インポートは、型、ビュー、プロシージャ、およびパッケージの定義の本体に埋め込まれたスキーマ参照を検出しません。

私見、これはオラクルによるちょっとした取り締まりですが、それは別の議論です!

Oracle Metalink note 750783.1 によると、回避策は次のとおりです。

  1. 関連する DDL コマンドを含める SQLFILE を作成します。
      impdp system/****** directory=test_dp
      DUMPFILE=export_schemas.dmp
     remap_schema=u1:u2 sqlfile=script.sql
  1. 記述された SQLFILE から影響を受ける DDL を抽出し、スキーマ参照を修正します。次に、コマンドを手動で実行します。

これは、多くの失敗したオブジェクトがあり、データベースの現場でのアップグレードのために複数のスキーマを組み合わせるプロセスを自動化したい場合は特に、良い方法ではありません。

これを行うためのより良い方法を見つけた人はいますか?現場で使用する場合、100% 信頼できるソリューションが必要です。生成された SQL ファイルを解析できますが、これを 100% 正しいものにすることはできますか? IMPDP によって実行される CREATE SQL ステートメントを傍受し、インポート中にその場で修正する方法はありませんか? DMP ファイルに直接パッチを適用できますか?

4

2 に答える 2

0

DBMS_METADATA を見ることができます

そのためのREMAP_SCHEMAオプションがあります。それが DATAPUMP よりもうまく機能するかどうかはわかりません (そして、DATAPUMP は裏で DBMS_METADATA を使用するのではないかと思います)。ただし、出力を「後処理」する方が簡単です。

于 2010-01-26T22:02:52.210 に答える