1. truncate  table
   imp ....
2. restore backup of database(备份)
   recover database until cancel(time '..')(日志)

解决方案 »

  1.   

    1.ingnore参数是忽略倒入时的对象创建错误,所以,如果你设置ignore=n则在表存在时会抱错,imp引擎就不会继续执行了。而当你设置ignore=y时它只是忽略了对象的创建错误,对数据的错误是不忽略的,而且他不会对原有的数据进行修改。你如果想保证导入的数据就是你备份的数据,建议你先删除相应的对象(在只导入一个或几个表时)或者删除整个用户后重新创建用户(在导入整个用户时)。2.可以,exp/imp可以在windows程序中用shell命令进行调用。3.是这样的,oracle通过emca来配置一个文档资料库之后才可以使用oem,但这时每个被管理的服务器上的OracleAgent服务
      

  2.   

    qyflaoda(不再埋葬真实的自己),cenlmmx(学海无涯苦作舟), zealot_zk(风中追风) 很谢谢你们.
    还想在问一下:
    1.我能不能在程序中通过shell命令调用exp/imp实现备份/恢复功能,如果能的话,在用imp恢复的时候,因为要先truncate 所有的table,会不会出现意外,结果不但恢复不了数据,反到还把原来的数据给删掉了?这种方法在现实中可行不.
    2.restore backup of database(备份),这个备份,是什么备份?*.dmp的可以吗?
    3.能不能给我一点关于在程序中实现备份/恢复的思路和意见(oracle 9.i)
    不好意思,好多问题都是基本的,只不过,刚学,项目时间又紧,现在是边看书边问,麻烦大家了.谢谢.
      

  3.   

    1.首先你不能在shell中调用truncate命令,所以这样的恢复一定是存在缺陷的,就是在调用imp的shell时服务器宕机,这种错误在程序中是无法避免的。但是这种错误发生的概率又很小,所以在你操作的系统是非核心系统时是完全可以接受的。但如果是核心系统,那就要好好考虑一下了。2.restore backup 一般使用在使用rman的备份或者使用在数据库冷备时的,这些命令主要由DBA完成,不建议你在程序中调用。3.如果是在程序中完成,我觉得有以下三种方法:
    a)在程序中调用exp/imp
    b)购买第三方的备份软件,如VERYTAS、Tivoli等都有自己的编程接口
    c)可以把oracle的rman的备份恢复配置写成一个可以执行的脚本,在程序中调用这个脚本也可以。
      

  4.   

    zealot_zk(风中追风) ,谢谢你的建议,今天看了下rman,发现既可一针对介质错误对数据库实现完全恢复,也可以针对用户操作错误进行不完全恢复,很合适我的要求,
    但还有个问题,可能是我没理解好的缘故,就是:用RMAN进行恢复时,在对数据进行转储备(restore)时,无需DBA指定备份文件,它会自动选择最新的备份文件进行恢复,要是我想选择其他的较老的备份文件进行恢复,难道不可以吗?
    楼上的,也谢谢你.
      

  5.   

    可以,选定备份的tag(在你的备份格式中指定)
      

  6.   

    cenlmmx(学海无涯苦作舟) ,谢谢..你今天升星了,恭喜一下先.
    多谢各位的耐心指教,以后我肯定还回有很多问题,还请大家帮助,这个主题等下揭贴,只是分少了点,不好意思,实在是可用分从来就没超过100.