达梦数据库生产环境业务表误删恢复实战

本文介绍在达梦8主备集群环境下,如何通过模拟环境构造、判断还原点、新实例数据还原及还原到生产环境等步骤,实现被误删除的业务表的数据恢复。


测试场景

在日常运维过程中,经常会遇到用户误操作导致的数据被删除,表被意外删除的情况,本次实验模拟生产环境表被误删的情况进行数据恢复。

生产环境为:达梦8主备集群
模拟业务场景:
1、每天晚上有备份
2、备份以来有业务
3、一张业务表被误删除,局部业务受影响
4、其他业务正常运行,不能中断其他业务


一、模拟环境构造

1.创建测试业务表

# 创建一张数据库表
SQL> create table test12(id int,name varchar(64));
操作已执行

# 做一笔业务
已用时间: 7.033(毫秒). 执行号:600.
SQL> insert into test12 values(1,'abcd');
影响行数 1

已用时间: 0.690(毫秒). 执行号:601.
SQL> commit;
操作已执行
已用时间: 1.362(毫秒). 执行号:602.

2.模拟定时全备

SQL> backup database backupset '/dm8/backup/1229';
操作已执行
已用时间: 00:00:04.719. 执行号:603.

3.模拟业务操作

SQL> insert into test12 values(2,'bcde');
影响行数 1

已用时间: 0.297(毫秒). 执行号:604.
SQL> insert into test12 values(3,'cdef');
影响行数 1

已用时间: 0.426(毫秒). 执行号:605.
SQL> commit;
操作已执行
已用时间: 1.093(毫秒). 执行号:606.
SQL> select * from test12;

行号     ID          NAME
---------- ----------- ----
1          1           abcd
2          2           bcde
3          3           cdef

已用时间: 0.642(毫秒). 执行号:729.

4.模拟表被误删除


                
根据你的需求,恢复达梦数据库误删除的数据,可以采用以下几种方案,具体取决于误删除的方式、数据库环境以及是否具备相关的备份或归档日志。 ### 1. 使用闪回功能(Flashback)恢复 如果数据是使用 `DELETE` 操作删除的,并且删除时间较短、未发生大量事务覆盖 `UNDO` 日志,可以尝试启用闪回功能进行恢复。闪回功能通过 `UNDO` 空间记录的数据变更前的值进行恢复,但需要注意以下几点: - **闪回功能默认关闭**,需要通过参数 `ENABLE_FLASHBACK=1` 开启。 - **DMMPP 环境不支持**闪回操作。 - 如果 `UNDO` 日志被其他事务覆盖,数据将无法恢复。 - 闪回支持级别的恢复,可以使用命令 `FLASHBACK TABLE`。 示例命令: ```sql -- 启用闪回功能(需在配置文件中设置并重启数据库) -- ENABLE_FLASHBACK = 1 -- 执行闪回操作 FLASHBACK TABLE your_table_name TO BEFORE DROP; ``` ### 2. 使用备份文件恢复 如果数据是通过 `TRUNCATE` 操作删除的,或者删除时间较长且 `UNDO` 日志已被覆盖,则需要使用备份文件进行恢复。具体步骤如下: - **从备份中恢复整个数据库**到一个新的环境中。 - 在新恢复数据库中提取被删除的数据。 - 将数据导入到生产库中对应的中。 可以使用达梦提供的 **DTS 工具** 或 **逻辑导出/导入** 方法迁移数据,确保数据一致性。例如,使用 DTS 工具连接源数据库和目标数据库,选择需要迁移的,并设置转换规则(如“删除后拷贝”)以避免重复数据。 ### 3. 使用归档日志进行日志挖掘 如果数据库启用了归档日志(Archive Log),并且存在删除操作前的归档日志文件,可以通过日志挖掘工具分析日志内容,提取删除操作前的数据变更记录,并手动或自动将数据还原到生产库中。 此方法较为复杂,通常适用于没有可用备份、但保留了完整归档日志的情况。 ### 4. 重建数据库并修改 db_magic 恢复(仅限日志文件丢失) 如果误删除了 **Redo Log 文件**,并且没有备份,数据库无法正常处理事务,此时可以尝试以下步骤: - **重新初始化一个数据库**,初始化参数(如页大小、字符集、大小写敏感等)需与原库一致。 - **修改 db_magic** 值,使其与原库一致,尝试恢复数据文件。 - 此方法可能会导致 **数据丢失**,仅作为最后手段使用。 ### 5. 创建外部链接迁移数据 如果已从备份中恢复出一张包含完整数据的,可以通过创建外部链接的方式将数据迁移到当前生产库中。例如: ```sql -- 创建外部链接 CREATE LINKED SERVER your_linked_server TO 'your_restore_db'; -- 查询并插入数据 INSERT INTO your_production_table SELECT * FROM your_linked_server.your_schema.your_table; ``` 此方法适用于需要将特定数据从恢复库迁移到生产库的场景。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值