新人初学Oracle,在导入一个DMP数据的过程中一直报错。
在网上查阅方法都解决不了,然后我自己试了下新建了一个VEHICLE_POSITION表,然后进行导入,还是会报错,但是提示表不存在的报错没了,报错是这样。
权限不足的问题,按照网上查阅的方案也是解决不了,给新建用户该授予的权限也都授予了,然后我试了在Oracle默认用户新建表格VEHICLE_POSITION,然后导入的默认用户中,还是不成功,但是什么错误都不提示了
求助各位大神,指导一下。

解决方案 »

  1.   

    imp Imp c##GF/123456 file=D:\app\GF\oradata\VEHICLE_POSITION_20150612.dmp full=y ignore=y
      

  2.   

    imp Imp c##GF/123456 file=D:\app\GF\oradata\VEHICLE_POSITION_20150612.dmp full=y ignore=y你这只是两个用户之间对象的导出和导入,就别用full了,用fromuser=taxicd touser=c##GF 就够了
      

  3.   

    imp Imp c##GF/123456 file=D:\app\GF\oradata\VEHICLE_POSITION_20150612.dmp full=y ignore=y
    从别处拿到的数据,不知道导出语句,导入语句就是上面这个,嗯多写了一个imp
      

  4.   

    imp Imp c##GF/123456 file=D:\app\GF\oradata\VEHICLE_POSITION_20150612.dmp full=y ignore=y你这只是两个用户之间对象的导出和导入,就别用full了,用fromuser=taxicd touser=c##GF 就够了
    你说的这个也试过,跟用full一样的
      

  5.   

    仔细看了下主题贴,如果不是BUG之类的缘故,有没有这么个可能?这张导入的表上的约束或者说主键包含的唯一索引是属于其他用户,而不是TAXICD用户的?楼主可以通过imp的INDEXFILE选项来生成该表的DDL语句看下,很可能就是这种表与索引属于不同用户的情况,如果是这样的话就比较好处理了:先通过INDEXFILE选项得到的DDL语句创建表,如果表数据量比较小的话,可以把主键也先建上,然后再通过ignore=y或者data_only=y参数来完成数据的导入,如果表数据量比较大,那么可以先导入数据,导入完成之后再加主键。
      

  6.   

    是用imp c##GF/123456 file=D:\app\GF\oradata\VEHICLE_POSITION.dmp indexfile=D:\app\GF\oradata\VEHICLE_POSITION.idx full=y这个语句吗,我用这个也报错了
      

  7.   

    是用imp c##GF/123456 file=D:\app\GF\oradata\VEHICLE_POSITION.dmp indexfile=D:\app\GF\oradata\VEHICLE_POSITION.idx full=y这个语句吗,我用这个也报错了如果这样的话,如果想要判断清楚具体问题就比较麻烦了,如果是生产数据库的话以下操作要慎重:1、打开全库一级的1031错误跟踪:
    alter system set events '1031 trace name errorstack forever, level 3';
    2、imp导入,报错,找到imp会话对应的trc文件,通常是最新的跟踪文件,如果是11g,跟踪文件的目录在user_dump_dest实例参数指定的目录下,按照文件时间戳倒序找吧
    3、找到跟踪文件后,可以看到更多关于ORA-1031错误的信息,可以做进一步的诊断。如果是生产库,觉得这么做有隐患,或者觉得以上过程太麻烦了,那么建议联系数据源的数据库管理员,去看看这张表上的约束有何特别之处,除了是不是属于其他用户之外,还应该考虑是否会有外键引用其他用户的对象,而这个用户,在目标库中是不存在的。另外,实际上imp已经到了启用约束这一步,表里的数据应该是导入的,如果只要数据的话,到这一步就已经OK了,如果你每次使用ignore=y来导入数据,这张表里的数据可能已经有重复的了。
      

  8.   

    补充下,忘了提醒了,如果打开了1031的errorstack,那么跟踪完毕后记得将其关闭:
    alter system set events '1031 trace name errorstack off';
      

  9.   

    谢谢你的建议,1031的问题已经解决了,那个942的问题一直没解决。看你的第一张贴图,看上去像是数据导入已经全部完成了的,只是在添加约束的时候报错了,所以照理说,如果这张VEHICLE_POSITION应该是已经导入了的,除非dmp文件中确实不包含这张表,如果不是这种情况,那就比较奇葩了,除了打开942错误的errorstack来诊断外,也没什么好办法了。
      

  10.   

    如果你先把表VEHICLE_POSITION建了,然后再导入只会报错ORA-1031,那么还可以尝试先把表建了,然后再用indexfile参数来生成DDL语句,看看能不能找到点线索,是不是没有VEHICLE_POSITION这张表的定义。
      

  11.   

    照你说的在用户下新建表格VEHICLE_POSITON后,用indexfile,还是不成功,生成的文件只有这两行
      

  12.   

    照你说的在用户下新建表格VEHICLE_POSITON后,用indexfile,还是不成功,生成的文件只有这两行看这贴图,怎么像是分区表定义的存储部分,但又不全,难不成是dmp文件损坏了,有长表没能建起来?所以最后才会找不到表来建上约束。
      

  13.   

    照你说的在用户下新建表格VEHICLE_POSITON后,用indexfile,还是不成功,生成的文件只有这两行看这贴图,怎么像是分区表定义的存储部分,但又不全,难不成是dmp文件损坏了,有长表没能建起来?所以最后才会找不到表来建上约束。
    正常情况就是那个数据里面有个表VEHICLE_POSITION,然后前面就把这个表格写入了,然后再执行约束条件,但是我现在就是这个表格实际上是没导入进去的,所以说执行约束条件失败,找不到表格。
    如果我自己新建一个表格VEHICLE_POSITION,执行约束条件这步就能找到表格了,但是因为没写入数据,所以最后结束啥数据也没有。
    大神,问题的原因是我这样理解的么
      

  14.   

    照你说的在用户下新建表格VEHICLE_POSITON后,用indexfile,还是不成功,生成的文件只有这两行看这贴图,怎么像是分区表定义的存储部分,但又不全,难不成是dmp文件损坏了,有长表没能建起来?所以最后才会找不到表来建上约束。
    正常情况就是那个数据里面有个表VEHICLE_POSITION,然后前面就把这个表格写入了,然后再执行约束条件,但是我现在就是这个表格实际上是没导入进去的,所以说执行约束条件失败,找不到表格。
    如果我自己新建一个表格VEHICLE_POSITION,执行约束条件这步就能找到表格了,但是因为没写入数据,所以最后结束啥数据也没有。
    大神,问题的原因是我这样理解的么
    对,如果说dmp文件损坏,或者本身文件中没有VEHICLE_POSITION这张表,那么这一切都可以得到解释了,就如你所言。