目录
问题背景
在进行达梦DSC集群的搭建学习中,实例初始化报错,日志如下
initdb V8
db version: 0x7000c
file dm.key not found, use default license!
License will expire on 2025-05-27
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
log file path: +DMLOG/DSC0_LOG01.log
log file path: +DMLOG/DSC0_LOG02.log
log file path: +DMLOG/DSC1_LOG01.log
log file path: +DMLOG/DSC1_LOG02.log
write to dir [+DMDATA/data/DSC].
fsm_file_add group_id 1, file_id 0, size_in_pages 320000, path +DMDATA/data/ROLL.dbf failed, code -7004
Please check whether exist file or directory with the same name or view the log for more infomation, code:[-7014]
fail to init db.
排查过程
在一开始看到报错信息时,首先关注到了实例初始化失败的提示
Please check whether exist file or directory with the same name or view the log for more infomation
于是排查的思路就往是否存在这个文件或目录的方向走了,
/home/dmdba/dmdbms/bin/dmasmtool DCR_INI=/home/dmdba/config/dmdcr.ini
ls +DMDATA/data/
进入ASM中发现,+DMDATA/data目录下已经生成了部分的数据文件,那么目录不存在的可能性算是已经排除掉了,也从侧面说明数据磁盘是有权限可供dmdba用户访问的。
再仔细阅读报错提示的上文,fsm_file_add...+DMDATA/data/ROLL.dbf failed引起了我的注意,看来这一阶段是想要添加实例相关的数据文件,但是没有完全成功,失败点在于生成ROLL.dbf文件上。
根据关键词”size_in_pages”,开始转换思路,推测是不是参数文件分配的大小有问题?是否超出了实际的磁盘大小?
按照这个思路,查看初始化文件有关size大小分配的参数
cat /home/dmdba/config/dminit.ini |grep SIZE
可以明确的一点是,以上这些带有size标识的参数,会在实例初始化的时候用到,比如system_size,就是指的 SYSTEM.DBF 文件大小。而在初始化实例报错的时候,进入到ASM中查看,发现其实已经有部分的数据文件是生成成功的了,分别是dm.ctl,system.dbf,main.dbf这三个文件,报错是在系统准备生成roll.dbf文件的时候。roll.dbf的文件大小是由roll_size这一参数来控制的,通过查看参数文件配置,发现roll_size的取值居然有10G!
查看ASM磁盘大小,发现当前的DATA盘,也只有10G,这就能解释了上面为什么实例初始化会报错了。
dmasmcmd
listdisks /dev/
修改参数值,重新初始化实例
/home/dmdba/dmdbms/bin/dminit control=/home/dmdba/config/dminit.ini
出现报错,发现是css和asm 服务未启动
/home/dmdba/dmdbms/bin/dmcss DCR_INI=/home/dmdba/config/dmdcr.ini
/home/dmdba/dmdbms/bin/dmasmsvr DCR_INI=/home/dmdba/config/dmdcr.ini
启动日志如下
查看服务进程
重新执行初始化实例成功
总结
碰到陌生的问题时,多围绕报错日志来排查,提取出关键词,结合官方文档,总能找到正确的解决思路
附:达梦数据库官网
达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台