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 によると、回避策は次のとおりです。
- 関連する DDL コマンドを含める SQLFILE を作成します。
impdp system/****** directory=test_dp
DUMPFILE=export_schemas.dmp
remap_schema=u1:u2 sqlfile=script.sql
- 記述された SQLFILE から影響を受ける DDL を抽出し、スキーマ参照を修正します。次に、コマンドを手動で実行します。
これは、多くの失敗したオブジェクトがあり、データベースの現場でのアップグレードのために複数のスキーマを組み合わせるプロセスを自動化したい場合は特に、良い方法ではありません。
これを行うためのより良い方法を見つけた人はいますか?現場で使用する場合、100% 信頼できるソリューションが必要です。生成された SQL ファイルを解析できますが、これを 100% 正しいものにすることはできますか? IMPDP によって実行される CREATE SQL ステートメントを傍受し、インポート中にその場で修正する方法はありませんか? DMP ファイルに直接パッチを適用できますか?