【问题标题】:Oracle: importing data pump dump without knowledge dump file contentOracle:导入数据pump dump,没有知识dump文件内容
【发布时间】:2011-04-12 06:30:55
【问题描述】:

导出/导入整个架构的旧方法:

 exp user/pwdp@server FILE=export.dmp OWNER=user ROWS=Y
 imp newuser/pwd@server FULL=Y FILE=export.dmp

新方法:

 expdp user/pwdp@server DUMPFILE=export.dp DIRECTORY=exportfolder 

但是导入有问题:

 impdp newuser/pwdp@server DUMPFILE=export.dp DIRECTORY=exportfolder

不会导入任何东西:

Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
ORA-31655: no data or metadata objects selected for job
ORA-39154: Objects from foreign schemas have been removed from import
Master table "NEWUSER"."SYS_IMPORT_FULL_01" successfully loaded/unloaded
Starting "NEWUSER"."SYS_IMPORT_FULL_01":  newuser/********@server
DUMPFILE=export.dp DIRECTORY=exportfolder
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Job "NEWUSER"."SYS_IMPORT_FULL_01" successfully completed at 19:13:04

添加模式选项将无济于事(结果相同,oracle 不允许导入非拥有对象):

impdp newuser/pwdp@server DUMPFILE=export.dp DIRECTORY=exportfolder schemas=user

我发现只有一种可行的方法:

impdp newuser/pwdp@server DUMPFILE=export.dp DIRECTORY=exportfolder remap_schema=newuser:user

那么问题是如何在不知道导出哪个模式的情况下导入模式数据泵转储?

(当然我可以查看导出文件的前 512 个字节并找到类似“USER”的字符串。“SYS_EXPORT_SCHEMA_01”),但可能存在另一种方法?

【问题讨论】:

    标签: import oracle10g impdp


    【解决方案1】:

    首先,从技术上讲,您没有正确使用 full=y:

    imp newuser/pwd@server FULL=Y FILE=export.dmp
    

    你应该这样做:

    imp newuser/pwd@server touser=newuser fromuser=user FILE=export.dmp
    

    类似于 impdp remap_schema 命令。

    但是,我确实了解您正在尝试将架构从一个用户导入到另一个用户,而无需事先知道源用户。我不得不提到这一点,因为如果您不知道源用户,那么很容易假设您不知道数据文件的内容;如果您不知道数据文件的内容,您可能会通过发出 full=y 来导入比您认为应该导入的更多的用户和数据。

    要点:full=y 导入意味着导入每个用户及其相关内容;无论您使用什么用户登录数据库并开始导入。

    说了我的免责声明,impdp 在完全导入方面具有完全相同的功能 - 只需使用 full=y

    impdp newuser/pwdp@server DUMPFILE=export.dp DIRECTORY=exportfolder full=y
    

    更新

    this will works in newuser have privilege: IMP_FULL_DATABASE
    
    execution `grant IMP_FULL_DATABASE to newuser` solved it.
    

    参考资料: http://download.oracle.com/docs/cd/B19306_01/server.102/b14215/dp_import.htm#sthref301

    【讨论】:

    • 感谢您的建议,但是 full=y 无论如何也无济于事,错误将是相同的:ORA-39154:来自外部模式的对象已从导入中删除,因此实际上导入已完成 :)。但它没有意义,因为它不从转储中加载任何对象,因为它的架构不同。
    • @Michael Pakhanstov - 没错,full=y 将告诉导入将数据导入到数据库中,以供导入中的用户使用。如果 new_user 在导入中没有数据,在您的示例中没有,那么您将看不到 new_user 中的任何数据或对象;这就是 remap_schema 发挥作用的地方。 ORA-39154 表明您没有权限导入其他用户数据 - 这是您对 imp 和 impdp 使用 full=y 所做的事情。
    猜你喜欢
    • 1970-01-01
    • 2014-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-27
    • 2015-12-19
    • 2011-04-26
    • 2010-12-24
    相关资源
    最近更新 更多