Oracle闪回技术的应用与实践分析
2020-12-28陈伟明
陈伟明
摘要:闪回技术是Oracle提供的一种强大的备份恢复机制手段,能够让用户及时地恢复由于误操作而造成的数据库逻辑错误,达到损失最小化,避免进行没有可用逻辑备份而采取的数据库不完全恢复,且多数都能在联机状态下完成。本文主要介绍了闪回技术几种常用的技术手段,并利用一些实例展示了该技术在实际工作中的具体应用。
关键词:Oracle;数据库;闪回
中图分类号:G202 文献标识码:A
在实际工作中,Oracle数据库的人为错误操作,比如数据误删除或者执行了错误的更新,且提交了数据,可能会造成系统停机。在没有逻辑或物理备份的情况下,要想进行数据恢复是非常困难的,而利用Oracle数据库提供的闪回技术, 可以让管理员将数据库回退到过去的某一个状态,更正逻辑错误操作,其简单易用,效率高,大大提高了数据库的安全性和完整性1。Oracle提供了闪回表、闪回删除、闪回版本查询、闪回事务查询,闪回数据库,闪回数据归档等闪回技术。本文就其中几种闪回技术做简单介绍,并对最常用的利用具体实例加以说明。
1 闪回表操作
闪回表是一个独立的事务,主要是为了解决用户对某个表不小心做了不正确操作,需要在线恢复指定表中的数据。通过闪回表操作,将指定表中数据恢复到指定的时间点或者系统改变号SCN上,并自动恢复索引,约束,触发器等,而数据库继续保持连接状态,其它表不受影响同样保持当前状态。Oracle闪回查询主要是利用了Undo表空间,闪回查询能恢复的时间点取决于Undo表空间的大小和Undo_Retention参数有关,且无法对过去版本的数据进行DML操作。此外,闪回表利用DML操作恢复数据时,其无法保证Rownum号不变,因此我们在进行闪回操作前必须先要启动行移动功能,否则闪回操作会报错。
下面用一个实例说明如何将表中的数据恢复到指定时间点的操作。
(1)创建一个测试表Com_Employee,包含员工编号、姓名、性别等演示数据。
结果显示,表中只有张三的基本信息,证明数据被恢复到了指定的时间点,闪回成功,闪回表可能会失败,主要原因是不能保护系统表空间中的表,即不适用于SYS模式下的表,违反了外键约束,撤销数据被覆盖后导致数据失效,权限不足,有其他用户锁定了闪回作用的行而不能闪回,对表的DLL操作比如对表做了截断操作或者删除了列等,实际应用时应加以判断。尽量在最短时间内发现错误并执行闪回操作,如果闪回因为任何原因而失败,Oracle闪回操作将会被终止,回滚已经成功执行的任何一部分操作,将表状态回到闪回命令发出之前的样子。
2 闪回删除
恢复已经被用户删除Drop的数据库对象,相应的索引,数据库约束也会被还原。闪回删除需要用到Oracle 中的回收站机制。Drop命令仅相当于一个重命名的操作,当用户删除一个表的时候,该表的所有相关对象也将被保存在Oracle 回收站内,未被真正删除,此时可以通过闪回删除操作将用户被错误Drop的表进行闪回操作。闪回被误删除的表实例演示如下。
需要注意的是闪回删除仅针对DROP 操作,对于Truncate操作和回收站被Purge的表将无法恢复,另外依赖该表的位图索引、引用完整性约束不受回收站保护。
3 闪回版本查询和闪回事务查询
一条行数据在使用周期内可能会发生多次改变。闪回版本查询可用于查看一个行在不同时期内所提交的不同版本的数据,以及相应的DML操作记录,主要包括该版本数据的创建时间和结束时间,操作者是谁以及每个更改的事务标识符,从而让我们可以详细了解某个具体的表在这个时间段内的具体变化情况。闪回事务查询则是闪回版本查询的扩充,可以实现审计事务或者撤销一个已经提交的事务,Oracle中进行DML操作并提交后,Oracle会自动构造SQL语句来反转事务的更改,自动执行修复过程,其主要是利用了保存在Flashback_Transaction_Query 表中的Undo_Sql来恢复具体的事务操作,而并不是回滚一个已经提交到事务,利用它可以看到受该事务影响的每个行都对应有一行记录。闪回事务不会造成数据丢失,仅仅是撤销指定的事务,并且数据库依旧能够保持当前状态。
实例演示:新建一个表Test,并做一些DML操作,接着查询出这些具体的操作,并做指定的撤销处理。
(1)新建表,插入2条演示数量,并模拟删除其中的一条数据。
(6)查询Test表进行结果检查,数据回到了原来Update前的初始状态了,闪回完成。
需要注意的是,闪回版本查询不能用于外部表、视图或临时表,因为这些对象都能不生成撤销数据。当对表做了截断操作,或者对表栏做了删除列的操作后,闪回版本查询信息将丢失,但增加列的DDL操作则不会丢失版本查询信息。
4 闪回数据归档
闪回数据归档区本质是从一个或多个表空间中划出来的一部分空间,能够使表具有退回到过去任何时间点的能力。闪回操作中除了闪回数据库是利用了闪回日志外,其他都依赖撤销表空间,然而撤销表空间是循环使用的,老的数据会被新的数据替换,且保留时间短,一旦撤销数据被覆盖重写,将必然导致闪回失败,而利用闪回数据库归档,将改变的數据另外存放到特定的闪回数据归档区,从而有效避开撤销数据空间大小的限制,提高数据保留时间。它只针对Undate和Delete语句,并不保存Intert操作。我们在某个表空间上创建一个数据归档区,并设置好大小和保留时间,然后为具体的表指定具体的闪回数据归档区,通过为表指定闪回归档区后,实际上就开启了对表的跟踪,这时将不再允许对表执行DLL操作,如删表、增删列、改名等,这些限制可以通过 alter table test1 no flashback archive进行取消,通过设置以后,表就具有了退回到保留时间内某个具体时间点的能力。
5 结语
本文主要针对Oracle常用闪回技术做了简单介绍并结合实例演示了闪回技术给我们提供的一种针对数据库逻辑错误快速恢复的机制,多数能在联机状态下进行数据恢复,快速且有效,闪回的过程中,也有可能失败,闪回前可能需要取消对某些表完整性和约束检查,但是,闪回恢复的程度取决于闪回空间的大小以及保留的时间策略设置,但对于磁盘的物理损坏或介质丢失,闪回技术就无法发挥其作用了,必须借助Oracle其他的备份恢复工具进行备份恢复操作,因此,闪回技术更适合恢复偶然的操作错误,其增强了系统可用性与一致性。
(责任编辑:武多多)
参考文献:
[1]张晓明.大话Oracle RAC集群、高可用性,备份与恢复[M].北京:人民邮电出版社,2011.
[2]李兴华,马云涛.Oracle开发实战经典[M].北京:清华大学出版社,2014.
[3]杨建荣.Oracle DBA工作笔记:运维、数据迁移与性能调优[M].北京:中国铁道出版社,2016.