当前位置:首页 > 物联网 > 《物联网技术》杂志
[导读]摘 要:当数据库发生误删除等逻辑错误时,传统上只能通过执行不完全恢复来恢复数据,本文介绍了通过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__闪回技术在数据库误删除中的应用

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

在接下来的5G时代当中,华为也将会凭借着自身的优势,从而处于遥遥领先的地位,但其实厉害的又不仅仅是华为企业,如今,作为国际巨头的三星开始了在6G当中的研发,6G接下来的网速,将会是5G的50倍,对于三星的这一个大动作,华...

关键字: 5G 6G 三星

随着人工智能概念的爆发,越来越多的企业开始关注并布局智能家居领域。有研究机构预测预测,2022年中国智能家居的整体产值将突破万亿元,前景一片向荣。

关键字: 全屋智能 智慧生活 小爱同学

博鳌亚洲论坛国际科技与创新论坛第二届大会在广州举行。期间举行的5G科技应用与6G展望分论坛备受瞩目。六位通信领域的头部企业、高校和科研院所的专家通过线上线下联动方式,共同研讨5G软硬件关键技术研发现状与未来6G发展前景展...

关键字: 5G 6G 通信算法

智能家居作为住宅家居现代生活场景方式,当下已经不再只是一个概念,而是基于家居家装软硬件产品为载体的生活方式实景呈现,越来越多的人在家装时选择智能家居。需求助推行业持续火热,大小资本都以狂风席卷之势进驻这个行业,根据企查查...

关键字: 全屋智能 智能家居 智能门锁

5G领先让我们信心大增,但是这不能成为我们高枕无忧的理由。随着我们认识到通讯技术在科技领域的重要性之后,竞争必然会更加激烈起来。在5G还未成熟的年代,通讯商们就已经开始将目光瞄准了6G,并开始相关的研发和布局。

关键字: 5G 6G 虚拟数字世界

小米智能家居现在已经能实现联动和自动化了,比如指纹锁进屋就打开窗帘电视,播放天气预报,根据设定温度决定是否打开空调,根据空气质量检测仪决定是否打开新风机~结合人体移动和光线传感器开灯就更是不用说了~最近也在搞全屋智能化,...

关键字: 全屋智能 温度感应 小米

根据5G设备市场的调研数据当中来看,三星所拿下的5G设备市场份额就达到了10.4%,也就是说,排在了第四名的位置。

关键字: 6G 三星 华为

拥有 5G、人工智能、物联网等新技术的支撑,智能家居行业逐渐从单品智能迈入全屋智能阶段 。其由于全屋智能产品特殊性,落地安装涉及到方案场景设计、布线,安装,施工、后期维护更新等多个环节,整体最好的实施路径是通过房屋整体装...

关键字: 全屋智能 5G 物联网

5G时代,我们实现了弯道超车,一跃超越高通,爱立信,领先于世界。现如今,5G正在全世界加速普及和应用。通讯和实业的结合,已助力生产效率进一步提高,让我们的生活变得更加美好。

关键字: 5G 6G 中国移动

自从2020年作为建设主体纳入大湾区综合性国家科学中心先行启动区,跻身科创国家队以来,松山湖科学城围绕科研创新人才的需求,全面提升城市服务能级和城市品质,让松山湖成为近悦远来、宜居宜业宜研宜创的科学家园。

关键字: 智慧城市 科学家园 人工智能

《物联网技术》杂志

2510 篇文章

关注

发布文章

编辑精选

技术子站

关闭