如果出现了上述问题,事务日志应该有记录出错的那一刻的具体时间吧,我能不能通过相应的算法获取该时间,然后回滚合适的时间从而得到1TB+40GB的时候呢?事务日志肯定会记录这个时间点,不过你得通过第三方工具,去看日志,然后找到你认为是出错操作,所对应的时间点,因为事务日志本身并不知道什么是错误操作,什么是正确的操作。

解决方案 »

  1.   

    另外,如果找到了记录出错的时间点,接下来你要回滚,这个肯定是不行的,因为你已经commit了,就没办法rollback了,最多就是做反向的操作,必须要借助第三方的工具,做回退操作,比如,你执行了delete操作,已经提交了,发现这个出错了,那么通过第三方工具,生成insert语句,来恢复。如果没有第三方的工具,那么就只能按照你上面提到的方法,恢复1TB的数据,然后应用日志,进行基于时间点的恢复了
      

  2.   

    有一点有新认识了,哈哈,那么常听别人说的第三方工具,不是sql自带的吧?没用过,改天试下!以后还得像大神请教数据库复制,发布和分发的技术。哈哈,谢谢
      

  3.   

    有一点有新认识了,哈哈,那么常听别人说的第三方工具,不是sql自带的吧?没用过,改天试下!以后还得像大神请教数据库复制,发布和分发的技术。哈哈,谢谢呵呵,相互学习嘛
      

  4.   

    有某些书上说1T的库还原接近要24小时,不过这个要根据硬件和sql版本而定
      

  5.   

    如果有完整备份+日志备份,可以尝试基于指定时间点的数据库恢复(restore加stopat选项),恢复到误删时间点之前即可.
      

  6.   


    假如我上述数据库做了完全备份和日志备份的话,其实我也有疑问,例如上述该1TB数据库做了完全备份和日志备份后,后面两到三周,数据量增加了40-50GB,假如又过了几天由于误操作,增加的40-50GB的数据没有了,但我并不知道什么时候没有的,如果可以通过事务日志恢复用stopat选项,那么该选项还是得知道什么时候误删的数据?那是不是还得借用第三方工具,查看失误日志,看看误删数据的记录时间,这样才能便于恢复呢?这个是我最大的疑问关于恢复时间的相对精确选取问题
      

  7.   


    说起来日志恢复数据库
    想起来一个问题,
    日志回复的原理是redo,那么回滚的事务日志会不会记录到日志中呢?意思就是
    begin tran
    delete from tableName where id=123;
    rollback;这个操作,实际上没有影响到数据的变化,日志中会不会记录有这么一个操作?另外,假如事务日志中记下来了
    日志恢复是基于redo的,也就是按照日志重新做一遍以前的“操作”,既然这个事务最后回滚了,
    做日志恢复的时候,会不会压根就不理会这个回滚了的日志?
      

  8.   


    说起来日志恢复数据库
    想起来一个问题,
    日志回复的原理是redo,那么回滚的事务日志会不会记录到日志中呢?意思就是
    begin tran
    delete from tableName where id=123;
    rollback;这个操作,实际上没有影响到数据的变化,日志中会不会记录有这么一个操作?另外,假如事务日志中记下来了
    日志恢复是基于redo的,也就是按照日志重新做一遍以前的“操作”,既然这个事务最后回滚了,
    做日志恢复的时候,会不会压根就不理会这个回滚了的日志?
    嗯,应该不会去看这个被回滚的日志,虽然这个回滚的事务产生的日志,也是记录到redo中的。