关于导入:如何确定Oracle Data Pump导出文件中的模式

关于导入:如何确定Oracle Data Pump导出文件中的模式

How to determine the Schemas inside an Oracle Data Pump Export file

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

因此,我需要检查.dmp文件并列出其中的所有架构,我该怎么做?

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

我当前使用的impdp命令是:

1
2
impdp user/password@database directory=DPUMP_DIR
      dumpfile=EXPORT.DMP logfile=IMPORT.LOG

并且DPUMP_DIR已正确配置。

1
2
3
4
5
6
7
SQL> SELECT directory_path
2  FROM dba_directories
3  WHERE directory_name = 'DPUMP_DIR';

DIRECTORY_PATH
-------------------------
D:\directory_path\dpump_dir\

是的,该文件夹中的EXPORT.DMP文件是正确的。

运行impdp命令时收到的错误消息是:

1
2
3
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命令是:

1
2
impdp user/password@database directory=DPUMP_DIR dumpfile=EXPORT.DMP
      SCHEMAS=SOURCE_SCHEMA REMAP_SCHEMA=SOURCE_SCHEMA:MY_SCHEMA

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


如果使用SQLFILE参数,则impdp会将dmp备份的DDL导出到文件中。例如,将其放入文本文件

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

然后,在ddl_dump.txt中检查备份中的表空间,用户和架构。

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

The SQL is not actually executed, and the target system remains unchanged.


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


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

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

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

  • SOURCE_SCHEMA
    在每个表的名称/定义之前都可以看到它。

  • SCHEMA_LIST 'SOURCE_SCHEMA'
    可以在.dmp的末尾看到它。

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

所以,问题解决了:)


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


步骤1:这是一个简单的示例。您必须使用SQLFILE选项从转储文件中创建一个SQL文件。

步骤2:生成的SQL文件(此处为tables.sql)中的CREATE USER的Grep

这里的例子:

1
$ impdp directory=exp_dir dumpfile=exp_user1_all_tab.dmp  logfile=imp_exp_user1_tab sqlfile=tables.sql

Import: Release 11.2.0.3.0 - Production on Fri Apr 26 08:29:06 2013

Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.

Username: / as sysdba

Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA Job"SYS"."SYS_SQL_FILE_FULL_01" successfully completed at 08:29:12

1
$ grep"CREATE USER" tables.sql

CREATE USER"USER1" IDENTIFIED BY VALUES 'S:270D559F9B97C05EA50F78507CD6EAC6AD63969E5E;BBE7786A5F9103'

http://www.acehints.com/p/site-map.html上介绍了许多数据泵选项


运行impdp命令以生成一个sqlfile,您将需要以具有DATAPUMP_IMP_FULL_DATABASE角色的用户身份运行它。

或者...以低特权用户身份运行它,并使用MASTER_ONLY = YES选项,然后检查主表。例如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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


您需要搜索OWNER_NAME。

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

cat -v将转储文件转换为可见的文本。

grep -o仅显示匹配项,因此我们看不到很长的行

uniq -u删除重复的行,因此您看到的输出更少。

即使在大型转储文件上,此方法也能很好地工作,并且可以针对脚本中的用法进行调整。


我的解决方案(类似于KyleLanser的回答)(在Unix机器上):

1
strings dumpfile.dmp | grep SCHEMA_LIST

推荐阅读

    linux移走文件命令?

    linux移走文件命令?,位置,文件,名称,软件,数据,命令,目录,文件夹,百度,环境,

    linux备份文件命令行?

    linux备份文件命令行?,系统,设备,数据,地址,网络,工具,文件,备份,命令,目录,l

    linux命令检清空文件?

    linux命令检清空文件?,系统,不了,名称,环境,文件夹,命令,文件,目录,指令,终

    linux的文件命令d?

    linux的文件命令d?,地址,情况,信息,工作,工具,命令,代码,文件,目录,控制台,Li

    linux替换文件名命令?

    linux替换文件名命令?,文件,命令,名称,目录,文件名,目标,功能,函数,方面,源

    更新文件命令linux?

    更新文件命令linux?,工作,系统,地址,信息,时间,命令,目录,基础,标准,网络,lin

    linux下读取文件命令?

    linux下读取文件命令?,系统,工作,地址,数字,图片,信息,网络,命令,文件,一致,l

    linux操作数据库命令?

    linux操作数据库命令?,地址,服务,系统,密码,数据库,工具,名字,首页,命令,参

    linux改文件夹名命令?

    linux改文件夹名命令?,名字,软件,命令,文件,系统,目录,目标,文件名,源文件,

    linux建文件命令格式?

    linux建文件命令格式?,系统,名字,名称,时间,密码,命令,文件,文件夹,不了,数

    下载文件的命令linux?

    下载文件的命令linux?,平台,工具,服务,密码,软件,网络,位置,代理,手机,工作,

    linux命令文件传输?

    linux命令文件传输?,系统,数据,命令,文件,基本知识,源文件,目录,目标,功能,

    linux文件统计命令?

    linux文件统计命令?,系统,地址,命令,情况,文件,软件,标准,管理,工作,单位,lin

    linux文件全选命令?

    linux文件全选命令?,电脑,系统,环境,代码,平台,服务,快捷键,文件,命令,权限,l

    linux浏览文件类命令?

    linux浏览文件类命令?,系统,信息,数据,情况,命令,标准,时间,文件,概念,管理,

    linux打包文件夹命令?

    linux打包文件夹命令?,系统,工具,管理,图片,文件,命令,位置,软件,目录,格式,l

    linux中统计文件命令?

    linux中统计文件命令?,系统,信息,数据,情况,工作,文件,时间,档案,标准,名称,L

    linux导入文件夹命令?

    linux导入文件夹命令?,系统,文件,信息,名称,工作,命令,文件夹,目录,发行,位

    linux重名名文件命令?

    linux重名名文件命令?,图片,名称,名字,文件,命令,位置,代码,软件,系统,文件