AIOps 一场颠覆传统运维的盛筵
935
2022-11-03
误删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时间点之后的数据统统丢失。那到底有没有一种两全其美的办法呢?
欲知详情,请看下回分解~~
喜欢小知的话请不要忘了关注,点赞,转发!
发表评论
暂时没有评论,来抢沙发吧~