摘 要:在Oracle 9i之前的版本,要恢复用户误操作的数据,必须通过逻辑备份或者物理备份进行恢复以纠正错误,这种方法是极其复杂和低效的。为提高数据库的可用性,从Oracle 9i开始引入了闪回技术,使数据恢复的方式和手段更加丰富,操作更加简易。主要分析介绍Oracle闪回技术的概念、功能,并结合实例介绍闪回技术在数据恢复中的应用。
关键词:Oracle 9i;Oracle 10g;闪回技术;数据恢复
Oracle数据库是世界上最流行的关系数据库之一。由于它的系统可移植性好、使用方便、功能强,在国内外企事业单位中应用广泛。本文介绍了Oracle闪回技术,它最大的特点是能实现自动备份,有效减少管理开销。数据库发生故障具有随机性,大多数情况下没有事先人为备份,这时就可以利用闪回技术快捷方便地恢复数据。从Oracle 9i推出闪回查询(Flashback Query)特性,到Oracle 10g闪回技术得到了进一步的发展。随着闪回功能不断扩充和加强,新的应用也大量出现在系统管理中。
1 Oracle 9i闪回技术的数据恢复
1.1 Oracle 9i闪回技术原理
在Oracle 9i中,闪回技术确切地说是闪回查询(Flashback Query)。闪回查询可以按照时间戳或SCN向前查询,获取回滚段(undo)中的数据镜像。自动回滚段管理(AUM)是Oracle 9i引入的新特性,闪回查询必须依赖于它。之前的Oracle数据库版本,在事务提交后,段中的数据镜像是可以被覆盖的。而现在可以在自动回滚段管理模式下调整参数UNDO_RETENTION设置数据库UNDO信息的最大可以闪回查询的时间段,只要在这个时间范围内数据镜像没有被覆盖,数据被恢复的可能性是比较大的,就算不能完全恢复,也至少可以恢复到某个时间点比较好的状态[1-3]。同时,UNDO信息被覆盖也跟UNDO表空间的存储空间大小有关。
闪回查询在使用前,数据库要处于Automatic Undo Management状态。
SQL>show parameter undo_management
NAME TYPE VALUE
--------------------------
undo_management string AUTO
最大可以闪回查询的时间段可以在UNDO_RETENTION 参数(单位为秒)中设置。
SQL>show parameter undo_retention
NAME TYPE VALUE
------------------------
undo_retention integer 10800
Oracle 9i是基于时间点的闪回,需要查询SCN或时间戳。若要获得当前的SCN必须确保用户对DBMS_FLASHBACK包有执行的权限:grant execute on dbms_flashback to User[4-6]。除了查询SCN估算向前进行查询,还可以根据事务提交时间估算向前推移查询。由于一个数据库系统表SMON_SCN_TIME构建了SCN→TIME的跟踪关系,而且不同实例只能维护一个SCN→TIME的映射关系。数据库通过后台监控进程SMON每隔5分钟更新一次表,记录一次时间戳和当前的SCN。此表总共能记录保存1 440条记录,相当于5天的信息。
1.2 数据恢复应用