VR[GEO`_0X6BZGJ}7%A.jpg)
闪回技术有:闪回查询、闪回数据归档、闪回事务查询、闪回事务、闪回表、闪回删除、闪回数
据库
一、闪回查询
闪回时间点查询:select命令的 as of 子句和包pl/sql在过去一个时间点上的查询
闪回版本查询:select 命令的versions between子句在过去的一段时间范围内的查询
闪回查询能够在撤销段类搜索撤销数据,撤销数据的保留策略取决于以下4个因素(闪回查询、闪
回事务查询、闪回表)
1.初始化参数undo_retention
2.undo表空间的数据文件是否启用了自动增长功能
3.undo表空间是否绝对尊重undo_retention的设置(guarantee)
4.数据库中的事务量
二、闪回数据归档
闪回数据归档:将原本只能保存在undo表空间的撤销数据额外的以一种历史表的形式保存在指定
的普通表空间中,并且不像undo_retention参数那样是影响整个数据库的设置,闪回数据归档只
为特定的表服务。
1.创建数据归档
SQL> create flashback archive fda1 tablespace EXAMPLE retention 1 year;
Flashback archive created.
2.在特定的表上启用闪回数据归档功能
SQL> alter table hr.employees flashback archive fda1;
Table altered.
3.关闭闪回数据归档功能
SQL> alter table hr.employees no flashback archive ;
Table altered.
4.清除闪回归档中的数据
alter flashback archvie fda1 purge all/before timestamp (systimestamp - interval '1'
month);
5.启用了闪回归档,执行少数DDL命令时会报错ora-55610,(shrink space,move,exchange
paratition)
三、闪回事务查询
1.需要撤销数据和最小补充日志
2.返回的结果不是以前的旧数据,而是能够将当前数据修改为以前的样子的撤销SQL语句
3.集中的在表名为flashback_transaction_query表上查询
四、闪回事务
1.闪回事务能够撤销一个或多个事务的修改,其功能由一个名为
dbms_flashback.transaction_backout的存储过程实现,自动分析重做日志,挖掘出变更前的值
用以构建撤销SQL。需要启用主键补充日志和外键补充日志。
2.事务依赖
2.1 WAW依赖:事务1修改了表的某行后,事务2又修改了同一行
2.2 主键依赖:在拥有主键的表中事务1删除了这一行,之后事务2又插入了具有相同主键值的另
一行
2.3 外键依赖:由于事务1的修改而产生了新的可被外键参考的字段后,之后事务2修改外键字段
时利用了事务1产生的字段值
3.闪回事务的options参数
3.1 nocascade:事务1不可以被其他事务依赖,否则撤销报错
3.2 cascade:事务1和事务2一起撤销
3.3 nocascade_force:忽略事务2,直接撤销事务1,如果有约束报错将导致撤销失败
3.4 nocascade_only:在不影响事务2的情况下,撤销事务1
五、闪回表
flashback table利用undo表空间的撤销数据,以表为单位将数据恢复为以前的样子
flashback table hlr to scn/time
1.被闪回的表必须启用行移动功能
alter table tablename enable row movement;
2.flashback table 权限
3.flashback table属于DDL语句,自带提交功能
4.sys用户的任何表无法使用此功能
六、闪回删表
flashback table before drop :drop table时,表及其索引并没有被真正删除,其所占空间只是
分配给了另一种数据库对象,回收站对象,并且这种所谓的分配使数据和数据块没有发生任何的
移动,还是呆在原来的数据文件及表空间中。表空间在自动增长的压力下会按照先入先出的规则
将回收站对象的区分配给需要空间的段,在将回收站对象耗尽之前数据文件是不会自动增长的。
七、闪回数据库
flashback database to pit
需要两种日志:闪回日志和重做日志,闪回日志记录的信息和重做日志记录的信息恰好相反。
闪回日志的保存路径一定是快速恢复区的子目录,保存的期限是由参数
db_flashback_retention_target控制。
开启闪回日志
alter database flashback on
表smon_scn_time记录一个时间戳和当前的scn,
函数 dbms_flashback.get_system_change_number scn_to_timestamp timestamp_to_scn
数据库级闪回恢复
启用flashback database后,数据库会定期将发生变化的数据块的前镜像写入闪回日志的日志文
件中,在数据库闪回时,这些数据块可以直接被复制回来以满足数据库的恢复需求。
查看数据块的闪回状态
select flashback_on from v$database;
初始化参数db_flashback_retention_target 用于是指数据块能够闪回的最大时间上限,这个参
数设置只是一个期望值,确切的闪回事件取决于闪回区中保留的闪回数据
表级闪回恢复
flashback drop
flashback table emp to before drop renmae emp1
某些约束,如外键,不能被闪回,将会丢失
bitmap join indexes 无法闪回
materialized view logs 不会被存放在回收站中,其内容会丢失
在闪回表时,可能表的部分索引会丢失,这和order by dropscn 的空间事务处理有关
行级恢复
事务闪回
确1保数据库的兼容性设置在10.0之上
需要启用supplemental logging
查看视图flashback_transaction_query
闪回表
flashback table 技术使用DML操作去恢复数据,不能保证rowid不变 所以在闪回表之前需要启用
表的row movement特性,不能将表恢复到改变表结构的DDL操作之前