一、背景介绍
在做数据库操作中,我们有时遇到对数据库误操作的情况,在DM数据库中闪回技术尚未成熟的情况下,可以使用归档挖掘来对数据进行修复。
二、准备条件
dm.ini中的ARCH_INI=1以及RLOG_APPEND_LOGIC 选项置为 1 或 2
测试表
create table test11 (c1 int,c2 int);
begin
for i in 1..10000
loop
insert into test11 values (i,i);
end loop;
commit;
end;
假设想更新c2=1的c1列为100001
update test11 set c1=1000001;
但是未写条件将全表更新了。
查出归档文件路径
select first_time,name from v$archived_log;
将需要挖掘的归档添加到包里,如下
call dbms_logmnr.add_logfile ('/home/dmdba/arch/dm/ARCHIVE_LOCAL1_0x17465BD4[0]_2022-01-12_17-15-11.log');
分析归档文件,指定开始时间和结束时间,也可以不指定
--DBMS_LOGMNR.START_LOGMNR(OPTIONS=>2130);
DBMS_LOGMNR.START_LOGMNR(OPTIONS=>2130 , STARTTIME=>TO_DATE('2022-01-11 14:00:00','YYYY-MM-DD HH24:MI:SS') , ENDTIME=>TO_DATE('2022-01-13 18:00:00','YYYY-MM-DD HH24:MI:SS'));
options的解释如下:
分析的结果记录在V$LOGMNR_CONTENTS中
select * from v$LOGMNR_CONTENTS;
拿出你要修复的语句,一般可以在SQL_REDO中看到
将语句改写修复
UPDATE "SYSDBA"."TEST11" SET "C1" = 1 WHERE "C1" = 1000001 AND "C2" = 1
分析完后关闭归档分析
这里可以看到已关闭