重做日志(redo日志)是实时记录着数据库对象的增、删、改操作的日志文件,所以也叫联机日志文件,数据库在正常运行的情况下是用不上重做日志的,但数据库在发生故障停机,在恢复数据库服务时,就需要用到重做日志将故障前的操作进行恢复。
但如果重做日志因某种原因丢失或损坏,则数据库将无法启动,需要将重做日志恢复后,才能正常启动数据库服务。单机重做日志恢复流程是先利用dminit+时间.log文件中故障数据库的信息,去重新初始化库,新初始化库会产生两个与原有数据库同名同大小的重做日志文件;再将此两个重做日志copy到要恢复的数据库的目录下;然后利用dmmdf工具将着两个重做日志的db_magic的值改为原重做日志的db_magic值;这时再重启数据库就能正常启动了。
---------------------------------------------------------------------------------------------------------------------------------
目录
一、测试前准备
1. 启动库,查看故障前的数据情况:
2. 模拟重做日志出现意外丢失或损坏,可以将DAMENG0*.log文件移到其他目录下:
[dmdba@hsdmdb ~]$ cd /home/dmdba/dmdbms/data/DAMENG
[dmdba@hsdmdb DAMENG]$ mv DAMENG0*.log /mvfile
此时重启数据库服务,就不能正常的启动了:
[dmdba@hsdmdb DAMENG]$ cd ../../bin
[dmdba@hsdmdb bin]$ ./DmService restart
二、恢复redo日志
1. 查看故障数据库的信息,在dminit+时间.log文件中显示:
[dmdba@hsdmdb DAMENG]$ cat dminit20220215112000.log
2. 利用此信息,重新初始化一个新的数据库:
[dmdba@hsdmdb bin]$ ./dminit path=/dm8/data page_size=16 charset=0 port_num=5237 db_name=DAMENG instance_name=DMS
[dmdba@hsdmdb bin]$ ll /dm8/data/DAMENG
3. 新初始化的实例,会生成两个redo日志文件DAMENG01.log和DAMENG02.log,将这两个redo日志文件cp到故障库的目录下:
[dmdba@hsdmdb DAMENG]$ cp DAMENG0*.log /home/dmdba/dmdbms/data/DAMENG/
4. 进入$DM_HOME/bin下,进入dmmdf工具,查看使用说明:
[dmdba@hsdmdb bin]$ ./dmmdf help
5. 查看故障库的db_magic值:这里为db_magic=33988343
[dmdba@hsdmdb bin]$ ./dmmdf TYPE=1 FILE=/home/dmdba/dmdbms/data/DAMENG/SYSTEM.DBF
6. 修改DAMENG0*.log的db_magic值:
[dmdba@hsdmdb bin]$ ./dmmdf TYPE=2 FILE=/home/dmdba/dmdbms/data/DAMENG/DAMENG01.log
[dmdba@hsdmdb bin]$ ./dmmdf TYPE=2 FILE=/home/dmdba/dmdbms/data/DAMENG/DAMENG02.log
按系统提示输入:6,然后输入要修改的魔数值:33988343,最后输入:y,即修改完成并退出。
7. 此时打开原数据库服务,能正常启动,并能增、删、改、查数据,即恢复成功;在实际生产上遇到这种情况,使用了此方法启动数据库,需要重新建库作为生产库,将历史数据迁移至新的生产库。
[dmdba@hsdmdb bin]$ ./DmService start
更多资讯请上达梦技术社区了解: https://eco.dameng.com