当前位置:首页 > 物联网 > 《物联网技术》杂志
[导读]摘 要:当数据库发生误删除等逻辑错误时,传统上只能通过执行不完全恢复来恢复数据,本文介绍了通过3种闪回技 术,提高效率恢复数据库逻辑错误的方法,并对3种闪回技术进行了分析比较。

引言

传统上,误删除了 Oracle数据库中的重要表或表中的记 录,提交(COMMIT)成功后,再想恢复被误删除的表格或 表格中的数据,那只能釆用数据库备份和恢复技术,其步骤为: 首先利用误删除前备份的全部数据文件和控制文件将数据库 还原到备份状态,再应用在线重做日志文件和归档日志文件, 将数据库恢复到误删除前的状态,即执行数据库的不完全恢 复,这样做不但需要数据库全备份,且操作复杂,耗费时间 较长,在恢复期间数据库还必需关闭,不能使用。从Oracle 9i开始,利用新提供的闪回功能,被误删除的表或表中的数 据恢复可以更加方便、快捷。Oracle闪回功能在10 g、11 g又 分别得到了加强。

1闪回技术的功能

为了演示闪回功能,先在sql*plus中执行以下语句,创建 测试表testta,表中插入3条新记录后,提交插入事务。

SQL>CREATE TABLE testta( id INT,name VARCHAR2(4));

SQL>INSERT INTO testta VALUES。,'aaaa'); SQL>INSERT INTO testta VALUES(2,'bbbb'); SQL>INSERT INTO testta VALUES。,'cccc'); SQL>COMMIT ;

再执行以下语句,设置显示当前时间:

SQL>SET TIME ON

删除testta表中全部3条记录:

14 : 11 : 29 SQL>DELETE testta ;

提交删除事务:

14 : 12 : 30 SQL>COMMIT ;

收稿日期:2014-01-08

14 : 12 : 34 SQL> SELECT * FROM testta ;

表testta中已没有记录。由于删除事务已提交成功,如想 恢复被删除的记录,传统的方法只能是执行数据库的不完全 恢复。现在釆用闪回数据库(Flashback Database)的方法恢 复删除数据,操作如下。

关闭数据库,将数据库设置到装载(mount)状态。

14 : 14 : 47 SQL>SHUTDOWN IMMEDIATE

14 : 15 : 04 SQL>STARTUP MOUNT

利用闪回数据库的方法,将数据库整体调整到删除数据 前的某一时间。

