web-dev-qa-db-ja.com

全データベースのインポートのために、Oracleの既存のすべてのオブジェクトをimpdpで置き換えて上書きする方法は?

データベース内のすべての既存のオブジェクトテーブルだけではないを現在のデータベースに置き換えたい。

インポートするインスタンスから、sysdbaとしてログインしているときにfull=yesを付与したシステムユーザーとして、パラメーターdatapump_imp_full_databaseを指定してexpdpを実行しました。パラメータtable_exists_action=replaceを使用してターゲットデータベースでimpdpを実行しましたが、(当然のことながら)既存のテーブルのみが置き換えられましたが、プロシージャ、関数、ビューは置き換えられませんでした。

すべてのオブジェクトにtable_exists_actionに相当するものはありますか?そうでない場合、どうすればこれを達成できますか?

どちらのデータベースもWindows 10ではOracle 12cです。

5
Saad Mahmood

プロシージャやパッケージなど、テーブル以外のオブジェクトには「置換」オプションはないと思います。

最良のオプションは、データポンプのインポートの前にスキーマを完全に削除することです。このようにして、datapumpはスキーマと含まれているすべてのオブジェクトを再作成します。

4
andba77

トラップが1つあります-スキーマを削除すると、スキーマが持っていた他のスキーマオブジェクトへのすべての許可が失われ、他のスキーマのオブジェクトに依存するvievs/procedures/functionsの一部がコンパイルされません。

したがって、ドロップする前に、オブジェクト許可を再構築するためのスクリプトをいくつか準備する必要があります。

select * from dba_tab_privs where grantee='<schema-for-drop/import>'

2
Piotr Pisera

ソースデータベースのオブジェクトをエクスポートして、ターゲットデータベースにインポートします。ソースデータベースに存在するターゲットデータベースのオブジェクトは、ソースデータベースのオブジェクトに置き換える必要があります。

多分あなたは次の方法を使うことができます:

  1. ターゲットデータベースの完全なエクスポートを行う
  2. ターゲットデータベースをソースデータベースのコピーで置き換える
  3. 元のターゲットデータベースのダンプを新しいターゲットデータベースにインポートする

新しいターゲットデータベースには、ソースデータベースのオブジェクトが含まれます。これは、インポートによって置き換えられないためです。元のターゲットデータベースのオブジェクトは、元のターゲットデータベースのインポートによって作成されるため、ソースデータベースにはありません。

ソースデータベースのコピーを作成する方法はいくつかあります

  1. 空のデータベースを作成し、ソースデータベースをインポートする
  2. rman DUPLICATコマンドを使用して、ソースデータベースのコピーを作成します。
0
miracle173