1.概述
在Oracle的操作工程中,会不可避免地出现操作失误或者用户失误,例如不小心删除了一个表等,这些失误和错误可能会造成重要数据的丢失,最终导致Oracle数据库停止,在传统意义上,当发生数据丢失、数据错误问题时,解决的主要办法是数据的导入导出、备份恢复技术,这些方法都需要在发生错误前,有一个正确的备份才能进行恢复。
为了减少这方面的损失,Oracle提供了闪回技术。有了闪回技术,就可以实现数据的快速恢复,而且不需要数据备份
为了减少这方面的损失,Oracle提供了闪回技术。有了闪回技术,就可以实现数据的快速恢复,而且不需要数据备份
闪回的好处:
闪回技术是革命性的进步
传统的恢复技术缓慢:
它是整个数据库或者一个文件恢复,不只恢复损坏的数据
在数据库日志中每个修改都必须被检查
闪回速度快:
通过行和事务把改变编入索引
仅仅改变了的数据会被恢复
闪回命令很容易:
没有复杂棘手的多步程序
传统的恢复技术缓慢:
它是整个数据库或者一个文件恢复,不只恢复损坏的数据
在数据库日志中每个修改都必须被检查
闪回速度快:
通过行和事务把改变编入索引
仅仅改变了的数据会被恢复
闪回命令很容易:
没有复杂棘手的多步程序
1.闪回的类型
闪回技术一共有6大类型:闪回表,闪回删除,闪回版本查询,闪回事务查询,闪回数据库,闪回归档日志。
1.闪回表:将表回退到过去的一个时间
2.闪回删除:操作oracle的回收站
3.闪回版本查询:查询表的历史记录
4.闪回事务查询:撤回一个已经提交的事务
5.闪回数据库:将数据库回退到过去的一个时间上
6.闪回归档日志:
2.闪回删除:操作oracle的回收站
3.闪回版本查询:查询表的历史记录
4.闪回事务查询:撤回一个已经提交的事务
5.闪回数据库:将数据库回退到过去的一个时间上
6.闪回归档日志:
2.闪回表
闪回表,实际上是将表中的数据快速恢复到过去的一个是焦点或者系统改变号SCN上。实现表的闪回,需要使用到与撤销表空间相关的undo信息,通过show parameter undo命令可以了解这些信息。用户对表数据的修改操作,都记录在撤销表空间中,这为表的闪回提供了数据恢复的基础。例如,某个修改操作在提交后被记录在撤销表空间中,保留时间为900秒,用户可以在这900秒的时间内对表进行闪回操作,从而将表中的数据恢复到修改之前的状态。
修改保留时间:alter system set undo_retention=1200 scope=both
scope取值:memoery spfile both
memoery:内存,也就是当前会话中
spfile:系统配置文件中
both:两者都有
闪回表是将表会退到过去的一个SCN上
执行表的闪回,需要有flashback any table的权限
闪回表语法:
FLASHBACK TABLE [schema.]<table_name>
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:表示更换表名。
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:表示更换表名。
闪回表操作:
系统表不能被闪回
不能跨越DDL操作
会被写入警告日志
产生撤销和重做的数据
系统表不能被闪回
不能跨越DDL操作
会被写入警告日志
产生撤销和重做的数据
2.闪回表
回收站是所有被删除对象及其相依对象的逻辑存储容器,例如当一个表被删除(drop)时,该表及其相依对象并不会马上被数据库彻底删除,而是被保存到回收站中。
回收站将用户执行的drop操作记录在一个系统表中,也就是将被删除的对象写到一个数据字典中。如果确定不再需要该对象,可以使用purge命令对回收站进行清空。
回收站将用户执行的drop操作记录在一个系统表中,也就是将被删除的对象写到一个数据字典中。如果确定不再需要该对象,可以使用purge命令对回收站进行清空。
为了确保添加到回收站中的对象的名称都是唯一的,系统会对这些保存到回收站中的对象进行重命名,重命名的格式如下:
BIN$globalUID$version
其中: BIN表示RECYCLEBIN;globalUID是一个全局唯一的、24个字非长的对象,该标识与原对象名没有任何关系;version指数据库分配的版本号。
BIN$globalUID$version
其中: BIN表示RECYCLEBIN;globalUID是一个全局唯一的、24个字非长的对象,该标识与原对象名没有任何关系;version指数据库分配的版本号。
闪回删除对下列表无效:
在SYSTEM 表空间内的表
用精细审计的数据库或 虚拟的私人数据库
属于字典管理的表空间
由于空间不足已经被手动或自动删除的表
以下依赖不被保护:
位图索引
表之前删掉的索引
在SYSTEM 表空间内的表
用精细审计的数据库或 虚拟的私人数据库
属于字典管理的表空间
由于空间不足已经被手动或自动删除的表
以下依赖不被保护:
位图索引
表之前删掉的索引
删除一张表不经过回收站=删除一张表并把回收站清空
系统的回收站只对普通用户有作用,管理员没有回收站,删除了是不能闪回的,回收站只对表而言对视图没有
删除一张表
被删除的对象的名字可能是相同的,例如用户创建了一个test表,使用drop命令删除该表后,又创建了一个test表,这时,如果再次删除该表就会导致向回收站中添加了两个相同的表,闪回同名的表时会闪回先删除的表
四.闪回版本查询
闪回版本查询,提供了一个审计行改变的查询功能,通过它可以查找到所有已经提交了的行记录。其语法格式如下:
select column_name[,column_name,...]
from table_name
versions between [SCN|TIMESTAMP] [expr|MINVALUE]
and [epxr|MAXVALUE] as of [SCN|TIMESTAMP] expr;
其中:column_name列名;table_name表名;between...and时间段;SCN系统改变号;TIMESTAMP时间戳;AS OF表示恢复单个版本;MAXVALUE最大值;MINVALUE最小值;expr指定一个值或者表达式。
select column_name[,column_name,...]
from table_name
versions between [SCN|TIMESTAMP] [expr|MINVALUE]
and [epxr|MAXVALUE] as of [SCN|TIMESTAMP] expr;
其中:column_name列名;table_name表名;between...and时间段;SCN系统改变号;TIMESTAMP时间戳;AS OF表示恢复单个版本;MAXVALUE最大值;MINVALUE最小值;expr指定一个值或者表达式。
闪回版本查询提供了许多伪列,都以vesions开头
闪回版本查询还有一个比较重要的属性vesions_xid,事务版本号,通过这个可以执行闪回事务查询
五.闪回事务查询
闪回事务查询实际上闪回版本查询的一个扩充,通过它可以审计某个事务甚至撤销一个已经提交的事务。
实现闪回事务查询,需要先了解flashback_transaction_query视图,从该视图中可以获取事务的历史操作记录以及撤销语句(UNDO_SQL)。
使用闪回事务查询,可以了解某个表的历史操作记录,这个操作记录对应一个撤销SQL语句,如果想要撤销这个操作,就可以执行这个SQL语句。
实现闪回事务查询,需要先了解flashback_transaction_query视图,从该视图中可以获取事务的历史操作记录以及撤销语句(UNDO_SQL)。
使用闪回事务查询,可以了解某个表的历史操作记录,这个操作记录对应一个撤销SQL语句,如果想要撤销这个操作,就可以执行这个SQL语句。
名称 类型 说明
------------------------------------------------------------------------------------------------
XID RAW(8) 事务编号
START_SCN NUMBER 事务的开始的系统改变号
START_TIMESTAMP DATE 事务的开始时间
COMMIT_SCN NUMBER 事务提交时的系统改变号
COMMIT_TIMESTAMP DATE 事务提交时的时间
LOGON_USER VARCHAR2(30) 对应的用户
UNDO_CHANGE# NUMBER 撤销操作对应的编号
OPERATION VARCHAR2(32) 操作
TABLE_NAME VARCHAR2(256) 表
TABLE_OWNER VARCHAR2(32) 所有者
ROW_ID VARCHAR2(19) 行号
UNDO_SQL VARCHAR2(4000) 撤销事务的SQL语句
------------------------------------------------------------------------------------------------
XID RAW(8) 事务编号
START_SCN NUMBER 事务的开始的系统改变号
START_TIMESTAMP DATE 事务的开始时间
COMMIT_SCN NUMBER 事务提交时的系统改变号
COMMIT_TIMESTAMP DATE 事务提交时的时间
LOGON_USER VARCHAR2(30) 对应的用户
UNDO_CHANGE# NUMBER 撤销操作对应的编号
OPERATION VARCHAR2(32) 操作
TABLE_NAME VARCHAR2(256) 表
TABLE_OWNER VARCHAR2(32) 所有者
ROW_ID VARCHAR2(19) 行号
UNDO_SQL VARCHAR2(4000) 撤销事务的SQL语句
要查询flashback_transaction_query视图的信息,需要有select any transaction的权限。