网上查了查,导致这个问题的情况大致有一下几个情况,
1,在原来测试库中,目标schema和别的用户相互授权了,可是你导出的dmp中没有包含所有的用户,导入时对应用户没有创建。
2,再就是,表空间问题,测试库中的用户下的某个表的索引没有在他的默认表空间里,这样你要在目标端(这里就是生产环境),创建好对应的表空间,
就是说如果你在测试库把a用户的下的某个表的权限授给了b,那么你在把a用户用数据泵倒进生产库时,他会在生产库中检测有没有用户b。也要做相同的操作。
仔细一想还真是这样的情况。
解决办法:
使用impdp工具完成数据导入时,会按照dump文件中有关的存储的参数信息完成数据的导入。很多情况下我们希望按照被导入用户的默认参数完成数据的导入,
此时我们可以使用impdp的transform参数辅助完成
impdp system/oracle directory=mydump dumpfile=newllmj.dmp remap_tablespace=llmj_db:gold_mj_tab remap_schema=newllmj:gold_mj schemas=newllmj table_exists_action=replace transform=segment_attributes:n
remap_tablespace=llmj_db:gold_mj_tab 原来表空间:新的表空间
remap_schema=newllmj:gold_mj 原来的schema:现在的schema
transform=segment_attributes:n 去掉表空间和存储子句,加上这个参数后,remap_tablesapce参数就会失效,就会倒进用户默认的表空间,
导入语句改成上面的,然后执行就成功了,没有报错。