Oracle(十三)闪回查询
Posted 小陈的技术博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle(十三)闪回查询相关的知识,希望对你有一定的参考价值。
Oracle闪回技术
1闪回表
闪回表就是将表里的数据退到历史上的某个时间点,例如回退到用户误删数据之前的时间点,从而将误删除的数据恢复过来。在这个过程中,数据库仍然可用,而且不需要类似于闪回日志一样的额外空间。
闪回表利用UNDO表空间里记录的数据旧映像,如果闪回表所需要的UNDO数据由于保留的时间超过了初始化参数undo_retention所指定的值,从而导致该UNDO数据块被其他事务覆盖,就不能恢复到指定的时间点了。
可以通过间的retention guarantee选项来保证闪回的成功。
上图可获取的数据为:undo表空间是UNDOTBS1,保留时间是15Min。那么如何修改保留时间为24小时呢?
注意:undo_retention的作用是UNDO中的数据至少保留的时间,在这段时间内不能覆盖,这样可以保证将表恢复到这个时间段内的某个时间点。
△闪回表的操作会修改表里的数据,从而可能引起数据行的移动。比如某一行数据当前在A数据块里边,而在表闪回到以前的某个时间点上,在那个时间点上该行数据位于B数据块里边,因此在闪回表之前必须启用数据行的移动特性。
数据行移动特性
Step1:建表并添加数据
Step2:模拟用户出错,删除了ID>80的数据记录。
Step3:使用闪回特性,注意报错
Step4:开启表的行移动特性并闪回恢复
注意:闪回表仍然具有操作的局限性,假设当前时间点为B,需要将表回到历史上的A点,如果在A到B这段时间里,对表进行了任何的DDL操作,则闪回表操作失败。
2闪回版本查询
闪回版本指的是每次事务所引起的数据行的变化情况,每一次变化就是一个版本。Oracle提供了闪回版本查询,让我们看到数据行的整个变化情况。
上边的变化指的是已经提交的事务引起的变化,没有提交的事务不会显示变化。闪回版本查询使用的undo表空间里记录的undo数据。
·version_starttime:事务开始时间
·version_startscn:事务开始的SCN号
·version_endtime:事务结束的时间
·version_endscn:事务结束的SCN
·version_xid:事务的id号
·version_operation:事务所进行的基本操作
实验ing
Step1:创建实验表并进行增删改
Step2:通过闪回版本查询来确认操作的不同版本信息
3闪回事务查询
闪回事务查询提供的是一个视图flashback_transaction_query,利用这个视图可以显示哪些事务引起了数据的变化,并为此撤销事务的SQL语句。闪回事务查询利用的是undo表空间。
实验ing
Step1:添加测试表并添加数据
注意:第一步必须开启附加日志
Step2:查询对表的事务的详细信息。
Method1:
Method2:
复原点技术(SCN)
复原点就是将数据恢复到该点的状态,在闪回数据库或者闪回表操作时往往需要一个具体的时间点或者SCN等信息,说明将闪回到哪里结束。
Step1:创建一个无保证的复原点:
Step2:创建一个有保证的复原点:
有保证的复原点指定了存储空间。
删除复原点:
SQL> drop restore point xxx
SUMMARY:
闪回技术是Oracle10g以后的版本增加的新特性,使用闪回特性可以快速地恢复用户的逻辑错误或者误删表等操作。闪回删除主要是关注用户误删表、索引等数据库对象,闪回删除使用回收站作为存储删除的数据库对象的逻辑存储结构。注意:闪回删除并不是直接将数据从数据库中删除放入回收站,而是将数据库对象的定义从数据字典中删除,数据存储在原处,在回收站中记录这个被删除的数据库对象,一旦需要闪回到删除前的状态,使用回收站中记录的对象信息进行闪回。在删除表时,与表相关联的其他护具库对象如索引、触发器等也一样删除。在闪回表时,相关的数据库对象也被自动恢复,但是名称需要进一步修改。
闪回数据库技术是处理用户逻辑的快速数据恢复技术,相比传统恢复会减少时间,传统数据库恢复时间取决于数据库自身的大小,而闪回数据库技术的恢复时间取决于逻辑错误的数据量大小。使用闪回数据库技术需要将数据库设置为归档模式,并启动快闪恢复区作为闪回日志的存储位置。一般条件下应该尽量设置较大的快闪恢复区,以保证数据库总可以执行成功。
小陈今天的分享就到这里啦!
期待下一期的邂逅!
以上是关于Oracle(十三)闪回查询的主要内容,如果未能解决你的问题,请参考以下文章