logminer恢复误覆盖更新的数据

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 昨日程序部署人员在运营数据库误更新覆盖了系统重要数据。具体误操作方式在一表上用A字段和 B字段数据基本相同,但B字段中有null值,然后B字段的数据更新了A字段数据,之后删除了B字段, 导致系统重要入口数据无法显示,考虑表结构修改过,且只对单表操作,为尽快恢复数据,因此, 使用logminer读取日志的方式恢复数据。

昨日程序部署人员在运营数据库误更新覆盖了系统重要数据。具体误操作方式在一表上用A字段和
B字段数据基本相同,但B字段中有null值,然后B字段的数据更新了A字段数据,之后删除了B字段,
导致系统重要入口数据无法显示,考虑表结构修改过,且只对单表操作,为尽快恢复数据,因此,
使用logminer读取日志的方式恢复数据。具体模拟相应场景
alter database archivelog;
alter database open;
一 建立环境
1 建新表并插入数据
create table TEST.t1(t_id number,t_name varchar2(50),t_salary number(8) );
insert into TEST.t1 values(1,'jy',10000);
insert into TEST.t1 values(2,'wj',8000);
select * from TEST.t1;
2更改数据,删除字段
update test.t1 set t_name = t_salary;
alter table test.t1 drop column t_salary ;
alter system switch logfile;
二恢复日志
1查询删除数据的归档日志
select name,sequence#,first_change#,first_time from v$archived_log ;
2增加归档日志
begin
 dbms_logmnr.add_logfile(logfilename=>'D:\ANZHUANG\ORACLE\PRODUCT\10.2.0\DB_1\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2016_06_02\O1_MF_1_212_CNZ3DBKX_.ARC',options=>dbms_logmnr.NEW);
end;
3分析归档日志
begin
 dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);
end;
4插入分析归档日志
insert into logmnr_contents  select * from v$logmnr_contents ;
5结束分析归档
begin
 dbms_logmnr.end_logmnr;
end;
6查看误操作表的操作步骤
select seg_name,username,scn,timestamp,sql_redo,sql_undo from logmnr_contents where seg_name='T1';
2016/6/2 9:33:30 "create table TEST.t1(t_id number,t_name varchar2(50),t_salary number(8) )
;" 
2016/6/2 9:33:32 Dictionary Version Mismatch Dictionary Version Mismatch
2016/6/2 9:33:32 Dictionary Version Mismatch Dictionary Version Mismatch
2016/6/2 9:33:59 update "TEST"."T1" set "T_NAME" = '10000' where "T_NAME" = 'jy' and ROWID = 'AAANI4AAEAAEKBHAAA'; update "TEST"."T1" set "T_NAME" = 'jy' where "T_NAME" = '10000' and ROWID = 'AAANI4AAEAAEKBHAAA';
2016/6/2 9:33:59 update "TEST"."T1" set "T_NAME" = '8000' where "T_NAME" = 'wj' and ROWID = 'AAANI4AAEAAEKBHAAB'; update "TEST"."T1" set "T_NAME" = 'wj' where "T_NAME" = '8000' and ROWID = 'AAANI4AAEAAEKBHAAB';
2016/6/2 9:34:40 "alter table test.t1 drop column t_salary
;" 

7找出被更新的数据,逆向被更新的恢复数据
update "TEST"."T1" set "T_NAME" = 'jy' where "T_NAME" = '10000' and ROWID = 'AAANI4AAEAAEKBHAAA';
update "TEST"."T1" set "T_NAME" = 'wj' where "T_NAME" = '8000' and ROWID = 'AAANI4AAEAAEKBHAAB';
select * from TEST.t1;


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
6月前
|
Oracle 关系型数据库 数据库
oracle误删除数据的恢复方法
oracle误删除数据的恢复方法
55 0
|
7月前
|
存储 运维 数据库
如何定期清理数据库中的无效数据?
学习如何定期清理数据库中的无效数据,以提高数据库性能并节省存储空间。了解如何利用NineData的数据归档功能实现自动化数据清理,简化DBA工作,降低成本,提高数据库操作效率。通过定期执行归档任务,企业可以优化数据库空间管理,避免无效数据堆积引发的性能问题,实现降本增效。
108 0
|
Oracle 关系型数据库
oracle 数据回滚,恢复误删的数据,闪回表功能的使用
oracle 数据回滚,恢复误删的数据,闪回表功能的使用
1137 0
oracle 数据回滚,恢复误删的数据,闪回表功能的使用
|
SQL 安全 关系型数据库
四十七、恢复误删除数据
四十七、恢复误删除数据
105 0
|
SQL 关系型数据库 MySQL
|
SQL 数据库
数据库页已标记为 RestorePending,可能表明磁盘已损坏。要从此状态恢复,请执行还原操作。
错误提示: 消息 829,级别 21,状态 1,第 1 行 数据库 ID 15,页 (1:21826) 已标记为 RestorePending,可能表明磁盘已损坏。要从此状态恢复,请执行还原操作。 引起原因: RestorePending一般是在进行页恢复的过程中出现的,就是在进行了restore操作之后但还没有进行recovery操作之前页的状态。
2514 0
|
关系型数据库 数据库 Oracle