Oracle闪回技术在高校教务系统中的应用实践探析

作者: 缪娟 杨琴

Oracle闪回技术在高校教务系统中的应用实践探析0

摘要:Oracle闪回技术是数据库恢复和回滚工具,可以帮助高校教务系统实现快速、精确地将数据库恢复到之前的某个时间点,避免因系统故障导致的数据破坏和丢失。闪回技术还可以用于回滚特定的事务,从而撤销错误的操作,保障高校教务系统的数据管理和数据的安全稳定。本文主要介绍了Oracle闪回技术的功能和实现数据库恢复的四种后台技术,并通过实例探析了该技术在高校教务系统中的应用实践。

关键词:Oracle;闪回技术;高校教务系统;数据恢复

中图分类号:TP311  文献标识码:A

文章编号:1009-3044(2023)25-0055-06

开放科学(资源服务)标识码(OSID) :

高校教务系统是全校教学运行的管理平台,不仅包含了大量的学生信息、教师信息、课程信息等重要数据,同时也是学校管理决策的重要依据。随着信息化程度的提高,系统的迭代升级必不可少,数据安全和稳定性变得越来越重要。

闪回技术是Oracle数据库的一项重要功能,Oracle数据库闪回技术能够回滚数据库到任意时间点,实现在不破坏数据完整性的情况下迅速地回退到某个时间点,从而提高了数据库的数据恢复能力,是一种快速恢复数据的方法。在教务系统的日常运行中,系统数据库服务器升级维护、系统故障以及系统数据可能会出现误操作、删除、修改或者损坏等情况,使用Oracle数据库闪回技术能够有效处理数据库升级过程中的数据备份和恢复,高效解决系统升级过程中的数据丢失和系统出现异常等问题,还可以在系统故障时快速恢复数据,避免系统故障导致的数据错误,提高了系统的稳定性,保障教务系统的正常运行。

1 Oracle闪回技术的功能

Oracle数据库闪回技术主要通过对数据库进行时间轴式的管理,实现快速恢复数据库到指定的时间点[1],支持不同级别的恢复,包括行、事务、表和整个数据库。可实现有选择地、有效地消除错误的影响,逆转人为错误修改和应用程序错误数据的处理。

Oracle数据库闪回技术提高了教务系统的安全性。数据库闪回技术可以将数据库恢复到特定的时间点,这就意味着可以快速恢复到某个稳定版本,避免了恶意攻击、病毒侵入、数据库崩溃等问题带来的损失。闪回技术的特征、类型和原理如图1所示:

闪回技术主要有基于UNDO数据的闪回技术、基于FDA闪回数据归档技术、基于Recyclebin的闪回删除技术和基于闪回数据库日志的闪回数据库技术四种后台技术实现数据库的恢复。

2 基于UNDO数据的闪回技术

在Oracle数据库中,UNDO是指当一个事务修改数据库时,UNDO会记录改变之前的数值,如将数据1改为100,1被记录在UNDO中,利用UNDO数据技术实现对之前数据的追溯查询。UNDO可实现闪回查询(查询一张表在过去某个时间点的数据状态)、闪回表(把一张表闪回到过去的时间点)、闪回版本查询(一段时间多个事务操作对应表中数据状态)和闪回事务查询(查询事务对应的UNDO SQL,闪回数据归档)[2]。UNDO数据的闪回流程如图2所示:

2.1 闪回查询技术

UNDO数据库的状态会随着事务的提交、回滚和过期而不断变化。在实际应用中,如需查询一张表在过去某指定时间(T1)的数据状态,首先需确认是否可以查询对象或将对象改回到修改之前的某个时间点,并确保T1时间点数据的UNDO未被覆盖;其次需设置UNDO_MANAGEMENT=AUTO、设置UNDO_TABLESPACE参数和UNDO_RETNTION(单位为秒)。执行闪回查询的三种使用方法:

1) 闪回到某精确时间点:

SELECT*FROM SH.test_tab1 AS OF TIMESTAMP

TO_TIMESTAMP('2020-12-21 08:45:00','yyyy-mm-dd hh24:mi:ss');

2) 闪回到多久时间之前(例如:1分钟前)

select*from tab AS OF TIMESTAMP sysdate-1/24/60;

3) 闪回到指定SCN

select*from tab12 as of scn ×××××××;

2.2 闪回版本查询技术

闪回版本查询技术可以查询某一个时间点的数据,使用VERSIONS子句给BETWEEN TIMESTAMP,返回满足条件的两个时间点之间间隔的变化情况(即查询某一段时间对应行的所有版本)。返回结果是行的改变历史,且只返回已提交的行(包括删除和重新插入的行版本),提供了一种审计表行的方式,并可以获取改变行的事务信息,可以使用返回的事务标识符,通过LogMiner执行日志挖掘,或者进行闪回事务查询。执行闪回版本查询技术的方法如下:

SELECT versions_startscn,versions_starttime,

versions_endscn,versions_endtime,

versions_xid,versions_operation,

last_name,interim report

FROM students