14 : 16 : 10 SQL>FLASHBACK DATABASE TO TIMESTAMP TO_DATE( '2013-12-23 14 : 11 : 27',,yyyy-mm-dd hh24 : mi: ss'); 使用RESETLOGS选项,打开数据库。

14 : 17 : 07 SQL>ALTER DATABASE OPEN RESETLOGS;

查询testta表内容。

14 : 17: 42 SQL>SELECT * FROM testta ;

执行后,部分显示结果如下:

ID NAME

aaaa

bbbb

cccc

结果显示说明,testta表中被删除的数据已经恢复。

2闪回数据库的操作

闪回数据库就像数据库上的倒带按钮,可以把整个数据 库回退到过去的某个时点状态,其最终结果就像执行了不完整恢复。因此,闪回数据库不但能恢复像以上例子中被删除表中的记录,也能恢复被删除的表、视图等数据库其他对象,还能恢复被删除了的用户等。但此种方法也有其局限性,一是恢复到过去某一时间点后,则数据库的全部内容都被恢复到当时时间点状态,如果只是误删除了某个表中的记录,而只想恢复该表的内容,则不宜采用闪回数据库的方法 ;二是采用闪回数据库的方法,必须要先关闭数据库。为了克服闪回数据库的缺陷,可采用以下闪回表(Flashback Table)的方法,恢复被删除的记录,操作如下:

创建测试表 testtb,在表中插入 3 条新记录后,提交插入事务 :

14 :43 :09 SQL> CREATE TABLE testtb( id INT,

name

VARCHAR2(4)) ;

1 4 :4 3 :2 0 S Q L > I N S E R T I N T O t e s t t b

VALUES(1,’aaaa’) ;

1 4 :4 3 :2 0 S Q L > I N S E R T I N T O t e s t t b

VALUES(2,’bbbb’) ;

1 4 :4 3 :2 0 S Q L > I N S E R T I N T O t e s t t b

VALUES(3,’cccc’) ;

14 :43 :20 SQL> COMMIT;

删除 testtb 表中全部 3 条记录 :

14 :44 :16 SQL>DELETE testtb ;

提交删除事务 :

14 :44 :26 SQL>COMMIT;

14 :44 :28 SQL> SELECT * FROM testtb ;

删除事务已提交成功,testtb 表中已没有记录。现采用闪回表的方法恢复删除数据。

闪回表的前提是启动被操作表的行移动(ROW MOVEMENT)特性。先启动表 testtb 的行移动特性 :

14 :44 :32 SQL> ALTER TABLE testtb ENABLE ROW

MOVEMENT;

利用闪回表的方法,将 testtb 表恢复到删除数据前的某一时间。

14 :45 :27 SQL> FLASHBACK TABLE testtb TO

TIMESTAMP TO_TIMESTAMP(‘

2013-12-23 14 :44 :

00’,

YYYY-MM-DD HH24 :MI :SS’) ;

查询 testtb 表内容 :

14 :45 :28 SQL>SELECT * FROM testtb ;

执行后,部分显示结果如下:

ID NAME

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

1 aaaa

2 bbbb

3 cccc

结果显示说明,testtb 表中被删除的数据已经恢复。

3 闪回表

闪回表能够恢复指定表中的记录内容,而不改变数据库其他对象的内容。但数据恢复中,闪回表必须启用被操作表的行移动特性,且只能进行闪回表的 DML 操作,不能进行闪回 DDL 操作。如果用户删除了(DROP)表,则不能采用闪回表的方法恢复,此时可以有采用上面介绍的闪回数据库的方法恢复整个数据库,也可以采用以下闪回删除(Flashback Drop)的方法,其操作如下:

创建测试表 testtc,表中插入 3 条新记录后,提交插入事务 :

16 :10 :43 SQL> CREATE TABLE testtc( id INT,

name

VARCHAR2(4)) ;

1 6 :1 0 :4 4 S Q L > I N S E R T I N T O t e s t t c

VALUES(1,’aaaa’) ;

1 6 :1 0 :4 4 S Q L > I N S E R T I N T O t e s t t c

VALUES(2,’bbbb’) ;

1 6 :1 0 :4 4 S Q L > I N S E R T I N T O t e s t t c

VALUES(3,’cccc’) ;

16 :10 :46 SQL>COMMIT;

删除 testtb 表 :

16 :11 :55 SQL> DROP TABLE testtc ;

从回收站中闪回删除的 testtc 表 :

16 :12 :34 SQL> FLASHBACK TABLE testtc TO

BEFORE DROP;

查询 testtc 表内容 :

16 :13 :19 SQL> SELECT * FROM testtc ;

执行后,部分显示结果如下:

ID NAME

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

1 aaaa

2 bbbb

3 cccc

结果显示说明,被删除 testtc 表已从回收站中恢复。

Oracle 在删除一个表时,并不立即丢弃它,而是把它放在回收站中,并保留尽可能长的时间。闪回删除能够像Windows 操作系统一样,将回收站中被删除的对象方便地恢复,但闪回删除只能恢复表、索引等对象,对于用户等对象,闪回删除无能为力。

通过以上验证可能看出,采用闪回技术,可以针对行级 和事务级发生过变化的数据进行恢复,缩短数据恢复的时间, 且操作简单,这样做大大提高了数据库恢复的效率。

4结语

最后,我们需要再说明以下几点:一是闪回技术具有强 大且简便的数据库恢复功能,是否就不需要再做数据库备份 和不完全恢复了呢?答案是否定的,因为当出现介质损坏时, 任何闪回方法都是毫无用处,此时,只能执行标准的备份、还 原与恢复过程;二是要实现各种闪回功能,必须要先对数据 库进行相应设置,如启动闪回数据库、启动数据库的“回收站”、 启动表的行移动等;三是除了以上介绍的3种闪回技术外,还要有闪回版本查询(Flashback Version Query)、闪回事务查询 (Flashback Transaction Query)、闪回查询(Flashback Query) 和闪回数据归档(Flashback Data Archive)等闪回方法。

20211120_6198f2c06decf__闪回技术在数据库误删除中的应用

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