dm.ctl--达梦数据库控制文件是达梦数据库实例启动、运行的重要文件,丢失或损坏都会影响数据库的正常运行,本文的目标是解决控制文件损坏或者是丢失等情况下的解决方法。

达梦的控制文件是有多份备份的,其备份路径和数量由参数CTL_BAK_PATH(备份文件路径,默认是在主控制文件的下一级目录下)和CTL_BAK_NUM(备份文件数量)控制,系统默认只读取CTL_PATH参数定义的文件。

根据近期对数据库的操作,以及控制文件的备份文件生成时间来看,只在对表空间操作时会写控制文件,备份策略管理手册里有详细记录,这里不做描述。

对于控制文件本身,要了解丢失或损坏的情况下如何进行修复,那就需要先了解此文件记录了什么内容,达梦提供了dmctlcvt工具,可以将二进制的控制文件转换为文本,转换操作也比较简单,看一下帮忙信息即可

达梦传参数据类型不匹配不走索引问题 达梦数据类型转换_数据库

即可以将二进制的控制文件转换为文本文件进行观察,也可以将正确的文本文件转换成二进制文件,本文的依据也是利用此工具在不同场景下进行丢失或损坏的情况下,重新生成控制文件。

管理员手册中表明控制文件记录的内容主要是:

达梦传参数据类型不匹配不走索引问题 达梦数据类型转换_控制文件_02

通过转换为的二进制文件,可以发现,控制文件的主要内容,当然,文件内容较多,这里只摘取一部分信息进行展示,对于表空间和数据文件的信息,这里不做展示:

达梦传参数据类型不匹配不走索引问题 达梦数据类型转换_表空间_03

对于每个参数在数据库中的作用,在后续的验证过程中全部都验证一遍

下面进行验证,先查看每次控制文件写入的内容都是什么,先以简单的表空间online/offline两种状态变化时,控制文件的内容变化

达梦传参数据类型不匹配不走索引问题 达梦数据类型转换_数据库_04

经过测试,发现表空间的offline/online两次操作,也只是改变了表空间的状态以及修改时间,并未看到有管理员手册中说明的校验码,再尝试修改数据文件的扩展属性和大小

达梦传参数据类型不匹配不走索引问题 达梦数据类型转换_数据库_05

同样的,也可以看出,只有和时间、属性等有变化,并无控制文件校验码,后面添加数据文件、添加表空间、重启实例进行验证,均未发现有任何数字变化

接下来,将实例关闭,然后将控制文移动到其他位置,先对文本文件进行修改,再使用dmctlcvt工具转换成二进制文件,查看实例启动时是否会使用到这些参数

因为修改的参数比较多,这里不做过多验证过程的介绍,结果就是只有db_version这个参数在修改后存在问题,此参数在备份的控制文件中都有记录,只需要从其他控制文件中找回即可,在生产过程中,存在所有控制文件的备份文件丢失的几率非常小,即使所有的文件都找不到,达梦的版本也是固定的,联系原厂进行找回记录的具体版本即可。

假设当前的控制文件丢失的话,可以找到最近的控制文件备份,生成文本文件,检查所有的和表空间、数据文件相关的信息,结合实际环境中表空间、数据文件的具体信息,如果有变化,将变化依据已有的格式进行编辑,然后再用dmctlcvt TYPE=2 SRC=这里填写修改后的txt位置 DEST=/这里填写初始化参数文件中控制文件的路径/dm.ctl