达梦数据库备份还原实战—误删数据如何精准恢复单表
一、引言
在日常运维中,最让人“心跳加速”的时刻莫过于——有人误删了某张表的数据。
更棘手的是:你发现误删时,其他业务表已经写入了大量新数据。如果直接对整个库做还原恢复,正常业务数据会丢失,后果更严重。
达梦数据库的表级联机还原功能,正是为解决这个痛点而生的。本文通过一个完整案例,演示如何在不影响其他表的情况下,精准恢复被误删的表数据。
二、备份还原的基本概念
达梦数据库的备份还原包括物理备份还原和逻辑备份还原。物理备份直接扫描数据库文件,拷贝有效数据页到备份集。
备份与还原的关系如图1所示:备份是将数据页和日志保存到备份集;还原是将备份集的数据页写回数据文件;恢复是通过重做REDO日志将数据库恢复到一致性状态。
联机备份生成的备份集包含备份期间产生的REDO日志;脱机备份正常关闭的库无需日志即可恢复。
三、案例:精准恢复被误删的单表
3.1 环境准备
-- 创建两张测试表
CREATE TABLE EMPLOYEE(ID INT, NAME VARCHAR(50), DEPT_ID VARCHAR(10));
CREATE TABLE STUDENT(ID INT, NAME VARCHAR(50), CLASS VARCHAR(20));
-- 插入初始数据
INSERT INTO EMPLOYEE VALUES(1, '张三', '10'), (2, '李四', '20'), (3, '王五', '10');
INSERT INTO STUDENT VALUES(1, '赵六', '一班'), (2, '钱七', '二班');
COMMIT;
3.2 创建备份
BACKUP DATABASE FULL TO full_backup_2025
BACKUPSET '/dmdata/backup/full_backup_2025';
第二步:增量备份
-- 插入一些新数据
INSERT INTO EMPLOYEE VALUES(4, '孙八', '30'), (5, '周九', '10');
INSERT INTO STUDENT VALUES(3, '吴十', '三班');
COMMIT;
BACKUP DATABASE INCREMENT CUMULATIVE
BASE ON BACKUPSET '/dmdata/backup/full_backup_2025'
BACKUPSET '/dmdata/backup/incr_backup_2025';
3.3 模拟误删
DELETE FROM EMPLOYEE WHERE DEPT_ID = '10';
COMMIT;
-- 此时STUDENT表继续正常写入
INSERT INTO STUDENT VALUES(4, '郑一', '四班');
COMMIT;
此时如果对整个库做还原,STUDENT表新增的两条数据将全部丢失。
3.4 精准恢复方案
核心思路:创建临时库 → 将备份还原到临时库 → 从临时库导出被误删的表 → 导入回生产库。
./dminit PATH=/dmdata/tmp DB_NAME=TMP INSTANCE_NAME=TMP
第二步:还原临时库
./dmrman
RMAN> RESTORE DATABASE '/dmdata/tmp/dm.ini'
FROM BACKUPSET '/dmdata/backup/full_backup_2025';
RMAN> RECOVER DATABASE '/dmdata/tmp/dm.ini'
FROM BACKUPSET '/dmdata/backup/full_backup_2025';
RMAN> RECOVER DATABASE '/dmdata/tmp/dm.ini' UPDATE DB_MAGIC;
第三步:恢复增量数据
FROM BACKUPSET '/dmdata/backup/incr_backup_2025';
RMAN> RECOVER DATABASE '/dmdata/tmp/dm.ini'
FROM BACKUPSET '/dmdata/backup/incr_backup_2025';
RMAN> RECOVER DATABASE '/dmdata/tmp/dm.ini' UPDATE DB_MAGIC;
第四步:导出被误删表的数据
启动临时库,导出EMPLOYEE表数据:
FILE=employee.dmp
TABLES=EMPLOYEE
第五步:导入回生产库
FILE=employee.dmp
TABLES=EMPLOYEE
TABLE_EXISTS_ACTION=APPEND
关键点:使用TABLE_EXISTS_ACTION=APPEND,新数据会追加到现有表中,不会覆盖生产库已有的数据。
四、方案优势
1.零影响:生产库全程在线,其他表不受任何影响
2.精准:只恢复被误删的表,不触碰其他数据
3.可逆:如果恢复后发现时间点不对,可以重新操作
五、注意事项
1.归档必须开启:联机备份要求数据库处于归档模式
2.备份策略要合理:建议每周一次全量备份,每天一次增量备份
3.备份文件分开存放:不要与源数据库放在同一磁盘
4.恢复前先校验:SELECT SF_BAKSET_CHECK('DISK','/path/to/backup')
六、小结
达梦数据库的表级联机还原功能,配合临时库恢复策略,为我们提供了一套优雅的“误删数据抢救方案”。关键是要提前建立完善的备份体系——全量+增量的组合备份策略,才能在关键时刻从容应对。
文章
阅读量
获赞
