SHOUG成员 – ORACLE ACS高级顾问罗敏
本文永久地址:https://www.askmac.cn/?p=16586
针对主机故障、网络故障、系统软件故障、存储介质故障、人为操作失误等各类故障,Oracle公司都提供了相应的技术方案。例如RAC、RMAN、Data Guard等,其中防范人为操作失误的最好技术就是10g之后的FLASHBACK技术。
可惜,在本人与国内众多行业的广大客户接触中,发现大部分客户DBA和开发人员都缺乏对FLASHBACK技术的深入、系统的研究和应用。问其原因,得到的回答往往是:“FLASHBACK技术很消耗资源,不敢打开”。其实,客户说的是Flashback Database技术,该技术需要打开Flashback Log,的确消耗一定资源。而实际上,FLASHBACK技术不是一个单一技术,而是一个技术簇:Flashback Database、Flashback Drop、Flashback Table、Flashback Query等,而上述很多技术是缺省就打开,我们可以直接使用的,并不额外消耗资源。
本章就将先从案例开始,然后系统介绍FLASHBACK技术家族,以及在测试、安全审计、容灾,以及与其它数据保护技术结合等方面的应用。
人为错误的防范
当年天塌下来一样的重大事故
本人在《品悟》一书的第一章,曾经描述过某大型银行一个重大事故:在2007年初该行一位工作人员在分析和测试一个性能问题时,错误地将生产环境当成测试环境,一个Delete操作将生产系统中一张核心业务表的大部分数据删除掉,导致业务被迫中断。后来通过传统的Imp工具,从前一天的逻辑备份数据中进行了恢复,同时通过业务人员几乎通宵达旦的的数据补录,才将当天数据全部恢复,确保了第二天业务的正常运行。当年该事故引起了该银行高层的高度重视,Oracle公司各服务部门也投入了大量技术力量。
如今回想起来,该银行不仅需要在操作流程规范和访问环境方面进行深入总结,而且在技术方面更是感慨良多。当年该系统还是9i版本,只能采取上述传统的逻辑恢复和数据补录方式,不仅导致恢复时间长,而且还不能保证数据完全被恢复。如果是10g以上版本,上述故障则可以通过如下类似命令进行恢复了:
/*+ 回退到5分钟之前 */
flashback table <表名> to timestamp(sysdate-1/288);
上述语句不仅简单,而且非常快速,并且能保证数据得到完整恢复。
这就是技术进步!这就是本章要讲解的主题:Flashback。
人为错误是最大单一因素
根据国内外IT行业的统计,在导致系统不可用的因素中,人为错误其实是最大的单一因素,占到40%以上,如下图所示。人为错误概率其实远远高于服务器硬件故障、网络故障、系统软件故障、存储介质故障等。
常见的人工操作失误包括:
- 错误地删除(Drop)了某张业务表
- 错误地清除(Truncate)了某张业务表的全部记录
- 错误地修改(Update)、插入(Insert)、删除(Delete)了某张业务表的记录
- 错误地运行了批处理程序,例如重复运行了批处理程序,导致业务数据紊乱
- … …
如何快速、稳妥地对人工操作失误导致的数据损失进行恢复,是涉及数据库系统数据安全性设计、日常运行维护等方面工作的重要挑战。
传统技术手段
为对人工操作失误导致的数据损失进行恢复,Oracle的传统技术示意图如下:
- exp/imp或Data Pump技术
通过Oracle传统的数据卸载(Exp)或10g Data Pump(Expd)技术,定期进行数据逻辑备份。在发生数据误错误时,通过数据装载(Imp)或10g Data Pump(Expd)技术,在表(table)、模式(schema)、数据库(database)等不同级别进行数据恢复。
- RMAN不完全恢复技术
如果发生大规模数据误操作,通过RMAN不完全恢复可将数据库恢复到指定的过去某个时间点、SCN号或日志序列号,达到在数据库级进行数据恢复的目的。
- 表空间按时间点恢复技术(Tablespace Point-in-Time Recovery,TSPITR)
Oracle提供了在表空间级按时间点进行RMAN数据恢复的技术,可使该表空间恢复到与数据库其它表空间不同的时间点。如果在发生较大规模数据损坏时,表空间按时间点恢复技术提供了更灵活的恢复手段。
传统数据恢复技术的缺点如下:
- 恢复时间长
传统数据恢复技术均存在恢复时间长的问题。例如RMAN不完全恢复技术,需要先将整个RMAN备份集进行restore操作,然后再通过联机日志和归档日志进行不完全的向前恢复(recover)。因此,恢复时间不仅取决于误操作的时间长短,更与整个数据库容量相关(restore时间)。即:
恢复时间 = 恢复误操作时间 + f(数据库容量)
- 恢复时效性差
传统数据恢复技术基于数据库备份技术,以及日志向前恢复技术。恢复数据的时效性取决于备份频度。例如,如果每天夜间进行exp操作,则最早只能恢复到前天夜间进行exp的时间点,无法恢复到发生错误前的更近时间点,如10分钟之前。
- 恢复灵活性差
RMAN不完全恢复是基于数据库级的,表空间按时间点恢复技术是基于表空间级的,Exp/Imp虽然可在表、模式、数据库等不同级别进行数据恢复,但恢复的时效性差。总之,传统数据恢复技术灵活性差,例如无法做到记录级恢复。
- 恢复操作复杂
传统数据恢复技术都比较复杂,无法做到一条命令或一键到位式的快速数据恢复。例如,表空间按时间点恢复技术(Tablespace Point-in-Time Recovery,TSPITR)就涉及RMAN环境配置、Auxiliary事例配置等复杂过程。
快速恢复数据的新技术:Flashback
Oracle 从10g开始提供了更丰富、快捷的数据恢复技术手段,即Flashback闪回技术。与传统的通过Exp/Imp、RMAN、表空间按时间点恢复(Tablespace Point-in-Time Recovery,TSPITR)等技术不同的是,Flashback不需要将整个数据库或大量数据文件从备份集中进行恢复,而是通过从UNDO、Flashback log、Flashback Data Archive,Flashback就可实现对过去数据的恢复。Flashback原理和示意图如下:
Flashback是一个技术簇,包括:
- Flashback Database
- Flashback Drop
- Flashback Table
- Flashback Query
- DBMS_FLASHBACK包
- Flashback Version Query
- Flashback Transaction Query
- 11g的Total-Recall
例如,当由于应用程序错误导致数据被损坏时,通过Flashback技术,可将指定表甚至整个数据库闪回到错误发生之前的状态,从而最大限度地达到保护数据的目的。
相比传统的数据恢复技术,Flashback闪回技术总体上具有如下优点:
- Flashback闪回技术更快捷
- Flashback可灵活地在数据库、表、记录级进行恢复
- Flashback闪回技术不需要复杂的实施步骤,实施命令更为简单
- Flashback不仅用于数据恢复,而且可用于安全审计、数据变更历史跟踪分析、应用测试、容灾系统建设等其它方面
14.2数据库级快速恢复
当数据库出现了如下大规模误操作情况下:
- 大范围错误地修改、删除和插入了业务数据,特别是主要业务数据。
- 错误地运行了批处理程序,例如错误或重复地运行了批处理程序,导致业务数据大范围紊乱。
- 错误地删除了用户。
如何进行快速恢复?
Flashback Database技术
Flashback Database技术可在数据库级快速恢复到过去某个时间点、SCN号或日志序列号,提供了类似录音机的回退键(REWIND)功能。以下就是其原理图:
- 启动Flashback Database技术
Flashback Database技术不是Oracle数据库缺省打开的。欲启动Flashback Database技术,需完成如下配置过程:
/*+ 配置flash recovery area */
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE = 4G;
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST = ‘/oracle/frec_area’;
/*+ 配置retention target参数 */
ALTER SYSTEM SET DB_FLASHBACK_RETENTION_TARGET=2880;
/*+ 启动Flashback Database */
ALTER DATABASE FLASHBACK ON;
- 采用Flashback Database技术
当发生上述大规模误操作时,以下是主要恢复流程和语句:
/*+ 查询当前SCN号 */
select current_scn from v$database;
/*+ 查询当前Log Sequence号 */
archive log list;
shutdown immediate;
startup mount;
/*+ 回退到过去某个时间点 */
flashback database to timestamp(to_date(‘2009.10.02 20:03:00′,’YYYY.MM.DD HH24:MI:SS’));
flashback database to timestamp(sysdate – 1/24);
/*+ 回退到过去某个SCN号 */
flashback database to scn 3775124;
/*+ 回退到过去某个Log Sequence号 */
flashback database to sequence=223 thread=1;
alter database open resetlogs;
- Flashback Database的监控
通过如下视图可监控Flashback Database的使用情况:
/*+ 是否打开Flashback Database功能? */
Select flashback_on from v$database;
/*+ 查询Flashback Database总体情况 */
Select * from v$flashback_database_log;
/*+ 每隔一小时,统计分析Flashback使用情况 */
select * from V$FLASHBACK_DATABASE_STAT
上述视图各字段的详细含义请参考Oracle联机文档的《Oracle® Database Reference 11g Release 2 (11.2)》
- Flashback Database的内部机制
不解渴的技术控一定想深入了解Flashback Database内部机制,以下就是Flashback Database内部机制示意图。
即Oracle为实现Flashback Database,新设计了Flashback Buffer缓存区,并通过新的后台进程RVWR将变化之前的数据块映像(before images of data blocks)定期写入Flashback Database Log中。
当数据库需要进行Flashback时,Oracle将按时间倒序方向读取Flashback Database Log进行恢复,而传统的Redo Log则是按时间正序方向读取并进行恢复的。
评估分析
同传统RMAN不完全恢复技术相比,Flashback Database技术具有如下显著优点:
- 恢复时间快
Flashback Database技术是基于10g新的Flashback Log,在进行数据库快速恢复时,不需要象传统RMAN技术一样先进行数据库的restore操作,再进行日志文件的向前恢复(Forward Recovery),从而耗费大量时间,而是直接通过Flashback Log回退到过去某个时间点或SCN号。因此,Flashback Database恢复时间仅取决于误操作的发生时间长短,与整个数据库容量无关。即:
恢复时间 = 恢复误操作时间 + f(数据库容量)
- 恢复时效性好
在10g中,Flashback Log存储在快速恢复区(Flash Recovery Area)中,只要快速恢复区容量足够大,并通过初始化参数DB_FLASHBACK_RETENTION_TARGET的设置,Flashback Database技术可快速回退到过去指定的时间或SCN号。因此,具有恢复时效性好的特点。
- 恢复操作简捷
Flashback Database不是数据库的缺省配置,需要进行一定的手工配置过程。但在需要进行数据库快速回退时,基本上通过上述的简单几条命令即可完成。
最佳实践经验
- Flashback Database是在数据库级进行整体快速回退,无法针对单独的表和记录进行快速回退。即Flashback Database操作之后,数据库中所有对象均回退到过去某个时间点状态。
- 快速恢复区(Flash Recovery Area)和初始化参数DB_FLASHBACK_RETENTION_TARGET需要进行合理配置,从而保证在资源消耗和恢复时间长度方面进行综合平衡。
- Flashback Database在某些情况下不能进行快速恢复。例如控制文件进行restore或重新创建之后;表空间被删除之后;数据文件被回缩(shrink)之后;Flashback Database不能恢复到resetlogs操作之前。
错误删除表的快速恢复
用户错误地删除(Drop)掉一张表,如何进行快速恢复?
Flashback Drop技术
- Flashback Drop技术概述
通过10g新的Flashback Drop技术,可快速恢复被用户误删除(Drop)的表。与传统drop table语句不同的是,从10g开始Oracle的drop table操作并不是立即将该表删除掉,而是进入了Recycle Bin,Recycle Bin位于与原表相同的表空间。尽管DBA_FREE_SPACE视图显示该表的空间被释放了,但实际上该表的空间并没有立即释放。
保存在Recycle Bin被删除的表,其表名和相关对象、限制等名称都将被更名,以免之后创建同名表时引起名称冲突。
通过如下一些视图可显示Recycle Bin中的内容:
/*+ 查询所有用户的Recycle Bin内容 */
Select * from dba_recyclebin;
/*+ 查询当前用户的Recycle Bin内容 */
SELECT original_name, object_name,
type, ts_name, droptime, related, space
FROM user_recyclebin
WHERE can_undrop = ‘YES’;
/*+ 查询当前用户可恢复的Recycle Bin内容 */
Show recyclebin;
- 快速恢复被删除表
通过如下命令,可快速恢复被删除表:
flashback table <table_name> to before drop [rename to <new_name>];
其中<table_name>可是原来表名,也可是保存在Recycle Bin中系统产生的名称。
当指定原表被多次删除过,即Recycle Bin中有多份同名表时,Oracle采取后进先出(LIFO,Last In First Out)算法,将最新被删除的该表先恢复。如果您需要恢复到更老版本时,可指定<table_name>为系统产生的名称,或者多做几次Flashback table操作,直至您需要的版本。
如果恢复过程中出现重名了,除非使用rename to <new_name>,否则系统回报错。
另外需注意的是,Flashback table操作只将表名恢复成原来的表名,相关的索引、触发器、限制等将使用在Recycle Bin中系统产生的名称。因此,为恢复原来可读性强的名称,建议在Flashback table之前最好先查询Recycle Bin和其它视图,以便进行相应的更名操作。
- Oracle如何进行Recycle Bin空间管理?
如上所述,Recycle Bin位于与原表相同的表空间。那么,Oracle如何进行Recycle Bin空间管理呢?一种方式是通过手工执行Purge操作,另一种方式是按如下原则进行自动化管理:
- 假设新建一张表,Oracle首先从Recycle Bin之外的空闲空间为该表分配空间。
- 如果空闲空间不够,Oracle通过先入先出(FIFO)策略,将Recycle Bin中的部分表彻底删除,为该新表分配空间。
- 如果空间还不够,假设该表空间的数据文件是自动扩展的,Oracle则通过扩展数据文件,分配更多空间。
评估分析
同传统恢复技术相比,特别是Exp/Imp技术相比,Flashback Drop技术具有如下显著优点:
- 恢复时间快
如果使用传统Imp技术进行恢复,需要将该表记录全部重新加载(Insert操作),并且重新分配空间。而Flashback Drop技术是基于Recycle Bin技术,即被删除表的数据依然存储在与该表相同表空间的Recycle Bin区域中,Flashback Drop只是将Recycle Bin区域中被删除表的记录进行恢复,不需要Insert操作,更不需要重新分配空间,因此恢复时间非常快。
- 恢复时效性好
传统Imp技术只能将该表恢复到最近一次Exp的时间点,将丢失最近一次Exp时间点到错误drop之间的变化数据。而Flashback Drop则是直接恢复到错误drop之前的数据状态,因此恢复的时效性非常好。
- 恢复操作简捷
如上所见,Flashback Drop基本上通过一条命令即可快速恢复被误删除的表。
最佳实践经验
- Flashback Drop是10g数据库的缺省配置。即drop table操作,被删除的表都会进入recycle bin。因此,对于需要一次性正常删除表的操作,可在drop table语句中增加purge选项,例如:
Drop table <table_name> purge;
- 通常情况下,当表空间的空间不够时,Oracle会自动进行recycle bin的空间释放。但建议DBA能定期通过各种purge命令(purge table, purge tablespace, purge [user_|dba_]recylebin等)进行recycle bin的手工空间释放。
- Flashback Drop只针对非SYSTEM表空间的表、存储在Local管理表空间的表,以及没有使用FGA和VPD技术的表。
- Flashback Drop不能恢复与被删除表相关的Bitmap-join索引、物化视图日志以及为保持数据完整性的参考限制(Referential integrity constraints)。
表级快速恢复
如果用户错误地进行了各种DML(Insert,Delete,Update等)操作时,如何在表级进行快速恢复?
Flashback Table技术
通过10g/11g的Flashback Table技术,可针对单表或多表快速恢复错误DML操作的数据,以下是主要恢复流程和语句:
/*+ 查询当前SCN号 */
select current_scn from v$database;
alter table employees enable row movement;
alter table departments enable row movement;
/*+ 回退到一个小时之前 */
flashback table employees to timestamp(sysdate-1/24);
/*+ 回退到过去某个SCN号 */
flashback table employees to scn 3775124;
/*+ 同时回退2张表到5分钟之前 */
flashback table employees,departments to timestamp(sysdate-1/288);
Flashback Table在闪回期间,触发器将不会启动,除非在Flashback Table语句中增加了“enable triggers”短语。例如:
/*+ 同时回退2张表到5分钟之前 */
flashback table employees to scn 3775124 enable triggers;
评估分析
同传统恢复技术相比,特别是Exp/Imp技术相比,Flashback table技术具有如下显著优点:
- 恢复时间快
如果使用传统Imp技术进行恢复,需要先将该表删除,再将全部记录重新加载(Insert操作),并且重新分配空间。而Flashback Table技术是基于UNDO技术,只需将错误的DML操作进行回退,不需要全部记录重新加载(Insert操作),重新分配空间也较少,因此恢复时间更快。
- 恢复时效性好
传统Imp技术只能将该表恢复到最近一次Exp的时间点,将丢失最近一次Exp时间点到错误DML之间的变化数据。而Flashback Table则是直接恢复到错误DML之前的数据状态,因此恢复的时效性非常好。
- 恢复操作简捷
如上所见,Flashback Table基本上通过一条命令即可快速恢复被错误DML操作的表。
- 高可用性良好
由于Flashback Table操作实际上也为一个普通事务。因此,Flashback Table技术还有一个显著特点是:可在数据库可访问状态下进行。即在数据库处于打开状态下,并且所有表包括正在进行Flashback Table的表都处于可访问状态。这样,数据库的高可用性得到极大保障。
最佳实践经验
- 由于Flashback Table操作为一个普通事务,因此在操作期间,会产生DML排它锁。
- 统计信息不会被恢复。建议及时更新被恢复表的统计信息。
- Flashback Table操作不支持DDL操作,除非DDL操作只是修改了该表的存储属性。
- Flashback Table操作会自动维护索引,并保证数据一致性。
- Flashback Table不支持系统表、分布式数据库环境下的远程表。
14.5记录级快速恢复
如果用户错误地进行了各种DML(Insert,Delete,Update等)操作时,如何在记录级进行快速恢复?
记录级快速恢复
通过10g/11g的如下两种Flashback技术,可在记录级进行快速恢复:
- Flashback Query
10g/11g的Flashback Query技术可使用户查询过去时间点或过去SCN号的记录数据。例如,假设DBA在10:00发现记录last_name = ‘Chung’被错误删除,但知道9:30时记录正常。以下是在记录级进行恢复的流程和语句:
/*+ 查询9:30时last_name = ‘Chung’的记录 */
SELECT * FROM employees AS OF TIMESTAMP
TO_TIMESTAMP(‘2009-10-04 09:30:00’, ‘YYYY-MM-DD HH:MI:SS’)
WHERE last_name = ‘Chung’;
/*+ 恢复last_name = ‘Chung’的记录 */
INSERT INTO employees
(SELECT * FROM employees AS OF TIMESTAMP
TO_TIMESTAMP(‘2009-10-04 09:30:00’, ‘YYYY-MM-DD HH:MI:SS’)
WHERE last_name = ‘Chung’);
- DBMS_FLASHBACK包
10g/11g的DBMS_FLASHBACK包具有与Flashback Query相似的功能。区别在于:Flashback Query需要在SQL语句中增加AS OF短语,用于查询过去某个时间点或过去SCN号状态的记录状况,而DBMS_FLASHBACK包可通过DBMS_FLASHBACK.ENABLE_AT_TIME或DBMS_FLASHBACK.ENABLE_AT_SYSTEM_CHANGE_NUMBER的调用,将数据库设置为过去某个时间点或过去SCN号,而现有SQL语句不用进行任何改动,就可直接查询指定过去时间点或SCN号的记录状况。
例如,通过DBMS_FLASHBACK包的使用,上述场景的恢复流程如下:
/*+ 将数据库设置为9:30的状态 */
EXEC dbms_flashback.enable_at_time(TO_TIMESTAMP(‘2009-10-04 09:30:00’, ‘YYYY-MM-DD HH:MI:SS’));
/*+ 为如下语句open cursor C1 */
SELECT * FROM employees
WHERE last_name = ‘Chung’;
Fetch C1 into …
/*+ 将数据库恢复为当前状态*/
EXECUTE dbms_flashback.disable;
/*+ 将C1中的记录插入employees */
INSERT INTO employees
(c1中的记录…);
上述脚本中,详细的Cursor使用过程略。
评估分析
同传统恢复技术相比,特别是Exp/Imp技术相比,Flashback Query和DBMS_FLASHBACK技术具有如下显著优点:
- 恢复时间快
如果使用传统imp技术进行恢复,需要先将该表删除,再将全部记录重新加载(Insert操作),并且重新分配空间。而Flashback Query和DBMS_FLASHBACK技术基于UNDO技术,可将过去时间点或SCN号的记录从UNDO表空间取回,并重新插入到表中即可,因此恢复时间非常快。
- 恢复时效性好
传统imp技术只能将该表恢复到最近一次exp的时间点,将丢失最近一次exp时间点到错误DML之间的变化数据。而只要UNDO表空间设置合理,Flashback Query和DBMS_FLASHBACK技术可直接恢复到错误DML之前的数据状态,因此恢复的时效性非常好。
- 恢复操作简捷
如上所见,Flashback Query和DBMS_FLASHBACK技术基本上通过简单命令即可快速恢复被错误DML操作的记录。
最佳实践经验
- Flashback Query一般用于少量记录的恢复,而DBMS_FLASHBACK则用于大量表的大量记录的恢复。
- Flashback Query和DBMS_FLASHBACK可用于当前数据与历史数据之间的对比分析。
- 可简化应用设计。例如不需要临时表存储历史数据,直接通过Flashback Query和DBMS_FLASHBACK查询历史数据。
- 可通过Flashback Query和DBMS_FLASHBACK技术,运行历史数据报表生成等批处理应用。
14.6 Flashback在应用测试方面运用
“我们要升级到10g!”
若干年前一次在给某银行客户介绍10g新特性中讲到Flashback技术时,发现在座的客户有不少是测试人员,于是开始换位思考,从测试人员角度进行叙述了:
“大家从事测试工作,一定会为每一轮的测试数据准备而耗费大量时间吧?甚至数据准备时间还超过真正的测试时间吧?”
当我绘声绘色地讲解完Flashback在应用测试方面的运用之后,突然听到客户测试组的负责人大声嚷嚷:“我们要升级到10g!”—- 弄得在场的客户领导一阵尴尬,呵呵。在国企,特别是国有银行企业,升级数据库哪是那么简单的事情。
罗老师凭什么本事忽悠得客户如此热血沸腾呢?且看下面内容。
传统测试过程
在传统的应用软件测试中,包括UAT测试、SIT测试、回归测试,特别是应用压力测试中,经常会遇到在一轮测试之后,如何进行数据还原的问题。通常情况下,传统模式的处理流程图如下:
- 测试环境准备,包括基准测试数据准备。
- 运行测试案例之前,通过Exp或RMAN的backup技术,先将基准测试数据进行备份。
- 开始进行各种应用测试。
- 为进行下一轮测试,特别是在回归测试和压力测试中,需要恢复基准数据。为此,需要先对数据库系统进行清理,再通过Imp或RMAN的restore、recover技术进行基准测试数据恢复。
- 开始下一轮测试。
可见,在传统模式下,大量时间和资源花费在基准测试数据的备份、清理和恢复之中,极大地影响了测试工作本身的效率。
如何通过Flashback技术,有效提高各种应用测试的效率?
Flashback Database技术的另类运用
通过运用Flashback Database技术,采用如下流程,可显著提高各种应用测试的效率:
- 测试环境准备。包括基准测试数据准备。
- 运行测试案例之前,记录测试开始时间,系统SCN号或日志序列号
- 开始进行各种应用测试。
- 通过Flashback Database技术,将数据库整体快速回退到测试开始之间的时间, SCN号或日志序列号。
- 开始下一轮测试。
Flashback Database的详细流程和主要操作请见“数据库级的快速恢复”。
评估分析
在应用测试中,充分运用Flashback Database技术,最大的好处是大大提高了测试数据准备和恢复时间。一方面,不再需要进行基准测试数据备份和清理工作,另一方面,Flashback Database的回退效率由于与数据库容量无关,其效率远远高于Imp和RMAN的Restore、Recover操作。
这样,测试和应用开发人员可将主要时间和资源用于应用软件测试工作本身,将大大提高测试工作效率。
于是,就有了上述让客户测试人员热血沸腾的场面。呵呵。
14.7 Flashback在安全审计方面应用
需求分析
在数据库安全性需求日益增强的今天,DBA经常会面临如何快速跟踪分析关键业务数据变更的历史情况;如何进行安全审计;以及在发生误操作情况下,如何进行准确的快速数据恢复等迫切需求。
运用过程
Oracle 10g/11g的Flashback Versions Query和Flashback Transaction Query特性的综合运用,很好地满足了上述需求。
- Flashback Versions Query
通过Flashback Versions Query特性,DBA可查询某个表、某条记录在指定时间段或指定SCN号之间的数据变更情况,例如:
/*+ 查询最近5分钟对employees表进行DML操作的情况 */
select versions_xid,versions_startscn, versions_endscn,versions_operation
from employees
versions between timestamp (sysdate – 1/288) and sysdate
- Flashback Transaction Query
通过Flashback Transaction Query特性,利用上述Flashback Versions Query返回的xid,例如0200200038020000, DBA可进一步查询相关的事务详细情况,特别是执行回退的UNDO_SQL语句:
/*+ 查询上述事务详细情况,特别是UNDO_SQL语句 */
select operation,undo_sql
from flashback_transaction_query
where xid=HEXTORAW(‘0200200038020000’)
and table_name=’EMPLOYEES’
OPERATION UNDO_SQL
——— ————————————————————–
DELETE insert into “JFV”.”EMPLOYEES_DEMO”(“EMPNO”,”EMPNAME”,”SALARY”) values (‘111′,’Mike’,’655′);
INSERT delete from “JFV”.”DEPARTMENTS_DEMO” where ROWID = ‘AAAP95AAGAAAAAlAAB’;
UPDATE update “JFV”.”EMPLOYEES_DEMO” set “SALARY” = ‘555‘ where ROWID = ‘AAAP93AAGAAAAAVAAA’;
这样,上述两个Flashback特性的综合使用,不仅可以对指定表、指定记录进行历史数据变更进行统计分析,以及安全审计工作,而且在发生误操作情况下,可直接分析出单个可回退的UNDO_SQL语句,避免进行整个表的回退。
评估分析
Oracle具有多种分析数据变更的历史情况、进行安全审计,以及进行数据恢复的技术,例如LogMiner就是典型的基于日志分析、提供上述功能的技术。相比LogMiner等技术,Flashback Versions Query和Flashback Transaction Query是基于UNDO技术,不需要象LogMiner一样,逐个顺序地分析日志文件,因此分析和恢复效率更快捷。而LogMiner则适合于时间更长远、更系统的分析和恢复工作。
最佳实践经验
- Flashback Versions Query不支持外部表、系统临时表、系统内部表和视图。
- Flashback Versions Query不支持改变表结构的DDL操作。
- Flashback Versions Query将过滤掉shrink操作。
- 当表、用户被删除之后,Flashback Transaction Query将不返回这些表名和用户名,而是返回相应的系统内部表编号和用户编号。
- Flashback Transaction Query技术运用时,最好使数据库运行在supplemental log data方式下,保证Oracle提供更全面的日志信息,例如chained row信息等。
Alter database add supplemental log data;
14.8 Flashback在容灾方面运用
需求分析
作为Oracle容灾技术和最高级别的数据保护方案,Data Guard提供了一种管理、监测和自动运行的体系结构,用于创建、维护和管理一个或多个备用数据库,从而为各种自然灾害、人为错误、系统坏块(Corruption)等提供完备的数据保护能力。
在Data Guard环境中,用户经常会提出如下两种需求:
- 如何提高备用数据库利用率?
除Data Guard正常容灾功能之外,是否能打开备用数据库,进行各种开发、测试、报表等工作,从而充分提高备用数据库利用率?
- 如何快速恢复生产系统?
当灾难发生时,灾备系统将被故障切换(Failover)为新的生产系统。此时,假设原有生产系统服务器能恢复工作,且大量数据并未丢失,是否能不重新部署原生产系统数据,而通过某种技术快速恢复原生产系统数据,使之成为新生产系统的灾备系统,并进一步希望通过角色切换(Switchover)功能,恢复原生产系统的生产角色?
Flashback技术运用过程
在10g/11g中,Flashback技术与Data Guard技术进行了完美的结合,能充分满足上述两种需求:
- 可使物理备用数据库以读写方式打开
在Data Guard中,可以将物理备用数据库以读写方式打开,进行各种开发、测试、报表等用途,再利用Flashback Database技术,将数据库回退到读写打开的时间点,恢复物理备份数据库的灾备功能。以下是这种方案的示意图:
其主要流程包括:
- 在物理备用数据库中先创建一个Restore Point。
- 将物理备用数据库以读写方式打开。此时物理备用数据库可以进行各种开发、测试、报表等读写操作。同时物理备用数据库继续接收生产系统传输的日志文件,但没有应用(Apply)。即物理备用数据库与生产系统数据库处于数据不同步状态。
- 通过Flashback Database技术,将物理备用数据库回退到Restore Point时间点。
- 此时,物理备用数据库开始通过日志应用(Apply),重新与生产系统数据库进行数据同步操作,俗称“追数据”。
- 快速恢复生产系统
为恢复发生故障的原生产系统,传统做法是重新通过RMAN方式,将新生产系统的数据恢复到原生产系统,并建立为新容灾系统。此方法因数据量庞大,而导致新容灾系统搭建时间的漫长。而通过Flashback Database技术,则可快速恢复生产系统,其主要流程如下:
- 通过Flashback Database技术,将原生产系统数据快速退回到灾难发生之前的状态。
- 通过传输和应用新生产系统的日志,将原生产系统的数据与新生产系统数据同步,快速建立新容灾系统。
- 通过Switchover快速恢复原生产系统。
上述详细过程,可参见《Oracle Data Guard Administrator》等文档。
评估分析
10g/11g中Flashback技术与Data Guard技术的完美结合,可使用户得到如下益处:
- 充分提高备用数据库利用率
通过周期性地将物理备用数据库以读写方式打开,并通过Flashback Database进行回退和日志同步,既可提供各种开发、测试、报表等功能,又可定期保持备用数据库与生产数据库的数据同步。
- 快速恢复生产系统
通过Flashback Database技术,可避免恢复生产系统时的数据重新加载,有效提高了生产系统的恢复效率。
最佳实践经验
- Flashback Database只支持物理备用数据库,而不支持逻辑备用数据库。
- 将物理备用数据库以读写方式打开的方式,一般适合于数据同步时效性不高的应用。例如,上午和下午以读写方式打开,提供开发、测试、报表等功能,而中午和夜间恢复到日志同步状态。
- 如果数据同步时效性要求非常高,则10g的物理备用数据库不适合。可考虑11g的Active Data Guard技术或10g的逻辑备用数据库。
14.9 Flashback与传统数据恢复技术综合运用
Flashback与RMAN
Flashback主要针对人为错误进行快速恢复,并运用在应用测试、安全审计和Data Guard环境等领域,而且由于大部分Flashback技术是基于UNDO技术,因此恢复的时间有限,一般用于DBA在错误发生第一时间情况下的快速恢复。
而作为Oracle最传统、最经典的数据库物理备份恢复技术,RMAN则是主要用于防范存储介质的物理故障,以及更长远时间的恢复操作。同样地,RMAN也提供了丰富的备份和恢复技术内容。例如各种全库、增量备份策略和技术,特别是10g的快速增量技术(Fast Incremental Backup)、快速恢复区(Fast Recovery Area)、新的备份压缩技术等,以及在全库、表空间、数据文件、数据块、控制文件、SPFILE等不同数据级别和数据类型的恢复技术等。
总之,Flashback与RMAN侧重点不同,是互为补充、相辅相成的关系。在重要生产系统中,Flashback与RMAN都应得到充分应用。
Flashback与Exp/Imp(Data Pump)
Exp/Imp(Data Pump)除具有全库、模式、表等不同级别的数据恢复功能之外,还可广泛运用在数据归档、数据迁移、数据库升级等领域。
同样地,Flashback与Exp/Imp(Data Pump)也是侧重点不同,是互为补充、相辅相成的关系。用户可根据实际需要的不同,有针对性地运用Flashback和Exp/Imp(Data Pump)技术。
11g新技术:Total Recall
需求分析
在现代商业社会,企业需要保存大量交易历史数据,用于市场和客户行为分析,从而全面提升自身竞争力。同时,企业也面临更全面的安全合规性检查需求,需要加强对历史数据的安全审计。
在上述Flashback技术中,主要都是基于UNDO技术和Flashback Recovery Area技术,并不能充分满足企业长久甚至永久保持和利用历史记录的目的,而且企业对历史数据的利用和管理应尽量做到对现有应用程序透明,并对现有生产系统应用影响尽可能少。
Oracle 11g的Total Recall技术很好地满足了上述需求。
11g:Total Recall技术概述
Oracle 11g的Total Recall技术实际上基于新的Flashback Data Archive(FDA)技术。以下是FDA技术原理和特性介绍:
- Flashback Data Archive技术原理
在Oracle 11g中, Flashback Data Archive为用于保存历史数据的一组表空间。例如,上图针对不同的保存期限,分别设计了1年、2年、5年的FDA区域。11g在表级启动FDA功能,通过新后台进程FBDA,自动将具有FDA特性表的历史记录由UNDO表空间写入FDA区域。
- Flashback Data Archive主要流程
- 创建FDA区域
- 为指定表启动FDA功能
- 查询历史记录
例如:
/*+ 创建保存期限为5年,容量为10g的FDA */
CREATE FLASHBACK ARCHIVE fla1
TABLESPACE tbs1 QUOTA 10G RETENTION 5 YEAR;
/*+ 为inventory启动FDA功能 */
ALTER TABLE inventory FLASHBACK ARCHIVE fla1;
/*+ 查询inventory表的历史记录 */
SELECT product_number, product_name, count
FROM inventory AS OF TIMESTAMP TO_TIMESTAMP
(‘2007-01-01 00:00:00’, ‘YYYY-MM-DD HH24:MI:SS’);
- Flashback Data Archive主要特性
- FDA按照定义的保存期限(Retention)自动进行历史数据的清理,无需人工操作。
- FDA对现有生产系统的开销非常小。
- FDA可以压缩形式进行存储,降低历史数据的存储开销。
- FDA可进行扩容、调整保存期限等维护操作。
- FDA不支持导致表结构变化的DDL操作,也不支持对表的Drop和Truncate操作。
Flashback技术综合对比
典型应用场景
以下通过若干典型故障场景中Flashback技术的运用,对多种Flashback技术进行一番总结。
恢复级别 | 典型故障场景 | Flashback技术 |
数据库级 | 错误删除用户 | Flashback Database |
错误Truncate表 | Flashback Database | |
错误运行批处理导致部分数据损坏 | Flashback Database | |
表级 | 错误删除表 | Flashback Drop |
错误地书写Where语句,导致记录被误修改 | Flashback Table | |
将当前数据与历史数据进行比较分析 | Flashback Query | |
记录级 | 错误运行批处理,并且不知道哪些表被损坏 | Flashback Query |
更全面的对比分析
以下是各种Flashback技术更全面、更深入的对比:
Flashback技术 | 主要目的 | 级别 | 配置方式 | 技术原理 | 恢复期限 | 适应场景 |
Flashback Database | 快速恢复数据库 | 数据库级 | 基于存储在Flashback Recovery Area中的 Flashback log | 取决于Flashback Recovery Area容量和db_flashback_retention_target参数 | l 大规模数据误操作
l 应用测试 l 与Data Guard综合使用 |
|
Flashback Table | 整表恢复到指定时间 | 表级 | 缺省 | 基于Undo技术 | 取决于UNDO表空间大小,UNDO_retention参数 | l 各种DML错误的表级恢复
|
Flashback Query/ DBMS_FLASHBACK包 | 查询过去时间点的记录 | 记录级 | 缺省 | 基于Undo技术 | 取决于UNDO表空间大小,UNDO_retention参数 | l 恢复错误记录
l 对历史记录进行分析、统计 |
Flashback Drop | 快速恢复Drop Table操作 | 表级 | 缺省 | Recyclebin(该表所在的表空间) | 自动管理(FIFO算法)。由表空间的空闲空间确定 | l 错误Drop 表操作 |
Flashback Versions Query | 访问事务历史情况 | 记录级 | 缺省 | 基于Undo技术 | 取决于UNDO表空间大小,UNDO_retention参数 | l 访问事务历史情况
l 安全审计 |
Flashback Transaction Query | 查询UNDO语句 | 记录级 | 缺省 | 基于Undo技术 | 取决于UNDO表空间大小,UNDO_retention参数 | l 查询事务详细情况
l 查询UNDO_SQL语句 |
11g Total-Recall(Flashback Data Archive) | 历史数据存储和利用 | 表级 | 需要配置 | 基于FDA区域 | 取决于FDA区域表空间大小 | l 历史数据长久存储
l 对历史数据的分析、统计 l 安全审计 |
注意:
- 大部分Flashback技术是数据库缺省配置的,可在日常管理中直接使用。而Flashback Database、Flashback Data Archive则需要配置。
- 大部分Flashback技术是基于UNDO技术,因此应全面考虑UNDO表空间大小、UNDO_retention参数的配置,以及确保UNDO表空间处于RETENTION GURANTEE状态。例如可根据需要和资源情况,将UNDO_retention设置到数天,并扩大UNDO表空间,从而保障能恢复到过去更长时间。
本章参考资料及进一步读物
本章参考资料及进一步读物:
序号 | 资料类别 | 资料名称 | 资料概述 |
1. | Oracle联机文档 | 《Oracle Administrator’s Guide》第20章之“Recovering Tables Using Oracle Flashback Table”小节 | 该节专门讲述了如何通过Flashback Table技术对表的意外操作进行恢复。 |
2. | Oracle联机文档 | 《Oracle® Database Backup and Recovery User’s Guide》相关章节 | 作为Oracle联机文档中专门讲述数据库备份恢复的专著,太多篇幅在讲述各种Flashback技术:Flashback Database、Flashback Table、Flashback Drop… … |
3. | Oracle联机文档 | 《Oracle® Database Advanced Application Developer’s Guide》第12章“Using Oracle Flashback Technology” | 如何在应用层面实现Flashback技术?本书的本章做了专题描述。 |
4. | Oracle大学教材 | 《Oracle Database 10g:New Features for Administrator 》之13课“Flashback Any Error” | 从10g开始全面介绍Flashback技术的Oracle大学教材。 |
5. | Oracle大学教材 | 《Oracle Database 11g:New Features for Administrator 》之7课“Using Flashback” | Oracle大学11g教材中讲述Flashback新特性的部分。 |
6. | My Oracle Support | 《Master Note For Oracle Flashback Technologies (Doc ID 1138253.1)》 | Metalink中有关Flashback技术的资料汇集地。FRA、Flashback Database、Flashback Table、Flashback Drop… …应有尽有。 |
7. | My Oracle Support | 《11g feature: Flashback Data Archive Guide. (Doc ID 470199.1)》 | Metalink中介绍11g新特性FDA技术的专门文章。 |
Comment