论文部分内容阅读
摘要:阐述了Oracle数据库最新推出的闪回在实际环境中的应用与实践,通过闪回特性工作原理的基本描述以及实际范例,使读者对利用闪回实现数据快速恢复有更深入的了解。
关键词:Oracle;闪回;数据恢复
中图分类号:TP393.13 文献标识码:A文章编号:1007-9599(2011)07-0000-02
Oracle Flashback Features and Application
Zhou Wenqiong1,Wang Leqiu2,Deng Jie1
(1.Guangdong Institude of Science and Technology,Zhuhai519080,China;2.Sun Yat-sen University,Zhuhai519080,China)
Abstract:Expound the application and practice of the Oracle database latestflashback in the actual environment.Flashback feature works through the basic description and the practical examples,so readers better understanding rapid data recovery using Oracle Flashback.
Keywords:Oracle;Flashback;Data recovery
一、引言
Oracle数据库的日常维护工作中,数据毁损是相当严重的问题,一般来说,数据毁损可分为下列两种情况:
硬件故障:例如硬盘故障导致数据文件、重做日志文件的毁损。
人为错误:操作员不小心删除某笔重要数据,或是DBA误删了某个表。
硬件故障较易解决,如果某个硬盘毁损,只需立刻切换至备援硬盘,然后执行数据恢复程序即可;然而,人为错误在数据库系统中的比率居高不下,是导致系统停机的最主要原因。随着闪回技术在Oracle中的完善,用户能够更便捷、更准确地处理人为错误导致的数据毁损。
二、闪回基础
使用Windows的用户对回收站不会陌生,它给了我们一剂“后悔药”。为了使Oracle数据库从任何逻辑误操作中迅速地恢复,Oracle推出了闪回技术,该技术首先以闪回查询出现在Oracle 9i版本中,后来Oracle在10g中对该技术进行了全面扩展,提供了闪回数据库、闪回删除、闪回表、闪回版本查询等功能,在11g中,Oracle对该技术进行改进和增强,增加了闪回数据归档功能[1]。
(一)回滚表空间
在oracle数据库的体系结构中,回滚段是一个重要的部件。当表中的数据被修改时候,回滚段主要用来保存数据修改前的值,以便实现事务回滚、事务恢复及读一致性的功能。对于数据库表中给定的数据,每被改变一次,就产生一个新的版本。闪回时间浏览和闪回表,都是基于回滚表空间中保留的所有数据的变化历史。闪回特性有以下几个初始化参数需要设置:
UNDO_TABLESPACE:指定要激活的回滚表空间;
UNDO_MANAGEMENT:指定回滚表空问的管理方式,应设为AUTO;
UNDO_RETENTION:以秒为单位,指定回滚信息保留的时间长度。
(二)闪回恢复区
闪回恢复区是oracle 10g引进的实时在线存储区域,该区域存储所有与恢复相关文件。闪回恢复区包含以下几种文件:1.控制文件;2.归档日志文件;3.闪回日志;4.由RMAN产生的控制文件和服务端参数文件的自动备份;5.RMAN备份集;6.数据文件拷贝。闪回恢复区自动对所有与恢复相关的文件进行管理,能自动删除没用的文件,以及已经备份到磁带上的文件。闪回日志是由RVWR后台进程写入闪回恢复区的,它记录了变化的数据库物理块的前映像,因而,其数据规模只与错误发生的时间有关系。正确使用闪回数据库,必须对相关的初始化参数做正确的设置:
db_recovery_file_dest_size:指定闪回恢复区大小;
db_recovery_file_dest:指定闪回恢复区位置[2]。
(三)回收站
与windows操作系统的回收站有类似之处,oracle回收站在删除操作和彻底从存储介质上清空数据之问提供了一个缓冲。在这个回收站下面,被删除对象的实际数据仍然占用删除之前的空问,直到出现以下三种情况:1.手工清理回收站;2.用户空间限额用完;3.表空间需要扩展[3]。
三、闪回应用
(一)闪回表
Oracle 11g的闪回表将改变当前表及附属对象,使其一起闪回到以前的某个时间点上。下面我们模拟维护人员误删除某张表数据,然后进行数据恢复。
(1)创建测试表
SQL>conn scott/tiger
SQL>create table ftest AS SELECT EMPNO,ENAME FROM EMP;
(2)模拟误删除测试表数据,并提交
SQL>Delete from ftest;
SQL>commit;
在下面的操作中,我们将进行数据恢复。
(3)对表启用行移动
SQL> alter table ftest enable row movement;
(4)找到需要回退的时点
SQL> SELECT count(*)FROM ftest AS OF TIMESTAMP to_timestamp('年-月-日 小时:分:秒','yyyy-mm-dd hh24:mi:ss');
找到结果为14的时点。
(5)闪回表
SQL> flashback table ftest to timestamp to_timestamp('年-月-日 小时:分:秒','yyyy-mm-dd hh24:mi:ss');
(二)闪回删除
Flashback Drop特性提供一个类似回收站的功能,用来恢复不小心被删除的表。如果这个被删除的表需要进行恢复,就可利用Flashback Drop功能。
下面我们模拟维护人员误删除某张表,使用闪回删除进行恢复。
(1)删除测试表
SQL> drop table ftest;
(2)对被删除表进行恢复
SQL>flashback table ftest to before drop;
(三)闪回数据库
闪回数据库特性可让数据库前滚到当前的前一个时间点或者SCN。重要的是,执行这种复原操作所花费的时间与只和需要还原的交易次数有关[4]。
下面我们将数据库恢复到2011年02月1日00:00:00
SQL>flashback database to timestamp to_timestamp('2011-02-01 00:00:00','yyyy-mm-dd hh24:mi:ss');
(四)闪回时间浏览
闪回时间浏览包括:闪回查询、闪回版本查询和闪回事务处理查询。闪回查询是在查询语句后跟上AS OF从句,就可实现查询在过去某个时问点的数据;闪回版本查询通常使用VERSIONS BETWEEN语句在两个SCN或时间戳间进行查询;闪回事务处理查询是从事务的级别来对数据进行分析。
例如,数据表在早上七点是正常的,在晚上八点发现异常,利用闪回版本查询就可以获得在两个时点间的所有操作记录和事务ID,再利用事务ID获得回滚事务所需的UNDO语句。
(1)模拟维护人员误删除某行数据,并提交
SQL>delete from ftest where rownum<2;
SQL>commit;
(2)查询SCN
SQL>SELECT versions_xid,ID FROM ftest
VERSIONS BETWEEN TIMESTAMP minvalue and maxvalue;
VERSIONS_XIDID
-----------------------
0200000043010001
(3)利用闪回事务查询提供的事务标识XID获取回滚事务所需的UNDO语句:
SQL>SELECT UNDO_SQL FROM FLASHBACK_TRANSACTION_QUERY WHERE XID='020000004301000';
四、结束语
以上探讨了人为错误导致数据库逻辑损坏的恢复技术,可以发现闪回是一个非常有用的功能。闪回技术是恢复技术的革新性进步,与不完全恢复相比,闪回技术具有有以下优点:(1)闪回技术的速度比较快;(2)闪回命令易于操作;(3)在线恢复减少计划外停机;(4)可以进行部分数据恢复[5]。
参考文献:
[1](美)Sam R.Alapati,Charles Kim.Oracle数据库管理艺术11g新特性[M].北京:人民邮电出版社,2009.
[2]Bob Bryla,Biju Thomas.Oracle Database 10G New Features For Administrators Study Guide[M].Burr Ridge:McGraw-Hill,2005:351-398.
[3]Oracle公司.Oracle数据库10g备份和恢复[DB/OL].[2004-06-13].
[4]黄军胜.如何在ORACLE9I下利用闪回功能恢复误删数据[J].贵州电力技术,2010.06:66-67.
[5]纪贤标.Oracle 10g闪回技术及实现[J].集美大学学报(自然科学版),2006.12:356-359.
[作者简介]周文琼(1969-),女,重庆人,硕士,高级工程师,广东科学技术职业学院计算机信息管理教研室主任,从事企业信息化及信息系统开发20余年,现从事ERP、数据库应用研究、软件测试等课程教学研究。
*基金项目:广东省教育科研“十一五”规划研究项目(2010tjk122)
关键词:Oracle;闪回;数据恢复
中图分类号:TP393.13 文献标识码:A文章编号:1007-9599(2011)07-0000-02
Oracle Flashback Features and Application
Zhou Wenqiong1,Wang Leqiu2,Deng Jie1
(1.Guangdong Institude of Science and Technology,Zhuhai519080,China;2.Sun Yat-sen University,Zhuhai519080,China)
Abstract:Expound the application and practice of the Oracle database latestflashback in the actual environment.Flashback feature works through the basic description and the practical examples,so readers better understanding rapid data recovery using Oracle Flashback.
Keywords:Oracle;Flashback;Data recovery
一、引言
Oracle数据库的日常维护工作中,数据毁损是相当严重的问题,一般来说,数据毁损可分为下列两种情况:
硬件故障:例如硬盘故障导致数据文件、重做日志文件的毁损。
人为错误:操作员不小心删除某笔重要数据,或是DBA误删了某个表。
硬件故障较易解决,如果某个硬盘毁损,只需立刻切换至备援硬盘,然后执行数据恢复程序即可;然而,人为错误在数据库系统中的比率居高不下,是导致系统停机的最主要原因。随着闪回技术在Oracle中的完善,用户能够更便捷、更准确地处理人为错误导致的数据毁损。
二、闪回基础
使用Windows的用户对回收站不会陌生,它给了我们一剂“后悔药”。为了使Oracle数据库从任何逻辑误操作中迅速地恢复,Oracle推出了闪回技术,该技术首先以闪回查询出现在Oracle 9i版本中,后来Oracle在10g中对该技术进行了全面扩展,提供了闪回数据库、闪回删除、闪回表、闪回版本查询等功能,在11g中,Oracle对该技术进行改进和增强,增加了闪回数据归档功能[1]。
(一)回滚表空间
在oracle数据库的体系结构中,回滚段是一个重要的部件。当表中的数据被修改时候,回滚段主要用来保存数据修改前的值,以便实现事务回滚、事务恢复及读一致性的功能。对于数据库表中给定的数据,每被改变一次,就产生一个新的版本。闪回时间浏览和闪回表,都是基于回滚表空间中保留的所有数据的变化历史。闪回特性有以下几个初始化参数需要设置:
UNDO_TABLESPACE:指定要激活的回滚表空间;
UNDO_MANAGEMENT:指定回滚表空问的管理方式,应设为AUTO;
UNDO_RETENTION:以秒为单位,指定回滚信息保留的时间长度。
(二)闪回恢复区
闪回恢复区是oracle 10g引进的实时在线存储区域,该区域存储所有与恢复相关文件。闪回恢复区包含以下几种文件:1.控制文件;2.归档日志文件;3.闪回日志;4.由RMAN产生的控制文件和服务端参数文件的自动备份;5.RMAN备份集;6.数据文件拷贝。闪回恢复区自动对所有与恢复相关的文件进行管理,能自动删除没用的文件,以及已经备份到磁带上的文件。闪回日志是由RVWR后台进程写入闪回恢复区的,它记录了变化的数据库物理块的前映像,因而,其数据规模只与错误发生的时间有关系。正确使用闪回数据库,必须对相关的初始化参数做正确的设置:
db_recovery_file_dest_size:指定闪回恢复区大小;
db_recovery_file_dest:指定闪回恢复区位置[2]。
(三)回收站
与windows操作系统的回收站有类似之处,oracle回收站在删除操作和彻底从存储介质上清空数据之问提供了一个缓冲。在这个回收站下面,被删除对象的实际数据仍然占用删除之前的空问,直到出现以下三种情况:1.手工清理回收站;2.用户空间限额用完;3.表空间需要扩展[3]。
三、闪回应用
(一)闪回表
Oracle 11g的闪回表将改变当前表及附属对象,使其一起闪回到以前的某个时间点上。下面我们模拟维护人员误删除某张表数据,然后进行数据恢复。
(1)创建测试表
SQL>conn scott/tiger
SQL>create table ftest AS SELECT EMPNO,ENAME FROM EMP;
(2)模拟误删除测试表数据,并提交
SQL>Delete from ftest;
SQL>commit;
在下面的操作中,我们将进行数据恢复。
(3)对表启用行移动
SQL> alter table ftest enable row movement;
(4)找到需要回退的时点
SQL> SELECT count(*)FROM ftest AS OF TIMESTAMP to_timestamp('年-月-日 小时:分:秒','yyyy-mm-dd hh24:mi:ss');
找到结果为14的时点。
(5)闪回表
SQL> flashback table ftest to timestamp to_timestamp('年-月-日 小时:分:秒','yyyy-mm-dd hh24:mi:ss');
(二)闪回删除
Flashback Drop特性提供一个类似回收站的功能,用来恢复不小心被删除的表。如果这个被删除的表需要进行恢复,就可利用Flashback Drop功能。
下面我们模拟维护人员误删除某张表,使用闪回删除进行恢复。
(1)删除测试表
SQL> drop table ftest;
(2)对被删除表进行恢复
SQL>flashback table ftest to before drop;
(三)闪回数据库
闪回数据库特性可让数据库前滚到当前的前一个时间点或者SCN。重要的是,执行这种复原操作所花费的时间与只和需要还原的交易次数有关[4]。
下面我们将数据库恢复到2011年02月1日00:00:00
SQL>flashback database to timestamp to_timestamp('2011-02-01 00:00:00','yyyy-mm-dd hh24:mi:ss');
(四)闪回时间浏览
闪回时间浏览包括:闪回查询、闪回版本查询和闪回事务处理查询。闪回查询是在查询语句后跟上AS OF从句,就可实现查询在过去某个时问点的数据;闪回版本查询通常使用VERSIONS BETWEEN语句在两个SCN或时间戳间进行查询;闪回事务处理查询是从事务的级别来对数据进行分析。
例如,数据表在早上七点是正常的,在晚上八点发现异常,利用闪回版本查询就可以获得在两个时点间的所有操作记录和事务ID,再利用事务ID获得回滚事务所需的UNDO语句。
(1)模拟维护人员误删除某行数据,并提交
SQL>delete from ftest where rownum<2;
SQL>commit;
(2)查询SCN
SQL>SELECT versions_xid,ID FROM ftest
VERSIONS BETWEEN TIMESTAMP minvalue and maxvalue;
VERSIONS_XIDID
-----------------------
0200000043010001
(3)利用闪回事务查询提供的事务标识XID获取回滚事务所需的UNDO语句:
SQL>SELECT UNDO_SQL FROM FLASHBACK_TRANSACTION_QUERY WHERE XID='020000004301000';
四、结束语
以上探讨了人为错误导致数据库逻辑损坏的恢复技术,可以发现闪回是一个非常有用的功能。闪回技术是恢复技术的革新性进步,与不完全恢复相比,闪回技术具有有以下优点:(1)闪回技术的速度比较快;(2)闪回命令易于操作;(3)在线恢复减少计划外停机;(4)可以进行部分数据恢复[5]。
参考文献:
[1](美)Sam R.Alapati,Charles Kim.Oracle数据库管理艺术11g新特性[M].北京:人民邮电出版社,2009.
[2]Bob Bryla,Biju Thomas.Oracle Database 10G New Features For Administrators Study Guide[M].Burr Ridge:McGraw-Hill,2005:351-398.
[3]Oracle公司.Oracle数据库10g备份和恢复[DB/OL].[2004-06-13].
[4]黄军胜.如何在ORACLE9I下利用闪回功能恢复误删数据[J].贵州电力技术,2010.06:66-67.
[5]纪贤标.Oracle 10g闪回技术及实现[J].集美大学学报(自然科学版),2006.12:356-359.
[作者简介]周文琼(1969-),女,重庆人,硕士,高级工程师,广东科学技术职业学院计算机信息管理教研室主任,从事企业信息化及信息系统开发20余年,现从事ERP、数据库应用研究、软件测试等课程教学研究。
*基金项目:广东省教育科研“十一五”规划研究项目(2010tjk122)