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
rm TESTDMDB01.log
rm TESTDMDB02.log
重启数据库,提示缺少重做日志文件,无法启动
修改dm.ini文件中PSEG_RECV参数为0
PSEG_RECV 参数释义:
系统故障重启时,对活动事务和已提交事务的处理方式。
0:跳过回滚活动事务和 PURGE 已经提交事务的步骤。
1:回滚活动事务并 PURGE 已经提交事务;
2:延迟 PURGE 已提交事务,延迟回滚活动事务;
3:回滚活动事务,延迟 PURGE 已提交事务。
4.初始化新的实例
在数据库目录下找到dminitXXXXX.log(例如dminit20210103150648.log)文件查看参数。
根据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
#新的实例在另外一台服务器
./dmserver /dm8/data/TESTDMDB/dm/ini
#启动完以后会生成重做日志文件,可以直接ctrl+c关闭数据库
#拷贝到源实例数据库文件夹下,ip和路径根据实际情况修改
scp TESTDMDB0*.log dmdba@XXX:/dm8/data/TESTDMDB
5.修改db_magic和pemnt_magic的值
#源实例所在的服务器
./dmmdf TYPE=1 FILE=/dm8/data/TESTDMDB/SYSTEM.DBF
#源实例所在的服务器
./dmmdf TYPE=2 FILE=/dm8/data/TESTDMDB/TESTDMDB01.log
./dmmdf TYPE=2 FILE=/dm8/data/TESTDMDB/TESTDMDB02.log
#输入6修改db_magic,输入12修改pemnt_magic
同理第二个重做日志文件也需要修改
此种情况重启的数据库可能无法进行正常的读写操作。即使可以正常读写操作,可能存在一些未知的问题。为了数据库的稳定运行,建议重建新库,尽快将数据迁移到新库中。
6.问题汇总
如下错误:
查看启动日志发现:
可以使用dbcheck工具检查数据文件是否有损坏:
./dmdbchk path=/dm8/data/TESTDMDB/dm.ini
确保步骤没问题,新创建的实例参数也一致。若一切正常,还是无法启动,可能是数据库版本的原因,建议采用备份恢复的方式,将故障库的备份文件和归档日志文件拷贝到新创建的实例下,进行备份+归档的还原操作。
具体备份还原可以参考:
https://eco.dameng.com/document/dm/zh-cn/ops/physical-backup-restore.html
文章
阅读量
获赞
