私はエレガントな解決策を見つけられなかった問題に直面しました:
スキーマを複製する必要があります同じデータベース内なので、datapumpのremap_schema
インポートパラメータを使用します。
問題は、PL/SQLパッケージに多数の完全修飾オブジェクト名(select * from FROM_SCHEMA_A.table_name
など)が含まれていることです。これらの修飾子は複製されます。これにより、複製されたパッケージが無効になります。
私はcould明らかにgrant all on FROM_SCHEMA_A ... to TO_SCHEMA_A
で問題を解決しましたが、これは私が望んでいることではありません。修飾された名前も変更したいのですが。
エクスポートパラメータは
content=metadata_only
directory=DATAPUMP_DIR
dumpfile=clone_schema.dmp
schemas=from_schema_a
exclude=trigger
インポートパラメータは
directory=DATAPUMP_DIR
dumpfile=clone_schema.dmp
remap_schema=from_schema_a:to_schema_a
transform=OID:n
権限を付与すると(上記のように)、問題は解消されたように見えるかもしれませんが、SCHEMA_Bで実行されているコードが、必要としない限り、SCHEMA_Aのテーブルのデータにアクセスしている可能性があります。
残念ながら、datapumpのremap_schemaオプションは実際に実行しようとしていることをサポートしていないため、この問題に対する簡単な答えはありません。しかし、あなたは次のオプションを試すことができます(私は以前にそれをやったことがあります)、
面倒ですが、ソーススキーマを修正するまでは、選択肢が多すぎるとは思いません。幸運なことに、コードがそれほど頻繁に変更されない状況にある場合は、変換されたファイルを保持し、何かが壊れるまでこれらの手動の手順を回避できます。
ああ、あなたのpl/sqlコードが "schema_a.package_nameの作成または置換"のように見える場合、不運なことに、remap_schemaはそれをサポートしません(11.2まで、私は12cでまだテストしていません)。