私はOracleの初心者であり、すべてのデータとメタデータをOracleデータベース内の1つのスキーマから別のスキーマに転送するつもりです。 datapumpのexpdp
およびimpdp
コマンドを使用する予定です。これについて質問があります:
expdp
およびimpdp
コマンドを実行できますか?それは好ましい方法ですか?このステートメントは、スキーマからすべてのオブジェクト(データとメタデータ)を取得して、それらを別のスキーマに移動しますか?
expdp \"/ as sysdba\" schemas=<schemaname> directory=dumpdir dumpfile=<schemaname>.dmp logfile=expdp_<schemaname>.log
それで、ターゲットスキーマはimpdp
コマンドの後のソーススキーマの正確なコピーですか?
impdp
は、まだ存在しない場合はユーザーを作成するので、それが必要な場合を除き、心配する必要はありません。
impdb
またはexpdp
をsysdba
として実行しないでください。Oracleサポートから要求された場合にのみ実行してください。特定の状況で。そのためには、通常のユーザーを使用します。たとえば、dba
ロールが付与されているユーザーなどです。 ( [IMPORT|EXPORT]_FULL_DATABASE
このタイプのものに特化した権限。Oracleディレクトリオブジェクトへのアクセスも許可する必要があります。)
完全なスキーマエクスポート(メタデータとコンテンツ)は、実際には次のようになります。
expdp user/pass schemas=<schemaname> directory=dumpdir \
dumpfile=<schemaname>.dmp \
logfile=expdp_<schemaname>.log
別のユーザー/スキーマにインポートする場合(ターゲットデータベースをソースと同じにすることができます)、以下を使用できます。
impdp user/pass schemas=schema1 directory=dumpdir \
remap_schema=schema1:schema2 \
dumpfile=schema1.dmp \
logfile=impdp_schema2.log
完全なインポートが必要ない場合は、データとメタデータの両方にいくつかのフィルターを設定できます。 インポート操作中のフィルタリング を参照してください。
tilities Guide にすべての詳細があります。少なくとも概要の部分を読むことを強くお勧めします。
切り捨てられたテーブルをインポートする場合、つまり、データをインポートしてテーブルに戻すだけです。
_impdp user/pass TABLES=dept DIRECTORY=TEST_dir dumpfile=TEST.dmp logfile=expdpTEST.log TABLE_EXISTS_ACTION=REPLACE
_
テーブルの上は、インポートしたいdept
です。以前に切り捨てました。 _TEST.dmp
_であるダンプファイルと_expdpTEST.log
_であるlogfile
から、データのみをインポートします(テーブル構造は同じなので、パラメーター_TABLE_EXISTS_ACTION
_を使用します)。
emp
とdept
などの2つのテーブルを切り捨てており、emp
テーブルに外部キーとして_dept_id
_がある場合、インポート時のエラーを回避するために、最初にdept
テーブルをインポートし、次にemp
テーブルをインポートする必要があります。