所以,我需要检查.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
但要做到这一点,我需要源模式。
答案 0 :(得分:76)
SQLFILE
parameter, impdp
会将dmp
备份的DDL导出到文件中。例如,将其放入文本文件
impdp '/ as sysdba' dumpfile=<your .dmp file> logfile=import_log.txt sqlfile=ddl_dump.txt
然后在ddl_dump.txt
中查看备份中的表空间,用户和模式。
根据文档,这实际上并没有修改数据库:
实际上没有执行SQL,目标系统保持不变。
答案 1 :(得分:12)
如果使用可以处理大文件的编辑器打开DMP文件,则可以找到提及架构名称的区域。请务必不要改变任何东西。如果你打开原始转储的副本会更好。
答案 2 :(得分: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版本以及导出会话设置(语言,日期格式) )。
所以,问题解决了:)
答案 3 :(得分:6)
假设您没有首先生成该文件的expdp作业的日志文件,最简单的选择可能是使用SQLFILE parameter让impdp生成DDL文件(基于完全导入)。然后,您可以从该文件中获取模式名称。当然不理想,因为impdp必须读取整个转储文件以提取DDL,然后再次访问您感兴趣的模式,并且您必须执行一些文本文件搜索各种CREATE USER语句,但它应该是可行的。
答案 4 :(得分: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
/
答案 5 :(得分:4)
第1步:这是一个简单的例子。您必须使用SQLFILE
选项从转储文件创建SQL文件。
步骤2:在生成的SQL文件(此处为tables.sql)中为CREATE USER
创建Grep
此处示例:
$ 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生产
版权所有(c)1982,2011,Oracle和/或其附属公司。保留所有权利。
用户名:/ as sysdba
处理对象类型SCHEMA_EXPORT / PRE_SCHEMA / PROCACT_SCHEMA作业“SYS”。“SYS_SQL_FILE_FULL_01”已于08:29:12成功完成
$ grep "CREATE USER" tables.sql
创建用户“USER1”由VALUES's识别:270D559F9B97C05EA50F78507CD6EAC6AD63969E5E; BBE7786A5F9103'
此处解释了许多数据泵选项http://www.acehints.com/p/site-map.html
答案 6 :(得分:2)
我的解决方案(类似于KyleLanser的回答)(在Unix机器上):
strings dumpfile.dmp | grep SCHEMA_LIST
答案 7 :(得分:2)
您需要搜索OWNER_NAME。
cat -v dumpfile.dmp | grep -o '<OWNER_NAME>.*</OWNER_NAME>' | uniq -u
cat -v将dumpfile转换为可见文本。
grep -o只显示匹配,所以我们看不到很长的行
uniq -u删除重复的行,因此您可以看到较少的输出。
即使在大型转储文件上也能很好地工作,并且可以在脚本中进行调整以便使用。