注册
重做日志丢失/损坏后,如何安全恢复数据库?
培训园地/ 文章详情 /

重做日志丢失/损坏后,如何安全恢复数据库?

Nearly 2025/11/03 224 0 0

1.概述

近期,本人很荣幸参与了为期三天的DCA培训课程。在参与培训之前,我对达梦数据库的认知大多停留在“基础SQL执行”和“数据迁移”和层面,缺乏对达梦数据库系统性的学习和理解。通过本次DCA的培训,我对达梦数据库的基础结构、运行方式、配置和管理有了初步的认识。
下面我将通过 “重做日志丢失/损失后,如何安全恢复数据库?” 这一主题,进行深入的研究和学习。

2.什么是重做日志

达梦数据库的重做日志(redo Log)是实时记录所有事务对数据库数据修改操作的二进制文件,无论是执行插入、更新、删除、还是表结构修改,只要操作会改变数据库的数据,都会写入到重做日志中。它是保障数据一致性和实例可用性的“核心基础设施”,其核心的原理是先按照事务的先后顺序写入到redo Log,再到空闲时批量刷到实际数据文件中。当系统崩溃时,可以通过重演已提交的事务的修改顺序来恢复数据。
达梦数据库中每个实例默认有两个重做日志,默认两个日志文件为DAMENG01.log、DAMENG02.log。这两个文件会循环使用,每个文件默认大小为256MB(可通过log_size参数调整),可以根据实际业务需要增加文件数量和删除文件数量(系统默认最少两个日志)。
综上所述,重做日志对于数据库至关重要,它能在系统故障时或介质故障时,进行数据库的恢复。

3.模拟重做日志丢失

  • 备份重做日志
cp TESTDMDB01.log TESTDMDB01.bak.log
cp TESTDMDB02.log TESTDMDB02.bak.log

image.png
image.png

  • 删除重做日志
rm TESTDMDB01.log
rm TESTDMDB02.log

image.png
重启数据库,提示缺少重做日志文件,无法启动
image.png
image.png

  • 修改dm.ini文件中的PSEG_RECV参数

修改dm.ini文件中PSEG_RECV参数为0
image.png

PSEG_RECV 参数释义:
系统故障重启时,对活动事务和已提交事务的处理方式。
0:跳过回滚活动事务和 PURGE 已经提交事务的步骤。
1:回滚活动事务并 PURGE 已经提交事务;
2:延迟 PURGE 已提交事务,延迟回滚活动事务;
3:回滚活动事务,延迟 PURGE 已提交事务。

4.初始化新的实例

  • 查看源实例参数

在数据库目录下找到dminitXXXXX.log(例如dminit20210103150648.log)文件查看参数。
image.png

  • 初始化新的实例

根据4.1中获取到的参数信息,初始化一个新的实例,确保参数一致,比如页大小、大小写敏感、字符集等

#新的实例在另外一台服务器
./dminit path=/dm8/data charset=0 extent_size=16 db_name=TESTDMDB instance_name=TESTPROD port_num=5239 sysdba_pwd=Dameng@123 sysauditor_pwd=Dameng@123 log_size=256

image.png

  • 启动新的实例
#新的实例在另外一台服务器
./dmserver /dm8/data/TESTDMDB/dm/ini
#启动完以后会生成重做日志文件,可以直接ctrl+c关闭数据库

image.png

  • 将新的redo文件拷贝到源实例
#拷贝到源实例数据库文件夹下,ip和路径根据实际情况修改
scp TESTDMDB0*.log dmdba@XXX:/dm8/data/TESTDMDB

image.png

5.修改db_magic和pemnt_magic的值

  • 查看源实例db_magic和pemnt_magic的值
#源实例所在的服务器
./dmmdf TYPE=1 FILE=/dm8/data/TESTDMDB/SYSTEM.DBF

image.png

  • 修改新的重做日志的db_magic和pemnt_magic的值
#源实例所在的服务器
./dmmdf TYPE=2 FILE=/dm8/data/TESTDMDB/TESTDMDB01.log
./dmmdf TYPE=2 FILE=/dm8/data/TESTDMDB/TESTDMDB02.log
#输入6修改db_magic,输入12修改pemnt_magic

image.png
image.png

同理第二个重做日志文件也需要修改
image.png
image.png

  • 启动数据库

image.png
此种情况重启的数据库可能无法进行正常的读写操作。即使可以正常读写操作,可能存在一些未知的问题。为了数据库的稳定运行,建议重建新库,尽快将数据迁移到新库中。

  • 如果不修改直接启动会报错

image.png

6.问题汇总

  • 配置完所有步骤后启动还是报错

如下错误:
image.png

查看启动日志发现:
image.png
可以使用dbcheck工具检查数据文件是否有损坏:

./dmdbchk path=/dm8/data/TESTDMDB/dm.ini

确保步骤没问题,新创建的实例参数也一致。若一切正常,还是无法启动,可能是数据库版本的原因,建议采用备份恢复的方式,将故障库的备份文件和归档日志文件拷贝到新创建的实例下,进行备份+归档的还原操作。
具体备份还原可以参考:
https://eco.dameng.com/document/dm/zh-cn/ops/physical-backup-restore.html

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服