開発環境(Oracle 11g)では、アップグレードをテストしたり、不具合を検証したりするために、データベース(ユーザー)を以前のバージョンに復元する必要があることがよくあります。
バックアップ/復元を実行するためにexpdp/impdpを使用しています。
バックアップの場合、実行します...
expdp 'sys/password@orcl as sysdba' schemas=CurrentUser directory=DirLabel Dumpfile=MyDatabase.dmp logfile=MyDatabase.log
リストアでは、ユーザー(データベース)を手動で削除してから実行しています
impdp 'sys/password@orcl as sysdba' directory=DirLabel Dumpfile=MyOldDatabase.dmp logfile=MyRestore.log remap_schema=OLDUser:CurrentUser
現在、このプロセスを自動化しようとしていますが、質問があります。
復元前に現在のユーザー(データベース)を削除する必要がありますか、それとも完全な復元を強制するために使用できるimpdbにいくつかのオプション/フラグがありますか? TABLE_EXISTS_ACTION = REPLACEを確認しましたが、コマンドラインでオプションをオフにすると、復元中にも同じ「エラー」が発生することに気付きました。
考え?
データをインポートする前に既存のスキーマを削除できるimpdp
コマンドが見つかりませんでした。ただし、Data PumpコマンドラインユーティリティはPL/SQLパッケージ DBMS_DATAPUMP
および DBMS_METADATA
に基づいていることを知っておく必要があります。したがって、DBMS_DATAPUMP
のデータ移動呼び出しプログラムを直接自動化する独自のPL/SQLスクリプトを作成することもできます。また、これはPL/SQLなので、DROP USER
およびDBMS_DATAPUMP
のプログラムを呼び出す前に、スクリプトでDBMS_METADATA
ステートメントを呼び出すだけです。
このアプローチはより柔軟で、タスクをさらに自動化するために Oracle Scheduler を使用できます。