使用java:现象:
        
        StringBuffer exp = new StringBuffer("imp ");
exp.append(userName);
exp.append("/");
exp.append(passWord);
exp.append("@");
exp.append(dataBaseName);
exp.append(" file=d:\\DBackUP.dmp full=y ignore=y");        ....
 
Process p=Runtime.getRuntime().exec(exp.toString());
       如果数据事先手动删除所有表,那么恢复是成功的。但是如果不删除Tables下面的表,那么
数据库恢复失败(还是原来的数据库数据)。其实我不想要原来的数据,要使用D:\\DBackUP.dmp
里的数据。那么怎么解决这个问题呢?
1.imp 命令里有覆盖原来数据的参数么?
2.怎么不手动删除,而用java代码在imp之前删除所有表?

解决方案 »

  1.   

    1.你所说的覆盖原来数据,指的是覆盖原来已存在的表里的数据,而不是在以前数据的基础上追加dmp文件里的数据,对吧?
    这个应该是没有这样的参数的,IMP使用的时候,就是“在原表基础上累加数据”,而不是覆盖原有的数据。2.你要删除所有表还是所有表的现有数据啊?
      

  2.   

    1.是的。
    2.要删除所有的表,这样再使用imp方法就可以成功了
      

  3.   

    用EXPDP导出然后用IMPDP导入,导入的时候加上TABLE_EXISTS_ACTION=REPLACE 选项即可
      

  4.   


    oracle10以上是个好主意。如果真的想删,那就select 'drop table '||table_name||' ;' from user_tables ; 把结果执行一遍