love wife love life —Roger的Oracle/MySQL/PostgreSQL数据恢复博客

Phone:18180207355 提供专业Oracle/MySQL/PostgreSQL数据恢复、性能优化、迁移升级、紧急救援等服务

达梦数据库学习笔记之 — DM数据库第一次异常恢复(redo log误删除)

达梦数据库的Redo log跟Oracle有些不同,虽然名称上差不多,作用也类似,但是还是有差差别。

在达梦数据库中有日志包的概念,主从同步时是以日志包的形式来进行;其中达梦也有lsn,这跟检查点有关(oracle中为scn)。

如果redo 日志缓冲区没有实际数据,即使除非完全检查点,我们可以看到,实际上lsn也不会发生改变。

我这里测试环境中,当前正在写入的是enmotech01.log 这个redo文件,尝试把另外2个未写入的redolog 删掉试试。

可以看到,当把其他redo log删掉之后,达梦数据库也无法启动了(数据库mount 也不能了),如下是后台日志的报错:

针对这种场景下,如何进行恢复呢? 根据达梦的手册,可以通过dmmdf工具来协助完成恢复。

1、获取原来数据库的db_magic和pement_magic

2、通过dbinit初始化一个跟原库一样的实例

3、将新实例创建的redo 复制到老环境

4、通过dmmdf修改 被复制redo log的magic信息

发现大小不一致,还不行。通过dminit 去初始化发现logfile最大支持2G的size,可是我这里之前resize可以3g呢? 很奇怪了。。。

到这里我准备换个思路。直接将原库现存的一个redo log复制不就好了吗 ?

由于是同一个库,因此magic号就不在需要修改了:

根据redo log切换重用的规律,修改fil_id和g_next_seq 即可。 下面来试试看能否mount 数据库。

可以看到已经成功mount 数据库实例来,此时后台日志显示也是正常:

最后让我们一起来见证奇迹吧,open 数据库:

自此,完成了人生的第一次达梦数据库的异常恢复。

最后简单总结一下:

1、redo日志不存在或者损坏,实例是无法mount的,这跟Oracle不同,mount的时候只是加载控制文件。

2、dmmdf工具可以用来修改一些文件,比如redo log,但是有些信息是无法修改的。

3、达梦数据库没有增量检查点的说法,不过默认180s 会触发一次,同时会控制每次flush page的数量等等;关于检查点方面的参数调整;

还需要结合实际业务进行压测调整。

 

Leave a Reply

You must be logged in to post a comment.