ORACLE数据库备份入门:第二部分:5-闪回技术(FLASHBACK)

闪回,就是将数据库的数据内容返回到一个指定时间点。例如,管理员发现错误的修改了数据,因此希望返回到误操作之前的时间点。我们可以使用前一天的备份数据,通过归档日志的时间点恢复来达到目的,但是这个过程时间较长。还可以使用闪回,通常这样的操作耗时在分钟级。闪回功能默认是关闭的,手工激活,

SQL> alter database flashback on;  --打开
SQL> alter database flashback off;  --关闭

功能打开后,自动在FAST_RECOVERY_AREA变量指定的路径下创建闪回日志文件。日志文件中记录的内容,正好与REDO相反。REDO记录所有的写操作,而闪回日志中记录的是写操作的反向操作,类似UNDO日志。反向操作,就是如何回退写操作。例如插入一条数据操作,它的反向操作就是删除这条数据。
闪回支持在几个不同的层面操作,例如数据库级别、表级别以及交易级别。
1) 数据库级别
将数据库置于mount状态下,

SQL> flashback database to timestamp to_date(02-03-2025 12:05:22,’dd-mm-yyyy hh24:mi:ss’);

闪回结束后,需要使用resetlogs参数打开数据库。
2) 表级别
问题是解决了,但是这个时间点之后的全部更新数据就都被删除了。有很多数据是正确写入的,我们还想要保留它。如果我们不想闪回整个数据库,只想闪回某一个表,这样可以将影响降低。
事先要打开表的ROW MOVEMENT功能,

SQL> alter table schema1.table1 enable row movement;

闪回一个表,数据库OPEN状态下操作,

SQL> flashback table schema1.table1 to timestamp to_date(02-03-2025 12:05:22,’dd-mm-yyyy hh24:mi:ss’);

有些表之前是有关联的,修改一个表的数据,关联的表会自动更新,这是触发器原理。例如交易记录明细的变化,会自动触发汇总表数据的变化。在回退一个表中的数据时,可以自动调用触发器,将关联的表中数据也进行回退。

SQL> flashback table order.test1 to timestamp to_date(02-03-2025 12:05:22,’dd-mm-yyyy hh24:mi:ss’) enable triggers;

3) 交易级别
严格意义上说,交易级别的闪回,不是备份恢复领域的技术。Oracle官方把它归类到SQL维护的范畴,因此在备份恢复文档中没有提及,也不建议备份管理员来操作,它应该由SQL开发人员来设计使用。详细内容请参考《Database Development Guide》文档。

如果从实际使用案例上来说,很少见到大型的、交易频繁的数据库中打开FLASHBACK功能,它既消耗资源,提供的功能也有很大局限。它的功能,主要面对的是DML级别的操作,如insert、delete、update等,在错误修改了数据后进行回退。但是它不支持DDL级别的操作,如DROP、TRUNCATE等,数据无法找回。主要原因是DML是事务级,会生成UNDO语句,而DDL是结构级,不会生成UNDO语句。从另外一个层面上来说,FLASHBACK LOG保存在FAST RECOVERY AREA,但是它的优先级低,如果FRA空间不足(参数文件中设置),旧的FLASHBACK LOG将被重复使用,旧的数据被覆盖掉。
CSDN视频课程:
https://edu.csdn.net/lecturer/8135?spm=1002.2001.3001.4144

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值