2

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

 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

添加 schemas 选项将无济于事(结果相同,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”),但可能存在另一种方法吗?

4

1 回答 1

7

首先,从技术上讲,您没有正确使用 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

于 2011-06-23T12:14:22.747 回答