前文说到ORACLE通过undo实现数据的多版本模型,同样的道理ORACLE还通过undo实现了闪回查询的特性,本文将总结ORACLE的几种闪回技术。闪回技术是Oracle数据库独有的特性,支持各级恢复,包括行、事务、表、表空间和数据库范围。采用闪回技术,可以针对行级和事务级发生过变化的数据进行恢复,减少了数据恢复的时间,而且操作简单,通过SQL语句就可以实现数据的恢复,大大提升了数据库恢复的效率。按照闪回的原理ORACLE的闪回技术可以分为以下三类:
1.基于undo表空间:闪回查询、闪回版本查询、闪回事务查询、闪回表;
2.基于回收站(Recycle Bin):闪回删除;
3.基于闪回恢复区(Flash Recovery Area)中的闪回日志:闪回数据库;
一、闪回查询(Flashback Query)
闪回查询是指查询过去某个时间点或某个SCN值对应的表中的数据信息,即可以从回滚段中读取一定时间内对表进行操作的数据,从而恢复错误的DML操作。闪回查询的语句和实验步骤如下所示,可以通过scn或时间点闪回查询到过去某个时间的数据。
select * from xxx as of scn|timestamp xxx;
二、闪回版本查询(Flashback Version Query)
闪回版本查询是指查询过去某个时间段或某个SCN段内表中数据的变化情况。通过以下SQL可以看到表中ID,ADDR两列的数据随着事务的变化情况。
select versions_xid,versions_operation,versions_startscn,versions_endscn from xxx versions between scn minvalue and maxvalue;
三、闪回事务查询(Flashback Transaction Query)
闪回事务查询是指查看某个事务或所有事务在过去一段时间对数据进行的修改。通常需要先通过闪回版本查询获取事务的xid号,然后再通过闪回事务查询获取undo_sql,这样就可以执行undo_sql对已提交的事务进行撤销。使用闪回事务查询需要开启补充日志,并且给应用用户授予select any transaction权限。
select undo_sql from flashback_transaction_query where xid='versions_xid';
四、闪回表(Flashback TABLE)
闪回表是指将表恢复到过去的某个时间点或某个SCN值时的状态。闪回表的前提是需要先对表开启行迁移alter table enable row movement。闪回表可以直接将表恢复到过去的状态,所以应该谨慎操作,生产环境最好先通过闪回查询确认好数据再进行闪回操作。
flashback table xxxx to scn|timestamp
五、闪回删除(Flashback DROP)
闪回删除是指将已经删除的表及表上的索引恢复到删除前的状态,但索引名不会恢复到删除前的状态。闪回删除是基于回收站完成的,据库每个用户都有一个回收站,但这个回收站并不实际开辟空间(只是个逻辑标记),当drop table时(非 purge),原来的表所使用的段中的数据并没有真正的删除,实际上是以回收站方式重命名。该段所在表空间不足时,回收站中的信息会被自动清除。
flashback table xxx to before drop;
六、闪回数据库(Flashback Database)
闪回数据库是指将数据库恢复到过去某个时间点或某个SCN值时的状态。当数据库发生逻辑错误比如误删除用户时,可以快速将数据库恢复到过去的某个时间点从而找回被删除的用户。当数据库开启了闪回,发生变化的数据块会不断从数据库缓冲区缓存中复制到闪回缓冲区,然后,称为恢复写入器(Recovery Writer)的后台进程会将这些数据刷新到磁盘中的闪回日志文件中。闪回的过程,是一个提取闪回日志,然后将之前某个时间点的块映像复制回数据文件的过程,由于只需要物理地恢复变化的数据块,所以这个过程非常快。除了需要闪回日志,还需要重做日志来完成闪回到一致的数据库版本,因此数据库要处于归档模式。由于是相当于数据库的不完整恢复,闪回点之后的所有工作就丢失了,所以只能以resetlogs模式打开数据库重置redo log。闪回数据库的前提是需要先配置好快速恢复区,并在mount状态开启闪回数据库。
闪回数据库的语法和实验如下所示,展示了如何通过闪回数据库到具体的SCN从而找回了被删除的用户。
flashback database to scn|timestamp xxx;
标签:闪回,DBA,恢复,数据库,事务,查询,MySQL,某个 From: https://www.cnblogs.com/coygfly/p/18254614