在达梦数据库的日常运维中,备份与还原是保障数据安全的关键操作。然而,在本人实际操作过程中,往往会遇到各种问题,影响备份还原的顺利进行。本文将详细介绍达梦备份还原过程中常见的问题,并提供相应的解决方法。
在之前遇到该场景时,我的想法是对整个库进行全量备份和增量备份,然后直接对该库进行全量和增量恢复。但是这里就犯了一个错误,就是如果有A和B两张表,A正常写入数据往前推进了,B表数据被误删,等你发现B数据被删除之后,A已经正常写入了很多数据。如果在这时使用之前的思路,会导致A表在B表被删除之后写入的数据全部丢失。这就造成了更严重的后果。
所以我们一个改变思路。就是创建一个临时库,然后将备份还原到临时库中,再从临时库中单独导出B表的数据,将数据导入到原始库中,这样子B表的数据恢复了,A表正常写入的数据也不会受影响。
所以我们接下来改进操作:
在这里,我准备两张表EMPLOYEE和表STUDENT。
两张表初始数据如下:
EMPLOYEE表:
STUDENT表:
首先我们需要先为该数据库创建一个全量备份。使用命令:
BACKUP DATABASE FULL TO full_backup_20250728 BACKUPSET '/data/test6/dljDmTest/dmdbms/dmdbms/data/dljDmTest/backup/full_backup/full_backup_20250728';·
为数据库创建一份全量备份。
再为这两张表分别添加几条记录:
再通过一下命令对其进行增量备份:
BACKUP DATABASE INCREMENT CUMULATIVE BASE ON BACKUPSET '/data/test6/dljDmTest/dmdbms/dmdbms/data/dljDmTest/backup/full_backup/full_backup_20250728' BACKUPSET '/data/test6/dljDmTest/dmdbms/dmdbms/data/dljDmTest/backup/incr_backup/incr_backup_2025072917' ;
此时我们删除掉表EMPLOYEE中dept_id为10的数据DELETE FROM DLJ.EMPLOYEE WHERE DEPT_ID = '10';
:
此时EMPLOYEE中的数据为:
此时我们继续再STUDENT表中添加数据:
首先我们提前初始化好了一台临时实例tmp。基础配置均已配好。
执行命令对临时库进行全量恢复:
RESTORE DATABASE '/data/test6/dljDmTest/dmdbms/dmdbms/data/tmp/dm.ini' FROM BACKUPSET '/data/test6/dljDmTest/dmdbms/dmdbms/data/dljDmTest/backup/full_backup/full_backup_20250728';
RECOVER DATABASE '/data/test6/dljDmTest/dmdbms/dmdbms/data/tmp/dm.ini' FROM BACKUPSET '/data/test6/dljDmTest/dmdbms/dmdbms/data/dljDmTest/backup/full_backup/full_backup_20250728';
RECOVER DATABASE '/data/test6/dljDmTest/dmdbms/dmdbms/data/tmp/dm.ini' UPDATE DB_MAGIC;
此时全量恢复已经完成,此时我们启动实例,查看实例中的数据。
发现数据正是全量备份时的数据。
然后我们再进行增量数据恢复:
执行命令对临时库进行增量数据恢复:
RESTORE DATABASE '/data/test6/dljDmTest/dmdbms/dmdbms/data/tmp/dm.ini' FROM BACKUPSET '/data/test6/dljDmTest/dmdbms/dmdbms/data/dljDmTest/backup/incr_backup/incr_backup_2025072917' with backupdir '/data/test6/dljDmTest/dmdbms/dmdbms/data/dljDmTest/backup/full_backup/full_backup_20250728';
RECOVER DATABASE '/data/test6/dljDmTest/dmdbms/dmdbms/data/tmp/dm.ini' FROM BACKUPSET '/data/test6/dljDmTest/dmdbms/dmdbms/data/dljDmTest/backup/incr_backup/incr_backup_2025072917';
RECOVER DATABASE '/data/test6/dljDmTest/dmdbms/dmdbms/data/tmp/dm.ini' UPDATE DB_MAGIC;
此时增量恢复已经全部完成,我们查看示例中的数据:
两张表中的数据均是增量备份前的数据。但此时我们不能将整个实例数据全部导入到原来的库,因为表STUDENT中的数据在EMPLOYEE数据被删除后还添加了数据,发现这时候的表中是没有这些数据的,我们不能将STUDENT表中新增的数据给覆盖掉。所以正确的做法是将EMPLOYEE表单独导出,然后导入到原始表中,只还原表EMPLOYEE。
我们通过dexp工具来到处表EMPLOYEE的数据。我们首先运行实例,然后在bin目录下使用以下命令:
./dexp USERID=SYSDBA@localhost:1108 FILE=employee.dmp LOG=employee.log TABLES=DLJ.EMPLOYEE DIRECTORY=/data/test6/dljDmTest/dmdbms/dmdbms/data/tmp/expdmp
参数解析:
USERID: 数据库的连接信息,必选。
FILE: 明确指定导出文件名称。
LOG: 明确指定日志文件名称。
DIRECTORY: 导出文件所在目录。
TABLES: 表名列表,导出一个或多个指定的表或表分区。
以下即表示导出成功。
到完成后,首先我们把原始表中的EMPLOYEE表数据删除,删除之后使用命令:
./dimp SYSDBA@localhost:1110 FILE=employee.dmp LOG=employee.log TABLES=DLJ.EMPLOYEE DIRECTORY=/data/test6/dljDmTest/dmdbms/dmdbms/data/tmp/expdmp
来导入数据,参数与到处数据参数相同。出现以下即表示导入成功。
我们通过可视化工具查看EMPLOYEE表中的数据:
发现数据已经成功恢复到了被误删除之前的记录,单表的误删恢复成功。
在执行数据库进行全量联机备份时出现了下列错误:
[-7169]:bakres与DMAP消息通信失败.
看到这个报错消息,我的第一反应是查看DMAP服务有无启动。于是首先前往bin目录下尝试启动DMAP服务。
但发现DMAP服务已经启动。此时我们尝试重启数据库和DMAP服务:
再次在disql中执行全量备份,发现仍然报错:
因为这个数据库安装后运行这多个实例,多个实例共享使用同一个DMAP服务,我在想会不会是端口设置错误,于是我们先排查这台服务器中的DMAP服务运行端口,通过命令:
./DmAPService status #查看dmap服务运行pid
ss -tnlp | grep "pid=2107430" #通过pid查看运行端口
发现dmap服务运行的端口为1109端口,我们再排查实例设置的dmap监听端口,通过查看实例下的dm.ini文件中的EXTERNAL_AP_PORT
参数即可查看:
发现这里配置的为默认配置4326,与1109没有对上,我们修改此端口号为1109,再次重新启动实例,再次进行全量联机备份,发现备份成功:
在临时库进行增量备份恢复时,出现了下述错误:
RESTORE DATABASE '/data/test6/dljDmTest/dmdbms/dmdbms/data/tmp/dm.ini' FROM BACKUPSET '/data/test6/dljDmTest/dmdbms/dmdbms/data/dljDmTest/backup/full_backup/full_backup_20250728';
通过查询产品文档发现:
即做增量备份还原需要扫描全量备份,如果全量备份和增量备份在不同目录,当用 base on 指定某个增备备份集作为基备份时会扫描不到需要使用到的全备,所以会报错“无基备份或无匹配基备份”。
我们可以通过with backupdir
来指定基备份搜索目录来指定基备份。:
RESTORE DATABASE '/data/test6/dljDmTest/dmdbms/dmdbms/data/tmp/dm.ini' FROM BACKUPSET '/data/test6/dljDmTest/dmdbms/dmdbms/data/dljDmTest/backup/full_backup/full_backup_20250728' with backupdir '/data/test6/dljDmTest/dmdbms/dmdbms/data/dljDmTest/backup/full_backup/full_backup_20250728'
使用上述命令后,再次执行增量恢复操作,即可成功
文章
阅读量
获赞