误删Oracle数据,别急着跑路

网友投稿 935 2022-11-03

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

误删Oracle数据,别急着跑路

前言:前两期给大家分享了内存取证相关知识,后续大家如有需求,也会继续给大家继续分享此专题。前几天小知收到一个问题,Oracle数据被恶意删除了,能不能找回来数据?今天小知就给大家介绍Oracle的闪回技术,用以应对“手抖”误删数据或者重要数据疑似被恶意删除数据的情况。

内存解析-利用Volatility提取Windows系统中的密码

内存解析-volatility的图形化插件volexp

闪回技术介绍

闪回技术(Flashback),是oracle提供的能使数据库整体或者局部回到“过去”的闪回功能的总称,主要是为了对抗人为错误。闪回技术包含了闪回数据归档,闪回查询,闪回事务,闪回数据库,闪回表,闪回删除等技术。

这边我们就将常用的闪回数据库,闪回表,闪回删除做个比较,希望能帮助大家理解闪回技术。

总结:闪回数据库就是针对数据做整体回退操作,所以我们需要停库操作,操作完成后还需考虑恢复数据库。而删除表和闪回删除,我们可以将这两者当成解决数据库错误操作事务的逆向事务,是可以即刻生效的。

闪回数据库使用步骤:

1、检查数据库是否开启归档日志模式

select log_mode from v$database;

LOG_MODE

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

NOARCHIVELOG     -- 未开启归档(ARCHIVELOG为已开启)

2、数据库开启归档日志模式

shutdown immediate ;        --关闭数据库

startup mount;              --以装载模式打开

alter database archivelog;     --开启归档日志模式

alter database open;         --开启数据库

3、开启归档后,检查下数据库是否开启闪回

select flashback_on from v$database;

FLASHBACK_ON

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

NO                     --未开启闪回(YES为已开启闪回)

4、如未开启闪回,可按以下步骤开启

shutdown immediate ;        --关闭数据库

startup mount;              --以装载模式打开

alter database flashback on;   --开启闪回功能(关闭闪回为off)

alter database open;         --开启数据库

5、设置闪回恢复区

设置闪回恢复区前,先简单介绍下几个参数的概念:

db_recovery_file_dest:指定闪回恢复区的位置(闪回日志存放位置);

db_recovery_file_dest_size:指定闪回恢复区的可用空间大小

db_flashback_retention_target:指定数据库可以回退的时间,单位为分钟,默认1440分钟(1天)。

查询参数:show parameter <参数名称>

如:SQL> show parameter db_flashback_retention_target

NAME                                TYPE        VALUE

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

db_flashback_retention_target        integer     1440

以上为查询数据库可以退回的时间,默认为一天。大家可以根据自己实际情况进行设置,设置过程如下,具体可以根据自己的需要修改

alter system set

db_recovery_file_dest='/home/U01/app/oracle/fast_recovery_areascope=spfile;

alter system set db_recovery_file_dest_size=20G scope=spfile;

alter system set db_flashback_retention_target=2880 scope=spfile;

以上为设置闪回恢复区、恢复区大小、回退时间。6、最后,检查下闪回功能是否开启 ,至此,我们已经开启了闪回功能,也就能使用闪回数据库技术啦。

select flashback_on from v$database;

FLASHBACK_ON

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

YES             --已开启闪回

闪回实操效果:

担任DBA的小黄,在日常数据库维护中,因为疏忽,误将生产数据库中的TEST表执行了截断操作(TRUNCATE),导致生产系统出现问题。为了恢复数据,小黄请教了组长小马,发现闪回数据库技术可以帮助他解决问题。于是,小黄就开始通过闪回数据库技术恢复数据。

1、检查数据库表TEST是否有数据,如下图,只有一条数据,证明确实执行了截断(TRUNCATE)操作;

2、检查数据库是否开启归档和闪回功能,发现都开启了,这样小黄就能使用闪回数据库技术啦

3、通过回忆,小黄发现执行截断操作的时间点大概是“2021-4-14,15:34:00”左右,为了保证成功率,我们往前推移5分钟,以“2021-4-14,15:29:00”作为闪回时间点。闪回语法中,SCN会比较简单,我们这边就先将时间戳转化成SCN,如下图,对应SCN 为 1545015:

select timestamp_to_scn(to_date('2021-04-14,15:29:00','yyyy-mm-dd,hh24:mi:ss')) scn from dual;

4、小黄发现执行闪回数据库操作需要停库,在夜间0-3点执行了闪回数据库操作

shutdown immediate ;             --关闭数据库

startup mount;                    --以装载模式打开

flashback database to scn  1520100;  --闪回数据库至步骤3中的SCN

alter database open read only;       --以只读模式打开数据库

5、 小黄检查数据库表TEST,发现已经有原来之前数据了,说明闪回时间点没有错

6、修复数据库:执行alter database open resetlogs打开数据库

这时候就可以发现误删除之前的数据已经回来了,我们也就成功的将数据救回来了。

以上就是今天给大家介绍的Oracle闪回技术,后续如果有遇到数据库被恶意或者误删除的情况下,均可以尝试使用闪回技术开启,正常情况下,数据库管理员是会将此功能开启的。

但是大家可能会发现一个问题,这样操作之后,删除数据之后新增加的数据并没有恢复回来,这其实就是这种方式的缺点:指定scn或者timestamp时间点之后的数据统统丢失。那到底有没有一种两全其美的办法呢?

欲知详情,请看下回分解~~

喜欢小知的话请不要忘了关注,点赞,转发!

上一篇:软件测试培训之如何减少需求变更对接口测试的影响
下一篇:软件测试培训之在接口测试中应对需求的频繁变化
相关文章

 发表评论

暂时没有评论,来抢沙发吧~