闪回技术简介
※传统恢复技术:
- 恢复速度比较缓慢
- 必须还原整个数据库或者文件(而不仅仅是错误的数据)
- 必须检查数据库日志中的每项修改
※闪回技术:
- 恢复速度比较快
- 按行和事务处理对更改建立索引
- 只还原更改的数据
- 易于操作,不涉及复杂的多步骤过程
※使用这种技术时,从错误进行恢复所花费的时间等于制造错误所花费的时间。
※闪回技术适用时,与介质恢复相比,在易用性、可用性和还原时间方面有明显的优势。
何时使用闪回技术以及具体用法
※Oracle 数据库中出现逻辑损坏时,如果需要快速简便地恢复数据,就必须使用闪回技术。
※并不是所有闪回功能都会修改数据库。有些功能只是用来查询其它版本数据的方法。
※闪回技术的典型用法:
※闪回数据库使用闪回日志执行闪回。闪回删除使用回收站。其它所有功能都使用还原数据。
用法——闪回数据库
(一)概览
※使用这个功能可撤消导致逻辑数据损坏的更改。
※如果数据库发生介质丢失或物理损坏,则必须使用传统恢复方法。
※闪回数据库通过还原自先前某个时间点以来所做的所有更改,可快速将数据库恢复到较早的时间点。
△这个操作速度很快,因为不需要还原备份
(二)缩短还原时间
※闪回数据库是通过使用一种被称为闪回数据库日志的日志文件来实施的。Oracle 数据库会定期将数据块的“前像”记录在闪回数据库日志中。执行闪回操作时,就可以重用块图像。然后应用重做日志文件中的更改来填充间隔(?什么间隔)。
△因为不需要还原数据文件,所以恢复数据库的时间与需要回退的更改数目(而不是数据库大小)成比例。
△在快速恢复区中会自动创建和管理闪回数据库日志。
(三)注意事项
※闪回数据库操作完成后,必须使用以下一种方法打开数据库:
- 在只读模式下验证是否使用了正确的目标时间或SCN(如果没有,可以再次闪回数据库,或通过执行恢复操作来前滚数据库)
- 使用RESETLOGS 参数以允许进行更新
※要撤销闪回数据库操作,必须向前恢复数据库。
※闪回保留目标并不能绝对保证闪回是可用的。如果快速恢复区中必需存在的文件需要占用空间,可能会自动删除闪回日志。
(四)限制
※不能在下列情况下使用闪回数据库:
- 已还原或重新创建了控制文件。(删除文件会添加到控制文件中且标记为脱机)
- 表空间已删除。
- 数据文件已发生收缩。(这种数据文件必须先脱机,才能执行闪回操作)
用法——闪回表
(一)概述
※使用闪回表,可将一个或多个表恢复到特定的时间点,而不需要还原备份。
※闪回表会还原表及其关联对象(如索引、约束条件、触发器等)中的数据
※从还原表空间检索数据以执行闪回表操作。
△必须对要执行闪回操作的表启用行移动。
※可将FLASHBACK权限授予表所有者以外的用户。
(二)行移动
※必须先对表启用行移动,才能对表执行闪回操作。
※对表启动行移动,例如:
ALTER TABLE employees ENABLE ROW MOVEMENT; |
(三)执行闪回表
※可选择闪回到指定的时间戳或SCN
例如:
FLASHBACK TABLE hr.employees TO TIMESTAMP TO_TIMESTAMP('2005-05-05 05:32:00','YYYY-MM-DD HH24:MI:SS'); |
FLASHBACK TABLE hr.employees TO SCN 926516; |
※查询相应SCN的方法:
select dbms_flashback.get_system_change_number scn from dual; |
或
select timestamp_to_scn('22-9月-11 01.59.26.000000000') scn from dual; |
(四)注意事项
※整个FLASHBACK TABLE 语句是在一个事务处理中执行的,以获取对该语句指定的所有表DML 互斥锁。可能会闪回所有指定表,也可能不闪回任何指定表。
※闪回表不会闪回受影响对象的统计信息。
※会保留所有现有索引。不会重新创建删除的索引。还会自动维护相关的提交时实体化视图。
※FLASHBACK TABLE 语句会写入到预警日志文件。会生成还原和重做数据。
※限制条件:
- 不能对系统表、远程表和固定表执行闪回表操作。
- 不能跨多个DDL 操作(因为执行数据定义语言(DDL) 操作会更改闪回操作涉及的表的结构或收缩此表)。
用法——闪回删除
(一)执行闪回删除
※当DROP了一个表之后,可以执行闪回删除。例如:
SQL> drop table tt; Table dropped SQL> select * from tt; select * from tt ORA-00942: table or view does not exist SQL> flashback table tt to before drop; Done SQL> select * from tt; ID NAME --------------------------------------- -------------------- 2 test |
※闪回删除是通过DBA_RECYCLEBIN 视图查询回收站实现的。
※闪回删除后,相关的关联对象(索引等)也相应恢复。
(二)注意事项
※闪回删除不适用于:
- 驻留在SYSTEM表空间中的表
- 使用细粒度级审计(FGA)或虚拟专用数据库(VPD)的表
- 驻留在字典管理表空间中的表
- 已清除的表(手动PURGE清除,或因表空间中其他对象需要空间而将其清除的)
※对表执行闪回删除时,还会从回收站中闪回与该表相关的所有对象。
但也有些例外情况:
- 位图连接索引
- 实体化视图日志
- 引用完整性约束条件
- 在删除表前删除的索引
用法——闪回查询
※使用闪回查询可以查询指定时间点的所有数据,这有助于分析数据差异。
※使用SELECT 语句的AS OF子句,可指定要查看其数据的时间戳或SCN。(AS OF后面可以)
例如:
SELECT * FROM tt AS OF SCN 926516; |
SELECT salary FROM employees AS OF TIMESTAMP TO_TIMESTAMP ('2005-05-04 11:00:00', 'yyyy-mm-dd hh24:mi:ss') |
用法——闪回版本查询
※用于查看两个时间之间某一行的所有版本,以及查看更改了行的事务处理。
※使用VERSIONS 子句检索两个特点时间点或两个SCN 之间的所有行的所有版本。
△闪回版本查询只检索提交了的行事件,除了修改还包括删除的行版本和后来重新插入的行版本。
例如:
SELECT versions_xid, salary FROM employees VERSIONS BETWEEN TIMESTAMP t1 and t2 WHERE employee_id = 200; |
versions_xid是返回行对应版本的事务处理标识符的伪列。
※注意事项:
- VERSIONS子句不能用于查询:外部表、临时表、固定表和视图。
- SELECT中的VERSIONS子句不能跨多个DDL语句(这些语句会更改对应表的结构)生成行的版本。
- 会过滤掉段收缩操作(跨多个块移动表行的操作)。
用法——闪回事务处理查询
※查看在事务处理级对数据库所作的更改。
※可作为诊断数据库中的问题并对事务处理执行分析和审计的工具。
※相应内容存在视图FLASHBACK_TRANSACTION_QUERY中。
※注意事项:
- DDL 被视为字典更新。
- 删除的对象以对象编号的形式显示。
- 删除的用户以用户标识符(用户ID)的形式显示。
△当特定的事务处理没有足够的还原数据,FLASHBACK_TRANSACTION_QUERY 的OPERATION 列中会返回值为UNKNOWN 的行。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26121819/viewspace-708151/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/26121819/viewspace-708151/