文章目录

  • 前言
  • 一、redo日志是什么?
  • 二、恢复redo日志方法
  • 1.方法一:还原恢复
  • 2.方法二:替换REDO日志
  • 1、新键实例
  • 2、修改db_magic值和pemnt_magic值
  • 3、恢复数据库
  • 在这里插入图片描述 数据库已经启动起来了。
  • 总结



前言

在使用达梦数据库时,redo日志有时会损坏,被删除等各种问题,导致数据库异常,无法启动,本文讲解的是达梦数据库中redo日志重建方法


一、redo日志是什么?

达梦数据库REDO日志文件即重做日志文件,是数据在运行过程中正在使用的日志文件,所以又称为联机日志文件。它存储数据库的事务日志,以便系统在出现系统故障和介质故障时能够进行故障恢复。
删除REDO日志文件,则实例无法正常启动。

二、恢复redo日志方法

1.方法一:还原恢复

有备份文件和归档日志的情况下,使用“备份+归档”进行恢复,这是一种比较保险的恢复方式,可以达到完全恢复的效果,即数据能恢复到发生故障之前的那一刻。

2.方法二:替换REDO日志

没有备份和归档的情况下,可以选择替换REDO日志启动数据库,但是这种方案是不完全恢复,可能会丢失部分数据。
思路:

1、根据原故障库的信息重建一个实例
2、修改新实例redo日志的db_magic,pemnt_magic值
3、将修改redo复制回原故障库,重新启动

1、新键实例

1、查看原故障库的信息(在数据文件目录下可以看到,以dminit开头的log文件)

[dmdba@local92 DAMENG]$ more dminit20220306222659.log 
start init database: V8, 2022-03-06 22:26:59
init params:
	db path: /dm/dmdata/DAMENG
	db name: DAMENG
	auto overwrite: 0
	page size: 32768
	extent size: 32
	time zone: +08:00
	string case sensitive: 1
	charset: 0
	length in char: 0
	page check mode: 0
	page check algorithm id: 0
	priv flag: 0
	rlog enc flag: 0
	use new hash: 1
	blank pad mode: 0
	sec priv mode: 0
	huge with delta: 1
	rlog gen for huge: 0
	pseg_mgr_flag: 0
	char_fix_storage: 0
	sql_log_forbid: 0
	secur_flag: 1

2、在新环境中初始化新实例
注意:新实例的信息一定要和原故障库一致

[dmdba@local92 DAMENG]$ dminit path=/dm db_name=DAMENG page_size=32 extent_size=32 case_sensitive=1 
initdb V8
db version: 0x7000c
License will expire on 2022-09-25
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
 log file path: /dm/DAMENG/DAMENG01.log
 log file path: /dm/DAMENG/DAMENG02.log
write to dir [/dm/DAMENG].
create dm database success. 2022-03-16 16:36:24

2、修改db_magic值和pemnt_magic值

说明:db_magic:数据库魔数 pemnt_magic:数据库永久魔数
1、查看原故障库的db_magic值和pemnt_magic值
注意:用dm自带的工具dmmdf查看,更多使用方法加help查看

[dmdba@local92 DAMENG]$ dmmdf TYPE=1 FILE=/dm/dmdata/DAMENG/SYSTEM.DBF
dmmdf V8
**********************************************************
1 db_magic=1261011608
2 next_trxid=6878674
3 pemnt_magic=1437717675
**********************************************************
Please input which parameter you want to change(1-3), q to quit:

得到
db_magic=1261011608
pemnt_magic=1437717675

2、修改新实例的db_magic值和pemnt_magic值

[dmdba@local92 DAMENG]$ dmmdf TYPE=2 FILE=/dm/DAMENG/DAMENG01.log

先修改db_magic值

达梦库建索引 达梦数据库重建索引_数据库


达梦库建索引 达梦数据库重建索引_dba_02


再修改pemnt_magic值

达梦库建索引 达梦数据库重建索引_达梦库建索引_03


达梦库建索引 达梦数据库重建索引_database_04

3、恢复数据库

将修改后的REDO拷贝到负债库,并按照故障库的REDO日志命名,尝试启动数据库
用新的redo日志启动数据库

dmserver /dm/dmdata/DAMENG/dm.ini

达梦库建索引 达梦数据库重建索引_达梦库建索引_05

数据库已经启动起来了。

总结