闪回Flashback

什么时候会用到闪回?
1.错误的删除了数据,并且commit
2.错误的删除了表drop table
3.如何获取表上的历史纪录
4.如何撤销一个已经提交了的事务

闪回的类型:
1. 闪回表(flashback table):将表回退到过去的一个时间
2. 闪回删除(flashback drop):操作oracle的回收站
3. 闪回版本查询(flashback version query):获取表上的历史纪录
4. 闪回事务查询(flashback transaction query):获取一个undo_sql操作
5. 闪回数据库(flashback datadase):将数据库回退到过去的一个时间
6. 闪回归档日志(flashback data archive):将日志文件回退到过去的一个时间

闪回的好处:
恢复中,闪回技术是革命的进步
1.传统的恢复技术缓慢:
1)中能是整个数据库或者一个文件恢复,不能恢复损坏的数据
2) 在数据库日志中每个修改都必须被检查
2.闪回速度快:
1)通过行和事务把改变bain如索引
2)仅仅改变了得数据会被恢复
3.闪回命令很容易

闪回恢复区设置:
修改两个初始化参数,在设置时限设置大小,在设置位置
DB_RECOVERY_FILE_DEST 位置
DB_RECOVERY_FILE_DEST_SIZE 大小
查看闪回回复区的设置
show parameter db_recovery_file_dest;

闪回表
闪回表实际上是将表中的数据快速恢复到过去的一个是焦点或者系统改变号SCN上。通过show parameter undo 命令了解undo信息
用户对数据的修改操作,都记录在撤销表空间中,保留时间默认为900秒,用户可在900秒内对标进行闪回操作
执行表的闪回操作需要有 flashback any table 的权限
修改撤销表空间中表的默认时间
alter system set undo_retention=1200 scope=both;
系统改变号SCN
select to_char(sysdate,’yyyy-mm-dd hh24:mi:ss:mm’) time, timestamp_to_scn(sysdate) SCN from dual;

闪回表语法:
flashback table [schema.]
to
{[before drop[rename to table]]
[scn|timestamp]expr
[enable|disable]triggers}

schema:模式名,一般为用户名。
to timestamp: 系统邮戳,包含年、月、日、时、分、秒。
to scn: 系统更改号
enable triggers:表示触发器恢复以后为enable状态,二默认为disable状态。
to before drop: 表示恢复到删除之前。
rename to table: 表示更换表明

使用set time on ,在提示符前显示当前系统时间,便于恢复时间戳
打开表的行移动
alter table flashback_table enable row movement;
注意事项:
FLASHBACK TABLE命令作为单一的事务执行,会得到一个单一的DML锁
表的统计数据不会被闪回
当前的索引和从属的对象会被维持

闪回表操作:
系统表不会被闪回
不能跨越DDL操作
会被写入警告日志
产生撤销和重做的数据

闪回删除
系统的回收站只对普通用户有用

回收站简介
回收站是所有被删除对象及其依赖对象的逻辑存储容器,例如当一个表被删除(drop)时,该表及其相依赖对象并不会马上被数据库彻底删除,而是被保存在回收站中
回收站将用户执行的drop操作记录在一个系统表中,也就是将删除的对象写到一个数据字典中,如果确定不再需要改对象,可以使用purge命令对回收站进行清空
被删除的对象的名字可能是相同的
用命令show parameter recyclebin 查看回收站是否可用
Oracle的回收站:管理员没有回收站

执行闪回删除:
    通过表明闪回删除
    通过回收站中的名字闪回删除
    闪回重名的表  

常用的伪列:

闪回事务查询
闪回事务参训实际上是闪回版本查询的一个扩充,通过它可以审计某个事务甚至撤销一个已提交的事务
实现闪回事务查询,需要先了解flashback_transaction_query视图,该视图中可以获取事务的历史操作记录以及撤销语句(undo_sql)
使用闪回事务查询,可以了解某个表的历史操作记录,这个操作记录对应一个撤销sql语句,如果想要撤销这个操作,就可以执行这个sql语句。

注意:要查询flashback_transaction_query视图的信息,需要有select any transaction的权限

闪回版本查询
见一个只有一个列的表
select 列名, versions_starttime, versions_operation from 表名 versions between scn minvalue and maxvalue;

你可能感兴趣的:(oracle,闪回)