だから、私は.dmpファイルを調べて、その中のすべてのスキーマをリストする必要があります、どうすればいいですか?
更新(2008-09-18 13:02)-詳細情報:
私が現在使用しているimpdpコマンドは次のとおりです。
impdp user/password@database directory=DPUMP_DIR
dumpfile=EXPORT.DMP logfile=IMPORT.LOG
そして、DPUMP_DIRが正しく構成されています。
SQL> SELECT directory_path
2 FROM dba_directories
3 WHERE directory_name = 'DPUMP_DIR';
DIRECTORY_PATH
-------------------------
D:\directory_path\dpump_dir\
はい、EXPORT.DMPファイルはそのフォルダー内にあります。
Impdpコマンドの実行時に表示されるエラーメッセージは次のとおりです。
Connected to: Oracle Database 10g Enterprise Edition ...
ORA-31655: no data or metadata objects selected for job
ORA-39154: Objects from foreign schemas have been removed from import
このエラーメッセージはほとんど予想されます。 impdpコマンドが必要です:
impdp user/password@database directory=DPUMP_DIR dumpfile=EXPORT.DMP
SCHEMAS=SOURCE_SCHEMA REMAP_SCHEMA=SOURCE_SCHEMA:MY_SCHEMA
しかし、それを行うには、ソーススキーマが必要です。
大きなファイルを処理できるエディターでDMPファイルを開くと、スキーマ名が記載されている領域を見つけることができる場合があります。何も変更しないでください。元のダンプのコピーを開いた方が良いでしょう。
impdp
パラメーター を使用すると、dmp
はSQLFILE
バックアップのDDLをファイルにエクスポートします。たとえば、これをテキストファイルに入れます
impdp '/ as sysdba' dumpfile=<your .dmp file> logfile=import_log.txt sqlfile=ddl_dump.txt
次に、ddl_dump.txt
バックアップ内の表領域、ユーザー、およびスキーマ。
ドキュメントによると、これは実際にはデータベースを変更しません:
SQLは実際には実行されず、ターゲットシステムは変更されません。
更新(2008-09-19 10:05)-解決策:
私の解決策:ソーシャルエンジニアリング、私は本当に一生懸命掘り、スキーマ名を知っている人を見つけました。
技術的解決策: .dmpファイルの検索didスキーマ名を取得します。
スキーマ名がわかったら、ダンプファイルを検索し、どこにあるかを学びました。
.dmpファイルで、スキーマ名が表示された場所:
<OWNER_NAME>SOURCE_SCHEMA</OWNER_NAME>
これは、各テーブル名/定義の前に見られました。
SCHEMA_LIST 'SOURCE_SCHEMA'
これは.dmpの終わり近くで見られました。
興味深いことに、SCHEMA_LIST 'SOURCE_SCHEMA'
セクションには、ダンプの作成に使用されるコマンドライン、使用されるディレクトリ、使用されるparファイル、実行されるWindowsバージョン、およびセッション設定(言語、日付形式)のエクスポートも含まれていました。
だから、問題は解決しました:)
最初にファイルを生成したexpdpジョブのログファイルがないと仮定すると、おそらく最も簡単なオプションは SQLFILEパラメーター を使用してimpdpがDDLのファイルを生成することです(ベース完全なインポートで)。その後、そのファイルからスキーマ名を取得できます。もちろん、理想的ではありません。impdpはDDLを抽出するためにダンプファイル全体を読み取ってから、目的のスキーマに再度アクセスする必要があり、さまざまなCREATE USERステートメントを検索するためにテキストファイルを少し実行する必要があるため、しかしそれは実行可能でなければなりません。
Impdpコマンドを実行してsqlfileを生成するには、DATAPUMP_IMP_FULL_DATABASEロールを持つユーザーとして実行する必要があります。
または...特権の低いユーザーとして実行し、MASTER_ONLY = YESオプションを使用して、マスターテーブルを検査します。例えば.
select value_t
from SYS_IMPORT_TABLE_01
where name = 'CLIENT_COMMAND'
and process_order = -59;
col object_name for a30
col processing_status head STATUS for a6
col processing_state head STATE for a5
select distinct
object_schema,
object_name,
object_type,
object_tablespace,
process_order,
duplicate,
processing_status,
processing_state
from sys_import_table_01
where process_order > 0
and object_name is not null
order by object_schema, object_name
/
ステップ1:これは1つの簡単な例です。 SQLFILE
オプションを使用して、ダンプファイルからSQLファイルを作成する必要があります。
ステップ2:CREATE USER
生成されたSQLファイル(ここではtables.sql)
ここの例:
$ impdp directory=exp_dir dumpfile=exp_user1_all_tab.dmp logfile=imp_exp_user1_tab sqlfile=tables.sql
インポート:リリース11.2.0.3.0-2013年4月26日金曜日の生産08:29:06 2013
Copyright(c)1982、2011、Oracleおよび/またはその関連会社。全著作権所有。
ユーザー名:/ sysdbaとして
オブジェクトタイプSCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMAの処理ジョブ "SYS"。 "SYS_SQL_FILE_FULL_01"は08:29:12に正常に完了しました
$ grep "CREATE USER" tables.sql
値「S:270D559F9B97C05EA50F78507CD6EAC6AD63969E5E; BBE7786A5F9103」で識別されるユーザー「USER1」を作成
ここで説明されている多くのデータポンプオプション http://www.acehints.com/p/site-map.html
私の解決策(KyleLanserの答えに似ています)(Unixボックス上):
strings dumpfile.dmp | grep SCHEMA_LIST
OWNER_NAMEを検索する必要があります。
cat -v dumpfile.dmp | grep -o '<OWNER_NAME>.*</OWNER_NAME>' | uniq -u
cat -vは、ダンプファイルを可視テキストに変換します。
grep -oは一致のみを表示するため、実際には長い行は表示されません
uniq -uは重複行を削除するため、出力が少なくなります。
これは、大きなダンプファイルでも非常にうまく機能し、スクリプトで使用するために微調整することができます。