我本地安装的oracle版本和服务器上安装的版本都是一样的,但我将服务器上某个用户的数据导出为 dmp , 然后在本地 imp , 结果发现少了很多的表,我把导出的 dmp 文件 ,再直接导成SQL 脚本,脚本里也没有这些少了的表。这是怎么回事呢?我用的oracle 版本为  11.2.0.1.0

解决方案 »

  1.   

    你看看是不是你本地缺少一些表空间啊
    还有 imp的时候有没有报异常或警告?
      

  2.   


    具体的报错信息 以及你的imp写法  加上ignore=y
      

  3.   

    写上你的imp和exp的语句,同时在imp和exp的时候 都增加日志记录吧,那样能看到到底有报什么错误。
      

  4.   

    如果表为空表并且没有插入过数据,在oracle11g中不会占据空间同时也不会导出。可以采用修改参数的方法或者对空表进行DML操作后可以导出
      

  5.   

    你导入的时候指定log=log.txt,如果导入失败就查看下这个日志文件的具体的报错信息就可以了。。
      

  6.   


    在6楼的提醒下,经过观察和上网查询,确实如6楼所说,在oracle11g中如果表为空,是不会导出到dmp文件中: 我这这样解决的
    1. 利用PL/SQL Developer 中的 Reports > Objects > Tables 分析工具,可以通过 Num Rows 查看到记录为 0 的表
    2. 在 PowerDesigner 中建立逆向工程,选中刚才的表,执行测试数据的插入,然后再执行删除旧记录的操作,就使数据库完成了给表分配数据段的工作,就可以正常导出了。   提示: 第一步分析表的功能,建议在服务不忙时再做,因为我们在执行完这个命令后,应用突然连接不上数据库了,后来查询得知,引用如下内容
    “对表和索引的分析也需要占用系统资源,可能会影响到其他事务的运行。”
    “一些数据量小的数据表(数据字典表)就没有必要进行分析,对于一些数据量频繁变化的数据表倒是有必要经常进行分析,避免对执行计划的影响。”
    重起服务后,就可以了
     
       执行如下命令 alter system set deferred_segment_creation=false;  执行后,新建的表,即使数据为空,也会被导出了(旧表不起作用)
    再此感谢大家,谢谢!