测试了一下上面的11G 到10G里面的方式,可以正确导入有两个问题:
(1)在导入的时候,IMPDP 里面可以不用加version=xxxx这个参数,只在11g的EXPDP里面添加此参数就可以了
impdp userid=system/manager directory=db_bak dumpfile=11g_for_10g logfile=impdp_11g_to_10g schemas=zhtjgct
(2)schemas所指定导入的用户,在导入执行之前,事先不用建立好,当然如果你设定了自己的表空间,需要首先建立相关的表空间。测试了下,导入之后使用的默认表空间、临时表空间都和源库里面的一致。如果没有该用户,impdp 会自动建立该用户,如果已经有该用户,impdp 会将DMP文件里面的表添加到该用户里。
(3)如何实现IMP 里面的 fromuser=a1 touser=TEST1 两者不同的情况呢,即从一个用户要导入到另外一个用户里。
Expdp userid=system/manager schemas=a1 directory=db_bak dumpfile=expdp_a1 logfile=expdp_a1.log
在用impdp导入数据时:
impdp userid=system/manager schemas=test1 directory=db_bak dumpfile=expdp_test1 logfile=expdp_test1.log
直接在schemas里面设置和expdp 里面的schemas不同的用户,会出现:
ORA-39002: invalid operation
ORA-39165: Schema TEST1 was not found.
不相信这种功能会无法实现,否则如何替代以前的exp imp呢?查找其帮助信息,看到了remap_schema这个参数,看来可以实现我们所需的功能,其作用类似于老的imp工具中的fromuser和touser参数,impdp中将fromuser和touser参数合并成了remap_schema参数
查阅了网上的帖子,通过如下的格式指定:impdp … remap_schema=old_schema_name:new_schema_name
impdp userid=system/manager directory=db_bak dumpfile=expdp_test1 logfile=expdp_test1.log remap_schema=a1:test1
test1用户也同样不必事先存在。只要导入时连接的用户有足够的权限,就会使用DUMP文件中的CREATE USER的metadata来创建一个对应的用户的。当然你导入时候userid 要有相应的权限,这里我用的是system 当然没事。
REMAP_SCHEMA官方文档解释
多个REMAP_SCHEMA 行都可以被指定,但是每个源schema 必须不同. 然而,不同的源schemas可以映射到同一个目标schema中. 映射也可以不必100%的完成,因为有些特定 schema 引用, Import不能全能找到. 例如, Import 不能找到那些嵌入到types, views, procedures, and packages体内的schema 引用。
如果你正映射的schema不存在, import操作会创建它, 如果导出文件包含源schema必要的CREATE USER 源数据,并且你具有足够的权限导入的话.
需要好好看下官方手册!还要自己动手做实验!
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7177735/viewspace-710753/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/7177735/viewspace-710753/