如何确定Oracle Data Pump Export文件中的Schema

Kyl*_*ser 37 oracle import

  • 我有一个用expdp创建的Oracle数据库备份文件(.dmp).
  • .dmp文件是整个数据库的导出.
  • 我需要从此转储文件中恢复其中一个模式.
  • 我不知道这个转储文件中的模式的名称.
  • 要使用impdp导入数据,我需要加载架构的名称.

所以,我需要检查.dmp文件并列出其中的所有模式,我该怎么做?


更新(2008-09-18 13:02) - 更多详细信息:

我目前使用的impdp命令是:

impdp user/password@database directory=DPUMP_DIR 
      dumpfile=EXPORT.DMP logfile=IMPORT.LOG  
Run Code Online (Sandbox Code Playgroud)

并且DPUMP_DIR已正确配置.

SQL> SELECT directory_path
2  FROM dba_directories
3  WHERE directory_name = 'DPUMP_DIR';

DIRECTORY_PATH
-------------------------
D:\directory_path\dpump_dir\
Run Code Online (Sandbox Code Playgroud)

是的,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
Run Code Online (Sandbox Code Playgroud)

此错误消息通常是预期的.我需要impdp命令:

impdp user/password@database directory=DPUMP_DIR dumpfile=EXPORT.DMP 
      SCHEMAS=SOURCE_SCHEMA REMAP_SCHEMA=SOURCE_SCHEMA:MY_SCHEMA
Run Code Online (Sandbox Code Playgroud)

但要做到这一点,我需要源模式.

Fac*_*tic 82

impdpdmp如果使用该SQLFILE参数,则将备份的DDL导出到文件.例如,将其放入文本文件中

impdp '/ as sysdba' dumpfile=<your .dmp file> logfile=import_log.txt sqlfile=ddl_dump.txt
Run Code Online (Sandbox Code Playgroud)

然后检查ddl_dump.txt备份中的表空间,用户和模式.

根据文档,这实际上并没有修改数据库:

SQL实际上并未执行,目标系统保持不变.

  • 好奇为什么这个downvote,我已经多次使用这种方法来确定模式,并且它比"社会工程"或"挖掘dmp"的其他答案简单得多. (12认同)
  • 谁会贬低这个?它使我免于试图解析一个巨大的转储. (6认同)

Pet*_*ros 12

如果使用可以处理大文件的编辑器打开DMP文件,则可以找到提及架构名称的区域.请务必不要改变任何东西.如果您打开原始转储的副本会更好.


Kyl*_*ser 10

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

我的解决方案:社交工程,我努力挖掘并找到了解模式名称的人.
技术解决方案:搜索.dmp文件确实产生了模式名称.
一旦我知道模式名称,我搜索了转储文件并了解了在哪里找到它.

在.dmp文件中看到了模式名称的位置:

  • <OWNER_NAME>SOURCE_SCHEMA</OWNER_NAME> 这是在每个表名/定义之前看到的.

  • SCHEMA_LIST 'SOURCE_SCHEMA' 这是在.dmp结尾附近看到的.

有趣的是,在该SCHEMA_LIST 'SOURCE_SCHEMA'部分周围,它还有用于创建转储的命令行,使用的目录,使用的par文件,运行的Windows版本以及导出会话设置(语言,日期格式).

所以,问题解决了:)


Jus*_*ave 6

假设您没有首先生成该文件的expdp作业的日志文件,最简单的选择可能是使用SQLFILE参数让impdp生成DDL文件(基于完全导入).然后,您可以从该文件中获取模式名称.当然不理想,因为impdp必须读取整个转储文件以提取DDL,然后再次访问您感兴趣的模式,并且您必须执行一些文本文件搜索各种CREATE USER语句,但它应该是可行的.