java如何通过系统日志复原数据?
比如我用logger记录a用户在b时间删除了c表的一条记录,sql是xxx,参数是222,
我现在确定是误操作,我如何复原该数据?
不是所有的业务都可以恢复的。比如说付出去的钱,你绝对不能直接在表里面把金额返回来。那样账就不平了。
在真实的业务中,如果业务本身没有问题,只是数据库表的同步,你可以执行反向操作,而且这个过程是必须脱机的,否则会造成很大的问题。
如果是业务的撤销,那么一般的做法是做一笔相反的操作来对冲,而不是“恢复”数据。
比如扣款扣错了,不是把扣款的记录删除,而是再做一笔退款。
重新insert不行吗、、、
创建一个数据库test 对数据库进行备份
建议你从两方面入手
1.考虑数据库本身是否能够恢复,我记得oracle是有闪回功能,可以查询某一时间点的数据,相信其他数据库也有类似功能吧
2.从系统日志中尽量找出删除数据的规律方便找到删除的sql,如果找到数据规律了数据还是很好恢复恢复回来的,UE的查找功能还是很强大的
同意caozhy用户所说的,并不是所有的业务都能够恢复,建议做一个异常处理机制,
1、当确定出现问题时,通过时间点和业务类型定位到日志的位置;
2、找到出现问题业务的sql;
3、确定该业务是否能够恢复
4、如果可以恢复请记录一下这个恢复的操作日志进行反向操作(对冲)
5、如果仅仅通过数据无法恢复则可以提示用户
数据库的数据删除后,正常手段是不能恢复的,必须使用专业的恢复技术,,简单的网上可以查到,前段时间我公司有人清空的了一张表的客户编号,用的是SQLServer2008,在网上找到的资料恢复出来的
创建一个数据库test 对数据库进行备份
三楼正解,比如MySQL数据库可以借助flashback工具实现闪回功能,需要跑安装工具的
像一般的情况下,在对数据进行修改或者删除这些不可逆转的操作时,尽可能的将修改的数据进行日志打印,若出现误操作,可以通过读取日志进行恢复,你可以专门针对你的日志的规律进行编写工具,然后将误操作的数据进行恢复。
得看你怎么设计数据库表,如果你想通过日志能恢复,那就不要做物理删除。