昨天下午分享了一篇delete误删数据后,使用闪回查询恢复数据的技术,今天将继续分享闪回数据库,闪回表数据和闪回drop
备注(1):闪回技术是Oracle备份恢复的一部分,在于解决数据库发生逻辑错误时,能够快速的恢复数据。闪回技术的实现,依赖于Oracle强大体系中的redo 日志和undo 日志
备注(2):对于物理损坏时(比如硬盘故障),就需要借助Oracle的备份恢复工具了(例如exp/imp,expdp/impdp,rman等)
闪回支持以下恢复:

(1)
闪回数据库:
SQL> select flashback_on from v$database;FLASHBACK_ON------------------NO在oracle11g中打开闪回数据库可以在open状态打开
下面这是oracle10g时的操作:SQL> SHUTDOWN IMMEDIATE;SQL> STARTUP MOUNT;SQL>ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=5G;SQL>alter system set db_recovery_file_dest='/flash';SQL> ALTER SYSTEM SET DB_FLASHBACK_RETENTION_TARGET=2880 SCOPE=BOTH; --默认是1440 一天SQL> ALTER DATABASE FLASHBACK ON;SQL> ALTER DATABASE OPEN;
至此,闪回数据库已经配置完成
闪回数据库的使用
SQL> shutdown immediate;SQL> startup mount;SQL> flashback database to timestamp sysdate-60/1440;SQL> alter database open resetlogs;
(2)闪回表数据
SQL> create table sal1 as select * from sal;表已创建。SQL>SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;TO_CHAR(SYSDATE,'YY-------------------2021-11-04 15:47:02SQL>SQL>SQL> delete sal1;已删除19行。SQL>SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;TO_CHAR(SYSDATE,'YY-------------------2021-11-04 15:47:29SQL> flashback table sal1 to timestamp to_timestamp('2021-11-04 15:47:00','yyyy-mm-dd hh24:mi:ss');flashback table sal1 to timestamp to_timestamp('2021-11-04 15:47:00','yyyy-mm-ddhh24:mi:ss')*第 1 行出现错误:ORA-08189: 因为未启用行移动功能, 不能闪回表SQL> alter table sal1 enable row movement;表已更改。SQL>SQL> flashback table sal1 to timestamp to_timestamp('2021-11-04 15:47:00','yyyy-mm-dd hh24:mi:ss');闪回完成。SQL>SQL> select count(*) from sal1;COUNT(*)----------19SQL>SQL>
(3)闪回drop
创建测试表SQL> create table test1 as select * from crm.sal;表已创建。SQL>SQL> select count(*) from test1;COUNT(*)----------19SQL>模拟drop表SQL> drop table test1;表已删除。SQL>SQL> show recyclebinORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME---------------- ------------------------------ ------------ -------------------TEST1 BIN$vpXHkffmRPuIjKUu/7kd9A==$0 TABLE 2021-11-04:15:14:58SQL>flashback table "BIN$vpXHkffmRPuIjKUu/7kd9A==$0" to before drop;闪回完成。SQL>闪回表之后,再次查询test1表,表存在并且数据无丢失SQL> select count(*) from test1;COUNT(*)----------19SQL>
至此,闪回数据库,闪回表数据,闪回drop就已经分享完成了。在实际的生产数据库系统中,闪回数据库通常适用于数据库升级和压力测试,针对的整个数据库系统的闪回还原,影响的是整个数据库系统。
闪回表数据和闪回drop,针对的是表操作,不影响系统中其它的业务表。闪回技术依赖于数据库体系中强大的undo和redo,我们在测试环境中,数据量小,没有别的其它操作,可以通过闪回技术来恢复数据。当在一个成熟的数据库系统中,dml和ddl语句是很频繁的,当undo被复写时,闪回就不能帮助恢复数据。当闪回过期不能使用时,做好数据库备份,成为了日常管理运维的重要任务,后面会分享Oracle数据库备份的工具和方法。
文章转载自数据管理员,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




