什么都不说了,先贴代码create directory my_dump as 'd:\temp';   --创建逻辑目录,对应d:\temp
grant read,write on directory my_dump to scott;expdp scott/tiger directory=my_dump dumpfile=first.dmp logfile=first.log tables=table1,table2,table3--备份表impdp scott/tiger directory=my_dump dumpfile=first.dmp logfile=first.log tables=table1,table2,table3--还原表
做试验,备份3个表,如果表没有drop的话,还原出错,错误提示对应的表已经存在。查了expdp的相关参数,也没有说覆盖表的。难道如果只是表的数据发生变化,这个表就不能还原?不用expdp和impdp,用plsql developer工具中的export和import备份和还原,更离谱了。给每个表插入3条记录,备份,drop3个表,还原,结果table1有0条记录,table2和table3分别是27和135条记录。晕了。小弟初学oracle,就败在最基础的备份还原上,希望前辈多多帮忙!!!!

解决方案 »

  1.   

    1)可以使用一个参数来对已经存在的表进行如何操作:
    TABLE_EXISTS_ACTION   导入对象已存在时执行的操作。
     有效关键字: 
    (SKIP)        默认
    APPEND   追加
    REPLACE   替换
    TRUNCATE切断再增加所以你可以使用加入参数进行强行导入
    impdp scott/tiger directory=my_dump dumpfile=first.dmp logfile=first.log tables=table1,table2,table3 TABLE_EXISTS_ACTION=TRUNCATE2)你在插入记录后有没有提交?
    查看导出时的提示导出多少记录!3)备份的知识很多,还是先从exp,imp,expdp,impdp等逻辑备份开始吧。
    另外,要学会查看帮助!!相关命令加上 -help就会显示帮助信息
    如:
    c:\>expdp -help
      

  2.   


    expdp 有参数:
    table_exists_action=replace;参考:
    Oracle expdp/impdp 使用示例
    http://blog.csdn.net/tianlesoftware/archive/2011/03/18/6260138.aspx
      

  3.   


    非常感谢,加入TABLE_EXISTS_ACTION=TRUNCATE后确实可以覆盖原来的表了,只是好像要断开连接后才能操作;还有第二条正如你说的,清空表之后,没有commit;
    心情非常好,非常感谢!!!
      

  4.   


    还一点忘记问了,expdp -help,我电脑上没有显示TABLE_EXISTS_ACTION这个参数。难道是我oracle没装好?
      

  5.   

    TABLE_EXISTS_ACTION是impdp的参数
    impdp -help