VERSIONS BETWEEN TIMESTAMP

TO_TIMESTAMP('2008-12-18 14:00:00',YYYY-MM-DD HH24:MI:SS')

AND TO_TIMESTAMP('2008-12-18 17:00:00',YYYY-MM-DD HH24:MI:SS')

WHERE first_name='Li Jie';

2.3 闪回表技术

闪回表技术可以将表恢复到过去的指定时间点,因为UNDO表空间是循环覆盖的结构,所以只能将表闪回到UNDO所允许的过去的时间点,且需要对闪回表开启行迁移(row movement) ,实现过程为:alter table table_name enable row movement[3]。下面举例说明执行闪回表的三种方法:

1) 将表闪回到指定时间点

flashback table table_name to timestamp

to_timestamp('2020-12-12 13:30:00','YYYY-MM-DD HH24:MI:SS');

2) 将表闪回到n分钟(小时)之前

flashback table table_name to timestamp

Sysdate-n/24/60;

3) 将表闪回到指定的SCN

flashback table table_name to scn ×××××××;

3 基于FDA闪回数据归档技术

闪回查询和闪回表在UNDO数据中是有限制的,只能闪回查询或闪回到UNDO保留的期限范围内,无法返回到时间久远的数据,为了扩充闪回的能力,利用FDA闪回数据归档技术,即在UNDO数据循环覆盖之前建立表空间,将UNDO数据进行闪回数据归档,固化到表空间中,不受UNDO的时间限制,实现闪回查询和闪回表在时间上的延续。FDA闪回数据归档的步骤如下:首先创建一个供闪回数据库使用的表空间,在该表空间创建闪回数据归档,并限制空间大小和保留的时间;然后赋予用户权限;最后给某些表开启闪回数据归档的功能,执行查询来确定归档创建的对象。下面举例说明创建FDA的方法:

CREATE FLASHBACK ARCHIVE DEFAULT fla1 TABLESPACE tabs1

QUOTA 10G RETENTION 1 YEAR;

CREATE FLASHBACK ARCHIVE fla2 TABLESPACE tbs2 RETENTION 2 YEAR;

FDA闪回数据的流程如图3所示:

4 基于Recycle bin的闪回删除技术

基于回收站的闪回应用面相对较窄,主要针对表删除,是所有被删除对象的逻辑存储容器,对非system表空间可以使用,适用于通过drop操作和非purge的方式删除的对象,在recycle bin中可以闪回表及相关的object,包括相关索引、约束和触发器。

利用Recycle bin技术,在数据库中如果drop一个表时,该表并不会马上被数据库彻底删除,删除的表在回收站中被重新命名为系统盘中的名字后保存到recycle bin中。当表被误删时,利用recycle bin闪回技术flashback job从recycle bin中恢复重命名的表。Recycle bin闪回数据的流程如图4所示:

5 基于闪回数据库日志的闪回数据库技术

数据库全库的闪回依赖于闪回日志,需要给数据库开启闪回,在闪回开启后由一组后台进程把数据的历史变化写到Flashback logs闪回日志里,需要恢复的时候把闪回日志的数据取出覆盖回数据中,实现对数据库整体全库的闪回。闪回数据库是把数据库闪回到过去的某个时间点,是针对逻辑故障的修复或者对相同数据做循环迭代测试。例如系统的测试库,对一组应用程序做反复的测试,经过第一轮测试后的数据全部变化了,如第二轮重测时是基于第一轮测试后的数据,结果则会出现较大的反差,针对这样的多轮测试,可以采取在第一轮测试后闪回到测试前的时间点,经过反复地对相同的数据做循环迭代程序。闪回日志的闪回数据库技术流程如图5所示:

6 Oracle数据库闪回技术在高校教务系统中的应用实践

Oracle数据库闪回技术是Oracle数据库中的一种重要技术,由于高校教务系统需要频繁进行数据管理和数据恢复,因此闪回技术可以帮助系统管理员快速地恢复数据库中的数据,还原到某个指定的时间点。下面从闪回查询被误删数据、闪回表和恢复误删数据、闪回数据库分别举例说明Oracle数据库闪回技术在高校教务系统中的应用。

6.1 闪回查询被误删数据

误删数据或应用程序有BUG产生了错误数据,可通过闪回命令查询错误数据之前的数据状态,以及查看具体n分钟前的数据状态 n/24/60。下面举例测试删除了test_tab中的600行数据,查询结果如下:

1) 查看当前和n分钟前的数据状态

SQL> set lines 200 pages 9999

select count(*) FROM test_usr.test_tab; //查询当前的数据

COUNT(*)

-------------------------------------

0

SQL> SELECT count(*) FROM test_usr.test_tab AS OF TIMESTAMP sysdate - 1/24/60; //查询1分钟前的数据

COUNT(*)

-------------------------------------

0

SQL> SELECT count(*) FROM test_usr.test_tab AS OF TIMESTAMP sysdate - 5/24/60; //查询5分钟前的数据

COUNT(*)

上一篇 点击页面呼出菜单 下一篇