闪回
一、闪回的意义
a) 闪回的用处
i. 在Oracle的操作过程中,会不可避免地出现操作失误或者用户失误,例如不小心删除了一个表等,这些失误和错误可能造成重要数据的丢失,最终导致Oracle数据库停止允许。
ii. 在传统意义上,当发生数据丢失、数据错误问题时,解决的主要办法是数据的导入导出、备份恢复技术,这些方法都需要在发生错误前,有一个正确的备份才能进行恢复。
iii. 为了减少这方面的损失,oracle提供了闪回技术。有了闪回技术,就可以实现数据的快速恢复,而且不需要数据备份。
b) 闪回的优点:
i. 恢复中,闪回技术是革命新的进步
ii. 传统的恢复技术缓慢:
1. 它是整个数据库或者一个文件恢复,不只恢复损毁的数据
2. 在数据库日志中每个修改都必须检查
iii. 闪回速度快
1. 通过行和事务把改编入索引
2. 仅仅改变了的数据会被恢复
iv. 闪回命令很容易
1. 没有复杂棘手的多步程序
二、闪回的类型
a) 闪回表(flashback table)
i. 闪回表的详解
1. 闪回表,实际上是将表中的数据快速恢复到过去的一个是焦点或者系统改变号SCN上。实现表的闪回,需要使用到与撤销表空间相关的undo信息,通过show parameter undo命令可以了解这些信息。
2. 用户对表数据的修改操作,都记录在撤销表空间中,这为表的闪回提供了数据恢复的基础。例如,某个修改操作在提交后被记录在撤销表空间中,保留时间为900秒,用户可以在这900秒的时间内对表进行闪回操作,从而将表中的数据恢复到修改之前的状态。
3. 执行表的闪回,需要有flashback any table的权限
4. 注意事项: 闪回表需要将表的行移动功能打开
4.alter table <table_name> enable row movement;
ii. 闪回表的语法:
1. FLASHBACK TABLE [schema.]<table_name>
1.TO
1.{[BEFORE DROP [RENAME TO table]]
1.[SCN|TIMESTAMP]expr
1.[ENABLE|DISABLE]TRIGGERS}
2. schema:模式名,一般为用户名。
2.TO TIMESTAMP:系统邮戳,包含年、月、日、时、分、秒。
2.TO SCN:系统更改号,
2.ENABLE TRIGGERS:表示触发器恢复以后为enable状态,而默认为disable状态。
2.TO BEFORE DROP:表示恢复到删除之前。
2.RENAME TO table:表示更换表名。
iii. 闪回表需要考虑的事情
1. FLASHBACK TABLE命令作为单一的事务执行,会得到一个单一的DML锁
2. 表的统计数据不会被闪回
3. 当前的索引和从属的对象会被维持
4. 闪回表操作:
a) 系统表不能被闪回
b) 不能跨越DDL操作
c) 会被写入警告日志
d) 产生撤销和重做的数据
b) 闪回删除(flashback drop)
i. 闪回删除的详解
1. 闪回删除实际上从系统的回收站中将已经删除的对象,恢复到删除之前的状态
2. 系统的回收站只对普通用户有作用
ii. 回收站简介
1. 回收站是所有被删除对象及其对象的逻辑存储容器
2. 回收站将用户执行的drop操作记录在一个系统表中,也是将删除的对象写到一个数据字典中。如果确定不再需要该对象,可以使用purge命令对回收站进行清空。
3. 被删除的对象的名字可能是相同的!
4. 命名规则:为了确保添加到回收站中的对象的名称都是唯一的,系统会对这些保存到回收站中进行重名名,格式如下:
BIN$globalUID$version
其中: BIN表示RECYCLEBIN;globalUID是一个全局唯一的、24个字非长的对象,该标识与原对象名没有任何关系;version指数据库分配的版本号。
iii. 闪回使用drop,命令删除的表
1. 使用表名闪回
2. 使用recyclebin name闪回
iv. 闪回删除需要考虑的事情
1. 闪回删除对下列表无效:
a) 在SYSTEM 表空间内的表
b) 用精细审计的数据库或虚拟的私人数据库
c) 属于字典管理的表空间
d) 由于空间不足已经被手动或自动删除的表
2. 以下依赖不被保护:
a) 位图索引
b) 表之前删掉的索引
c) 闪回版本查询(flashback version query)
i. 闪回版本查询,提供了一个审计行改变的查询功能,通过它可以查找到所有已经提交了的行记录。其语法格式如下:
i.select column_name[,column_name,...]
i.from table_name
i.versions between [SCN|TIMESTAMP] [expr|MINVALUE]
i. and [epxr|MAXVALUE] as of [SCN|TIMESTAMP] expr;
ii. 其中:column_name列名;table_name表名;between...and时间段;SCN系统改变号;TIMESTAMP时间戳;AS OF表示恢复单个版本;MAXVALUE最大值;MINVALUE最小值;expr指定一个值或者表达式。