如何确定Oracle Data Pump导出文件中的模式

时间:2020-03-06 14:22:53  来源:igfitidea点击:
  • 我有一个用expdp创建的Oracle数据库备份文件(.dmp)。
  • .dmp文件是整个数据库的导出。
  • 我需要从此转储文件中还原1个架构。
  • 我不知道此转储文件中的架构名称。
  • 要使用impdp导入数据,我需要加载架构的名称。

因此,我需要检查.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

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

解决方案

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

如果使用可以处理大文件的编辑器打开DMP文件,则可以找到提到架构名称的区域。只要确保不更改任何内容即可。如果我们打开原始转储的副本,那会更好。

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

我的解决方案:社会工程,我非常努力地挖掘,找到了一个知道架构名称的人。
技术解决方案:搜索.dmp文件确实产生了架构名称。
知道架构名称后,我便搜索了转储文件并了解了在何处找到它。

在.dmp文件中看到架构名称的位置:

  • <OWNER_NAME> SOURCE_SCHEMA </ OWNER_NAME>在每个表名称/定义之前都可以看到。
  • SCHEMA_LIST'SOURCE_SCHEMA'这是在.dmp末尾看到的。

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

所以,问题解决了:)