注册
dmdbchk
技术分享/ 文章详情 /

dmdbchk

2026/08/14 81 0 0

一、功能简介

dmdbchk 是 DM 提供的用于检查数据库完整性、正确性的命令行工具。在服务器正常关闭后的脱机情况下,用户可以使用 dmdbchk 对数据库进行校验,包括校验 DM 数据库内部的物理存储结构是否正常,对象信息是否合法等。
除此之外,dmdbchk 工具还可以检测并删除操作系统中残留的信号量和共享内存,避免达到操作系统上限后数据库服务无法启动。在服务器启动的联机情况下,用户可以使用 dmdbchk 对数据库的单个数据文件进行校验,需设置参数 FILE_PATH 才可以在联机情况下校验。
用户也可以使用 dmdbchk 对数据库中制定的页信息进行校验,支持联机检测,该种方式需设置参数 PAGES_FILE。

检验的内容具体包括五方面:

1、数据文件合法性检验
数据文件校验只校验数据文件大小。如果数据库文件实际大小大于或等于文件头中记录的大小,则合法。

2、索引正确性校验
索引检验包括:普通表 B 树索引校验、LIST 表扁平 B 树索引校验、列存储表索引校验。校验内容具体包括:B 树的层次、层次关系,每层的内部页、叶子页以及页之间的前后链接关系,每个页的页头信息(如页类型等)等。

3、对象 ID 合法性校验
对象 ID 校验包括数据库内的所有对象的 ID 检验。对象包括:索引、表、约束、存储过程、模式、同义词、用户等。如果从系统表中查出的对象 ID 小于库的 ID 预留页中记录的该类型对象的下一分配 ID,则合法。因为库的 ID 预留页中记录的是各类型对象下一个新分配对象将使用的 ID,因此若系统表中的对象 ID 大于或等于该 ID,说明库已损坏。

注意
dmdbchk并不能检查出用户实际数据的正确性,如果数据文件被手动人为修改,正好修改到的是用户数据部分,是检查不出来的。

4、指定页校验
用户通过设置参数 PAGES_FILE 对数据库中指定的页信息进行校验。PAGES_FILE 可以赋值为一个文本文件地址,该文本文件包含需要校验的所有页号,系统依据此对指定页信息进行校验。用户也可以使用 PAGES_FILE=dbchk_err_pages.txt 对失败的页重新发起校验,避免正在刷盘的页误报校验失败。

5、残留信号量和共享内存的检测及删除

一般 Linux 下默认可创建的信号量个数为 128 个,共享内存为 4096 个。DM 数据库服务器正常退出的情况下,会将创建的信号量或共享内存删除,但如果服务器异常退出,这些信号量及共享内存会一直留在操作系统中直到通过手工方式删除。如果残留的信号量或共享内存个数达到操作系统上限,服务器再次启动时,会因为创建信号量或共享内存失败而无法启动成功,因此在本工具中提供对 Linux 残留信号量和共享内存的检测及删除命令。

校验完毕后,dmdbchk 会在当前目录下(dmdbchk 所在目录)生成一个名为 dbchk_err.txt 的检查报告,供用户查看。此外会在 dbchk_err.txt 所在目录下生成 dbchk_err_pages.txt 损坏页检测报告,仅包含页损坏统计信息,供用户对照损坏页信息进行修复。

该工具位于安装目录的 /dmdbms/bin 目录下。

二、使用 dmdbchk

dmdbchk 工具需要从命令行启动。找到 dmdbchk 所在安装目录 /dmdbms/bin,输入 dmdbchk 和参数后回车。

dmdbchk 内存占用与 INI 参数 BUFFER 和 RECYCLE 有关。如果 dmdbchk 占用内存过大可适当调小这些参数,不会影响校验结果,但参数过小会影响 dmdbchk 的性能。完成 dmdbchk 校验后需将参数调整回原值避免影响服务器的正常使用。

注意
dmdbchk工具不同的参数用法也不同,如果是校验数据库的参数,则要求必须是经过初始化,且正常关闭的数据库,才能被dmdbchk工具校验,否则dmdbchk会报错退出。 例如,正常关闭/dmdata/dmdb目录下数据库后,使用dmdbchk对数据库进行校验。

正常关闭 /dmdata/dmdb 目录下数据库后,使用 dmdbchk 对数据库进行校验。

关闭数据库:
image.png

进行校验: ./dmdbchk PATH=/dmdata/dmdb/dm.ini
image.png

检查报告:
image.png

三、查看 dmdbchk 参数

dmdbchk 使用简单灵活。可使用“dmdbchk HELP”快速查看 dmdbchk 版本信息以及参数用法。

image.png

四、dmdbchk 报告解读

dmdbchk 校验数据库的报告内容分为七部分:一 dmdbchk 版本信息;二开始标志;三数据文件校验结果;四索引校验结果;五对象 ID 校验结果;六结束标志;七错误总数。

dmdbchk 检测信号量或共享内存的报告则比较简单,分为三部分:一 dmdbchk 版本信息;二系统中所有信号量或共享内存的检测结果;三各项结果总数归类。

image.png

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服