经常能在网上看到大家调侃如何“从删库到跑路”。实际上,如果真的发现自己误删库或者误删数据,估计大家应该都是胆战心惊、心惊肉跳了。此刻的心情,肯定比第一次怦然心动要紧张得多。而我们在日常运维中,也经常能接到应用同事反馈生产数据被误删,需要紧急恢复。下面这篇文章详述了Oracle数据库几种误操作数据的场景及恢复过程。
错误update或delete数据
新建表t1并插入数据
为了便于判断恢复时间,先查下此时的数据库时间
模拟误update表t1
使用闪回恢复表t1。注意:为避免闪回时间不准确造成对表的二次误操作,一般情况下DBA只会新建一张闪回表,而不会直接覆盖表数据。数据由应用管理员根据闪回表自行恢复。
此案例也可用作恢复package/procedure/trigger。
这种恢复方式是从undo中恢复,如果数据库繁忙或者需恢复的时间太早,flashback会报错ORA-01555: snapshot too old。这种恢复方式就不适用了,需要用RMAN来恢复。
错误drop table
接着上一个案例,如果用户误drop t1,该如何恢复?
错误truncate table
恢复完成后,t1表0行,t3表77行,说明truncate t1后的业务数据并未覆盖,恢复正常完成。然后使用imp导入t1表数据即可。
总结上述几种恢复过程,以下几点需要注意:
出现误操作时,越早发现问题越好。
数据库recyclebin及flashback_on参数都开启,只是flashback_on为yes时,比较占用闪回空间。
重要事情说三遍:做好生产环境备份!做好生产环境备份!做好生产环境备份!
-END-
领取专属 10元无门槛券
私享最新 技术干货