导出/导入整个架构的旧方法:
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”),但可能存在另一种方法吗?
答案 0 :(得分: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来导入比您认为应该更多的用户和数据。
点:完整= 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