-
我有一个用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
并且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
但要做到这一点,我需要源模式 .
8 回答
如果使用可以处理大文件的编辑器打开DMP文件,则可以找到提及架构名称的区域 . 请务必不要改变任何事情 . 如果您打开原始转储的副本会更好 .
impdp
如果使用SQLFILE parameter,则将dmp
备份的DDL导出到文件 . 例如,将其放入文本文件中然后在
ddl_dump.txt
中检查备份中的表空间,用户和模式 .根据文档,这实际上并没有修改数据库:
更新(2008-09-19 10:05) - 解决方案:
My Solution: 社会工程学,我努力挖掘并找到了解模式名称的人 .
Technical Solution: 正在搜索.dmp文件 did 会生成架构名称 .
一旦我知道模式名称,我搜索了转储文件并了解了在哪里找到它 .
在.dmp文件中看到了模式名称的位置:
<OWNER_NAME>SOURCE_SCHEMA</OWNER_NAME> 这是在每个表名/定义之前看到的 .
SCHEMA_LIST 'SOURCE_SCHEMA' 这是在.dmp末尾附近看到的 .
有趣的是,围绕
SCHEMA_LIST 'SOURCE_SCHEMA'
部分,它还有用于创建转储的命令行,使用的目录,使用的par文件,运行的Windows版本以及导出会话设置(语言,日期格式) .所以,问题解决了:)
假设您没有首先生成该文件的expdp作业的日志文件,最简单的选择可能是使用SQLFILE parameter让impdp生成DDL文件(基于完全导入) . 然后,您可以从该文件中获取模式名称 . 当然不理想,因为impdp必须读取整个转储文件以提取DDL,然后再次获取您感兴趣的模式,并且您必须执行一些文本文件搜索各种CREATE USER语句,但它应该是可行的 .
运行impdp命令以生成sqlfile,您需要以具有DATAPUMP_IMP_FULL_DATABASE角色的用户身份运行它 .
或者......以低权限用户身份运行它并使用MASTER_ONLY = YES选项,然后检查主表 . 例如
http://download.oracle.com/otndocs/products/database/enterprise_edition/utilities/pdf/oow2011_dp_mastering.pdf
第1步:这是一个简单的例子 . 您必须使用
SQLFILE
选项从转储文件创建SQL文件 .第2步:在生成的SQL文件中grep for
CREATE USER
(此处为tables.sql)这里的例子:
这里解释了很多数据泵选项http://www.acehints.com/p/site-map.html
我的解决方案(类似于KyleLanser的答案)(在Unix机器上):
您需要搜索OWNER_NAME .
cat -v将dumpfile转换为可见文本 .
grep -o只显示匹配,所以我们看不到很长的行
uniq -u删除重复的行,因此您可以看到较少的输出 .
即使在大型转储文件上也可以很好地工作,并且可以在脚本中进行调整以便使用 .