达梦数据库-误删表数据的恢复

作为一个达梦的初学者,写这篇文章的目的是为了把学到的新知识做个总结梳理,在整理中查缺补漏,也希望大家看了我的文章能有收获,如有错误的地方欢迎指出。

误删数据分为以下几种场景,针对不同场景做不同恢复操作。

误删前闪回处于开启

        可以依靠回滚段进行闪回查询到被删除的数据。(truncate和drop除外)

        开启闪回/设置保持时间:

SQL> alter system set 'ENABLE_FLASHBACK' = 1 both;

SQL> alter system set 'UNDO_RETENTION' = 3600 both;--(单位S)

        查询是否开启闪回:

SQL> select name,value
 from v$parameter
 where name in ('ENABLE_FLASHBACK','UNDO_RETENTION');

        开启且在保持时间内,执行查询语句:

SQL>select * from table_name when timestamp '20220426 19:00:00'; 

误删前有备份和开启归档

     可以初始化一个新实例,将新实例恢复至删除前时间点。

  • 初始化一个和故障实例参数一致的新实例
./dminit path=新实例目录
  • 通过备份+归档还原

        打开RMAN:

RMAN> RESTORE DATABASE '新实例DM.INI目录' FROM BACKUPSET '备份目录';

RMAN> RECOVER DATABASE '新实例DM.INI目录' with archivedir '归档目录' UNTIL time '恢复时间点';

RMAN> recover database '新实例DM.INI目录' update db_magic

        若误操作数据很少,可以使用DBMS_LOGMNR对数据库归档日志进行挖掘,重构误操作,前提是开启了在日志中记录逻辑操作(1,2,3),查询语句如下。

SQL>select para_name, para_value 
from v$dm_ini
where para_name in ('RLOG_APPEND_LOGIC');

 参数说明:

  • 查询归档信息,拿到name
SQL>select sequence# seq, name , to_char(first_time,'yyyy-mm-dd hh24:mi:ss') first_time, to_char(next_time,'yyyy-mm-dd hh24:mi:ss') next_time, 
first_change# , next_change#  
from v$archived_log; 

        若操作时间段的redo未归档,需要手动切换日志

SQL>alter system archive log current;
  • 向系统包中添加日志文件(一次性可以添加多个,可以在V$LOGMNR_LOGS中查询信息)
SQL>DBMS_LOGMNR.ADD_LOGFILE('&name');
  • 启动归档日志文件分析
SQL>DBMS_LOGMNR.START_LOGMNR(OPTIONS=>2128,
STARTTIME=>TO_DATE(‘2022-04-01 00:00:00’,‘YYYY-MM-DD HH24:MI:SS’),
ENDTIME=>TO_DATE(‘2022-04-01 12:00:00’,‘YYYY-MM-DD HH24:MI:SS’));--还可以指定START_SCN,END_SCN等参数 

OPTIONS入参说明:

  • 查看分析结果
SQL>SELECT OPERATION_CODE,OPERATION,SCN,SQL_REDO,TIMESTAMP ,SEG_OWNER, TABLE_NAME 
FROM V$LOGMNR_CONTENTS 
WHERE TABLE_NAME ='T_TEST3' and OPERATION='UPDATE';

  • 终止归档日志文件分析
SQL>DBMS_LOGMNR.END_LOGMNR();

无备份和开启归档,未开启闪回

        正常手段无法恢复。

 

达梦社区地址:https://eco.dameng.com

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值