データベース内のすべての既存のオブジェクトテーブルだけではないを現在のデータベースに置き換えたい。
インポートするインスタンスから、sysdbaとしてログインしているときにfull=yes
を付与したシステムユーザーとして、パラメーターdatapump_imp_full_database
を指定してexpdpを実行しました。パラメータtable_exists_action=replace
を使用してターゲットデータベースでimpdpを実行しましたが、(当然のことながら)既存のテーブルのみが置き換えられましたが、プロシージャ、関数、ビューは置き換えられませんでした。
すべてのオブジェクトにtable_exists_action
に相当するものはありますか?そうでない場合、どうすればこれを達成できますか?
どちらのデータベースもWindows 10ではOracle 12cです。
プロシージャやパッケージなど、テーブル以外のオブジェクトには「置換」オプションはないと思います。
最良のオプションは、データポンプのインポートの前にスキーマを完全に削除することです。このようにして、datapumpはスキーマと含まれているすべてのオブジェクトを再作成します。
トラップが1つあります-スキーマを削除すると、スキーマが持っていた他のスキーマオブジェクトへのすべての許可が失われ、他のスキーマのオブジェクトに依存するvievs/procedures/functionsの一部がコンパイルされません。
したがって、ドロップする前に、オブジェクト許可を再構築するためのスクリプトをいくつか準備する必要があります。
select * from dba_tab_privs where grantee='<schema-for-drop/import>'
ソースデータベースのオブジェクトをエクスポートして、ターゲットデータベースにインポートします。ソースデータベースに存在するターゲットデータベースのオブジェクトは、ソースデータベースのオブジェクトに置き換える必要があります。
多分あなたは次の方法を使うことができます:
新しいターゲットデータベースには、ソースデータベースのオブジェクトが含まれます。これは、インポートによって置き換えられないためです。元のターゲットデータベースのオブジェクトは、元のターゲットデータベースのインポートによって作成されるため、ソースデータベースにはありません。
ソースデータベースのコピーを作成する方法はいくつかあります