2008-09-18 146 views
33
  • 我有一個使用expdp創建的Oracle數據庫備份文件(.dmp)。
  • .dmp文件是整個數據庫的導出。
  • 我需要從此轉儲文件中還原1個模式。
  • 我不知道這個轉儲文件中的模式的名稱。
  • 要使用impdp導入數據,我需要要加載的模式的名稱。

因此,我需要檢查.dmp文件並列出其中的所有模式,我該怎麼做?如何確定Oracle數據泵內部的模式導出文件


更新(2008-09-18 13:02) - 更詳細的信息:

的IMPDP命令我使用的電流爲:

impdp user/[email protected] 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/[email protected] directory=DPUMP_DIR dumpfile=EXPORT.DMP 
     SCHEMAS=SOURCE_SCHEMA REMAP_SCHEMA=SOURCE_SCHEMA:MY_SCHEMA 

但要做到這一點,我需要源模式。

回答

11

如果使用可以處理大文件的編輯器打開DMP文件,則可能可以找到提及架構名稱的區域。只要確保不要改變任何東西。如果您打開原始轉儲的副本,會更好。

+0

爲我工作100% – theo231022 2016-07-11 13:55:42

5

假設您沒有首先生成該文件的expdp作業的日誌文件,最簡單的選擇可能是使用SQLFILE parameter讓impdp生成一個DDL文件(基於完全導入)。然後您可以從該文件中獲取模式名稱。當然,這並不理想,因爲impdp必須讀取整個轉儲文件以提取DDL,然後再次轉到您感興趣的模式,並且必須爲各種CREATE USER語句搜索一些文本文件,但它應該是可行的。

+0

我曾試圖使用SQLFILE參數,但它在.sql輸出文件中的一行失敗:「 - CONNECT MYSCHEMA」。我認爲通過多一點努力來實現它,這可能會產生解決方案。 – KyleLanser 2008-09-19 16:25:52

9

更新(2008-09-19 10:05) - 解決方案:

我的解決方案:社會工程,我挖的實際努力和發現有人誰知道架構名稱。
技術解決方案:搜索.dmp文件確實產生模式名稱。
一旦我知道模式名稱,我搜索了轉儲文件,並瞭解到哪裏可以找到它。

在Schema的名字被看到的地方,在。dmp文件:

  • <OWNER_NAME>SOURCE_SCHEMA</OWNER_NAME> 這是每個表的名稱/定義過的。

  • SCHEMA_LIST 'SOURCE_SCHEMA' 這被看作接近的.dmp結束。

有趣的是,周圍的SCHEMA_LIST 'SOURCE_SCHEMA'部分,它也有用來創建轉儲在命令行中,使用的目錄,使用標準桿文件,Windows版本,它是運行,並出口會話設置(語言,日期格式)。

所以,問題就解決了:)

68

impdp出口一個dmp備份的DDL的文件,如果使用的SQLFILE parameter。例如,要把它放到一個文本文件

impdp '/ as sysdba' dumpfile=<your .dmp file> logfile=import_log.txt sqlfile=ddl_dump.txt 

然後檢查ddl_dump.txt的表空間,用戶和備份模式。

根據文檔,這實際上並沒有修改數據庫:

的SQL並沒有真正執行,和目標系統保持不變。

+10

好奇爲什麼downvote,我幾次使用這種方法自己在幾次確定模式,這是一個比「社會工程」或「挖掘dmp 「 – 2012-01-18 14:38:03

4

的運行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 
/

http://download.oracle.com/otndocs/products/database/enterprise_edition/utilities/pdf/oow2011_dp_mastering.pdf

2

我的解決方案(類似於KyleLanser的答案)(在Unix):

strings dumpfile.dmp | grep SCHEMA_LIST 
3

第1步:下面是一個簡單的例子。您必須使用SQLFILE選項從轉儲文件創建SQL文件。

步驟2:grep的用於在生成的SQL文件CREATE USER(這裏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 - 上週五4月生產26 8時29分06秒2013

版權所有(C)1982年,2011年,Oracle和/或其附屬公司。版權所有。

用戶名:/作爲SYSDBA

處理對象類型SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA作業 「SYS」。「SYS_SQL_FILE_FULL_01」 成功地完成了在8點29分12秒

$ grep "CREATE USER" tables.sql 

CREATE USER 「USER1」 標識BY值 'S:270D559F9B97C05EA50F78507CD6EAC6AD63969E5E; BBE7786A5F9103'

地塊的數據泵選擇這裏解釋http://www.acehints.com/p/site-map.html

0

您需要搜索OWNER_NAME。

cat -v dumpfile.dmp | grep -o '<OWNER_NAME>.*</OWNER_NAME>' | uniq -u 

cat -v將dumpfile轉換爲可見文本。

的grep -o只顯示了比賽,所以我們沒有看到很長的線

所以你看,產出少的uniq -u去除重複行。

即使在大型轉儲文件中,此方法也可以很好地工作,並且可以針對腳本中的使用進行調整。