
Oracle11g闪回技术.pdf
7页为什么使用闪回技术 1 闪回技术的发展 1 闪回查询 Flashback Query 2 闪回表 Flashback Table 2 闪回删除 flashback drop . 4 闪回版本查询 5 闪回事务查询(主要利用undo_sql 进行撤消操作) . 6 闪回数据库 flashback database . 6 闪回数据归档 7为什么使用闪回技术在 Oracle 的操作过程中,会不可避免地出现操作失误或用户错误,例 如删除了一个表等传统意义上的解决方法是使用数据导入导出,或是备份 恢复技术,但是前提是必须在错误发生之前有正确的备份有了闪回技术, 就可以实现数据的迅速恢复,而且不依赖于数据备份闪回技术的发展9i 闪回查询 Flashback Query 10g 闪回表( Flashback Table )闪回删除 / 丢弃( Flashback Drop )闪回版本查询( Flashback Version Query)闪回事务查询( Flashback Transaction Query)闪回数据库( Flashback Database)11g 闪回数据归档( Flashback Data Archive)Flashback Table 将表回滚到一个过去的时间点或系统改变号SCN 上,用来快速恢复表。
Flashback Drop 结合 Oracle 的回收站,将删除的对象从回收站中还原 Flashback Version Query 查看某个表在指定时间段或某两个SCN 之间的修改操作 Flashback Transaction Query 结合闪回版本查询,查看某个对象的事务信息, 该信息中记录了撤消SQL 语句,用于实现对该事务的撤消处理 Flashback Database 将数据库回滚到一个过去的时间点或系统改变号SCN , 快速恢复数据库 Flashback Data Archive 将数据库对象的修改操作记录在闪回数据归档区域中,这样可以使得数 据的闪回不依赖于UNDO 撤消数据闪回查询 Flashback Query 允许对误删除、 误更新等 DML 操作进行闪回 (UNDO 表空间读取操作前的 记录数据) 常用的 sql : Select current_scn from v$database; Select count(*) from 表名 as of scn scn的值;--------查询 Select count(*) from 表名 as of timestamp timestamp的 值;--------查询 Insert into 表名 Select * from 表名 as of scn scn 的值; -------- 恢复数据的方法闪回表 Flashback Table 实际上就是将表中的数据快速恢复到过去的一个时间点或是系统改变 号 SCN 上,实现表的闪回,需要使用到与undo表空间相关的 undo信息,通 过 show parameter undo 可以了解这些信息。
用户对表数据的修改操作,都 记录在 undo表空间中,这为表的闪回提供了数据恢复的基础Oracle Flashback Table特性允许利用 Flashback Table语句,确保闪回到表的前 一个时间点与 Oracle9i中的 Flashback Query 相似,利用回滚段信息来 恢复一个或一些表到以前的一个时间点 (一个快照) 要注意的是,Flashback Table 不等于 Flashback Query,Flashback Query 仅仅是查询以前的一个快 照点而已,并不改变当前表的状态,而Flashback Table 将改变当前表及附 属对象一起回到以前的时间点 语法: flashback table tablename to timestamp xxx; flashback table tablename to scn xxx; 前提条件: 需要有 flashback any table的系统权限或者是该表的flashback对象 权限; 需要有该表的 select ,insert ,delete ,alter权限; 必须保证该表 row movement。
必须启动自动撤消表空间(recycle bin(回收站)) 查看方法: SQL>show parameter undo_ 是否启用自动管理撤消表空间有二个初始值参数决定:undo_management:auto 表示使用了自动撤消管理表空间,manual 则表 示手动管理; undo_tablespace :当 undo_management 值为 auto 时,该参数用来指定 当前的 undo表空间名称, undo 空间的大小,直接影响到FLASHBACK query 的能力,表空间越大,所能够存储的undo数据自然也越多; undo_retention的设置,通常默认是900 秒,15分钟(该参数用来指 定 undo记录保存的最长时间) ,关于 undo_retention的理解: undo_retention只是指定 undo 数据的过期时间,并不是说, undo 中的数据 一定会在 undo表空间中保存 15 分钟,例如:一个新事务开始的时候,如果 undo 表空间已经被写满, 则新事务的数据会自动覆盖已提交事务的数据,而 不管这些数据是否已过期,因此,当创建一个自动管理的undo表空间时, 还要注意其空间大小,要尽可能保证undo表空间有足够的存储空间。
二、 flashback table影响的因素:如果我们把Flashback query看做是恢复 记 录,则 flashback table就是用来恢复 表的,同时,在 Oracle10g 中又新引 入了一个叫做 Recycle Bin的功能( 主要针对表及其关联对象,比如索引) , 被删除的表并非真正删除,而是通过修改数据字典的方式,将其改名并放入 recycle bin ,如果要恢复 recycle bin 中对象的话,借助flashback table 是最简便的方式,除此之外,flashback table 也提供了类似 flashback query 中 as of scn/timestamp的方式 从 recycle bin中恢复 要恢复 recycle bin中的表,注意语句如下: Flashback table [表名 ] to before drop,由于该项功能是恢复被删除表,因此官方对其还有另外一 个称谓: flashback drop 从 recycle bin中恢复一个被删除的表: select object_name,original_name from recyclebin; flashback table rates to before drop; flash table语句同时提示一个rename to 的子句,如果恢复在当前 schema中已经存在同名的表,建议再恢复时通过rename to ,为待恢复的表 指定一个新的表名,不然数据库会报ora-38312 错误 例如: DROP TABLE rates; CREATE TABLE rates_3 AS SELECT * FROM rates_1; 创建一个表 rates_3 , 它是完全 copy 表 rates_1 里的全部数据。
FLASHBACK TABLE rates_3 TO BEFORE DROP; ora-38312 :原始名称已被现有对象使用 FLASHBACK TABLE rates_3 TO BEFORE DROP RENAME TO rates_bak; 从 undo中恢复 某些时候,我们要处理的表并不是被意外删除,而是被反复修改过多次 希望能恢复到之前的某个时间点,通过前面的学习,你一定会说没问题啊, 借助 flashback query就可以没错, flashback query确实可以,但 flashback query 只是查询出记录,如果想做恢复还需要写出相应的insert 或 update,也许还需要相当多的where 条件做判断, 一个不慎, 可能恢复的 数据就是错误的老板又没在跟前站着,我们没必要在这个时刻用这种方式 展示我们娴熟的指法,因此,我们需要更高效更严谨更简便的方式: flashback table tbname to scn/timestamp 在 insert ,update,delete 之后,必须 commit,不然 undo表空间不会记录 这些信息的 用到的 sql : select to_char(sysdate, ’yyyy-mm-dd hh24:mi:ss ’)from dual;日 期/ 时间的格式化 [ 日期转换为字符串 ] alter table 表名 enable row movement; flashback table 表名 to timestamp to_timestamp( ‘2009-11-23 09:23:45 ’, ’yyyy-mm-dd hh24:mi:ss ’); select timestamp_to_scn(to_date(‘2009-12-29 05:52:45 ’, ’yyyy-mm-dd hh24:mi:ss ’)) from dual; 日期/ 时间的格式 化[ 字符串转换为日期 ] flashback table 表名 to scn 2378643; timestamp_to_scn :时间戳转化为系统改变号 scn_to_timestamp :系统改变号转化为时间戳闪回删除 flashback drop 回收站:实现闪回删除功能,需要使用Oracle 回收站( recycle bin) ,回 收站是所有被删除对象及其相依对象的逻辑存储容器,例如当一张表被删除 (drop)时,该表及其相依对象并不会马上被数据彻底删除,而是被存放到 回收站中。
机制:回收站将用户执行的drop 操作记录在一个系统表中,也就是被删除 的对象写到一个数据字典 中,如果确定不再需要该对象,可以使用purge 命 令对回收站进行清空 回收站中的对象会进行重命名,格式如下: BIN$globalUID$version BIN:表示 becyclebin globalUID :全局唯一的,二十四字符长的标识对象,该标识于原对象没有 任何关系 $version :数据库分配的版本号 回收站的管理: 回收站是否启用 Show parameter recyclebin 回收站的信息的查看 Show recyclebin (查看不到删除的表的索引) Select * from user_ recyclebin;(可以查看到删除的表的索引) Select * from dba_ recyclebin;(可以查看到删除的表的索引) 清除回收站的对象 Purge table 表名字 Purge table tablespace 表空间名 ; Purge table tablespace 表空间名 user 用户名; Purge index 索引名字 ; Purge recyclebin;全部清空使用闪回删除的前提条件: 必须是 DDL语言 不能是 sys 或是 dba权限的用户,否则查不出记录 例子: SQL>conn dwj/dwj; Connected. SQL>drop table t; Table dropped. SQL>show recyclebin; ORIGINAL NAME RECYCLEBIN NAME OBJECTTYPE DROPTIME ------------------- ------------------。
