dm8非current重做日志生成方法

作为一名合格的DBA,主要有三大任务:

1.保证实例/数据库可以正常启动 --故障处理(数据库各文件丢失或损坏的情况下,可以进行修复,运行过程中的故障解决)

2.保证实例/数据库可以高效运行 --性能优化(占据大量的DBA时间,要求也特别高,但是保证实例/数据库启动是基础工作)

3.保证极端情况下的数据恢复 -备份恢复

前面一些文章中已经描述了初始化参数文件dm.ini和控制文件dm.ctl的修复方法,本次开始,逐步动手掌握其他各类文件丢失情况下的修复。

本单节是对非当前重做日志丢失或损坏情况下的修复。

 

查询所有的重做日志文件,找到非当前的重做日志

select nvl2(b.cur_file,'CURRENT','INACTIVE') ifcurrent,

a.file_id,a.path,a.client_path,a.rlog_size

from v$rlogfile a left JOIN v$rlog b ON a.file_id=b.cur_file;

当前的重做日志是mesdb01.log,因为重做日志循环写,所以mesdb02.log的重做日志不存在任何事务,先从非活动的重做日志丢失或损坏做起。

手工删除/dbdata/dmdata/mesdb/mesdb02.log文件,然后重启实例

会提示重做日志不存在,从而启动失败。

此时,有两种方法可以重新生成此文件,一是新生成一个数据库,把新数据库的重做日志拷贝过来,还有一种是拿现有数据库中的mesdb01.log来替换,两种方式都进行测试,先以从本机的current日志进行测试。

cp mesdb01.log mesdb02.log

然后尝试启动数据库:

启动过程中,需检验重做日志的内容,所以启动失败,查看运行日志:

根据提示,进行mesdb02.log的fil id检查失败,即文件的序列号失败。使用dmmdf进行文件ID的查看和修改

因为从mesdb01.log上拷贝过来,此文件的ID为0,所以修改此值为1:

输入y,然后重新启动数据库:

此时就可以正常启动了。

再以从其他数据库拷贝文件的方式进行测试。

因为在生产环境中,可能存在重做日志大小不一致的情况,所以这里模拟生成一个和本次测试大小不一致的重做日志先进行测试:

先删除当前实例的非当前重做日志,再生成一个page_size,extent_size,日志文件本身大小均不一样大小的数据库,并拷贝重新生成的重做日志file_id为0的文件。

原文件和拷贝过来的文件对比如下:

 

直接启动数据库,验证哪些参数对于实例启动来说是必须的,启动时,提示只有file_id值检验错误,直接修改再启动:

后台日志中提示db_magic,permanent_magic检验错误,再修改这两个值和mesdb01.log一致,启动数据库:

查看后台日志,也无任何报错信息。经过测试,在dm8中,只需要修改file_id,db_magic,permanent_magic三个参数即可。

总结:

1.对于非当前重做日志文件,因为实例虽然在运行过程中持有文件的句柄,但是并不实际向文件中写入内容,所以生成较为简单,不管何种形式的文件补齐,只需要修改file_id,db_magic,permanent_magic三个参数

2.控制文件中只记录重做日志的位置,不记录大小

3.重做日志文件的大小记录在重做日志的文件中,v$rlogfile中查询到的大小也是从重做日志文件本身进行查询。

达梦社区:https://eco.dameng.com

posted @ 2022-07-11 21:17  ly_nye  阅读(89)  评论(0)    收藏  举报