oracle 中有一张表orderhist(订单表),包含一个字段status(订单状态,如:订购,发货,出库,取消。。) ,3月17号那天把17号之前所有的订单状态都改成了出库,其他的字段都没动,后来头说又要还原,我的思路是把17号的数据库备份里的订单状态替换目前表中的17号之前的,数据库每天都自动备份,并且每天都有新的数据被录入进来,不知道怎么弄?怎么操作 麻烦说详细点?

解决方案 »

  1.   

    二楼说的对,找日志吧,根据日志来恢复比较现实,用17号以前的并不能保证100%的恢复到过去的状态。http://www.sosdb.com
      

  2.   

    如果每天都有dmp的备份文件,可以建一个专门导这个表数据
    imp ???/??? fromuser= touser= file= tables=
    然后在执行相关更新操作!
      

  3.   


    归档日志一般存放在那里?
    我的是oracle8
      

  4.   

    提供一种方法仅供参考:如果是Oracle10g或Oracle9i,可以用闪回查询得到3月17日时表的状态,但是要求undo_retention足够大,楼主可以试试,如果可以的话就简单了.SELECT * FROM orderhist
      AS OF TIMESTAMP TO_TIMESTAMP('03-17','MM-DD');
      

  5.   

    LZ的备份是怎么备的?用的expimp还是RMAN。
      

  6.   

    exp userid=system manager@iagent file=e:\Backup\expdata_iagent_%date:~0,10%.dmp owner=iagent indexes=y grants=y rows=y constraints=y log=e:\Backup\expdat_%date:~0,10%.log direct=y
      

  7.   

    你表中的数据每天都在变,那么现在先ctas把从17号起的全部数据暂存到一张临时表中,
    清空表后,再用16号的备份恢复该表,
    然后再insert into t select * from 刚才的临时表。
      

  8.   

    分析你们的数据,首先确定17号之前的数据在17之后是不会变动的。如果这样,相对简单;如果是会变动的,你们头脑子进水了,给他几个耳光后步骤如下:
    1.在另外一个库,或者另外一个空间,恢复17号修改时间点上的数据
    2.通过logminer找出17号更新过后截止到现在,发生变化的数据的ROW_ID,将这些ROWID记录下来
    3.从1步骤中数据剔除2步骤中的数据,将剩余数据的对应状态更新回去