【DB2】DB2启动失败报错SQL1042C
在本地某次启动db2时报错SQL1042C,具体报错如下
[db2inst1@standby ~]$ db2start
05/07/2025 16:32:53 0 0 SQL1042C An unexpected system error occurred.
SQL1032N No start database manager command was issued. SQLSTATE=57019
在网上百度到说是需要进行db2iupdt db2inst1
来更新实例,于是进行db2iupdt
尝试启动还是报一样错,百度无果,只能查看诊断日志来定位,一开始只看到最后一行,以为是lock 文件的问题,但是删除和修改权限都不行
将日志再往上翻发现了有几个Error信息,里面写道Security-related files do not have required OS permissions
,怀疑是某些文件权限不足导致,下面又写道DATA #1 : File name, 37 bytes /home/db/db2inst1/sqllib/adm/fencedid DATA #2 : String, 38 bytes sqllib/adm/fencedid not owned by root. DATA #3 : String, 27 bytes Run db2iupdt command first.
大意是fencedid文件权限不属于root
我们来查看该文件的具体权限,发现其属于db2inst1
将其权限修改为root,启动成功
在之前还遇到过好几次SQL1042C的问题,在此一并总结
1.由于内存或者句柄等限制导致启动失败,其报错信息由于涉密在此不详述,大体关键字为limits等
该问题需要修改 /etc/sysctl.conf
以下为参考
fs.file-max = 6815744
kernel.sem = 10000 10240000 10000 1024
kernel.shmmni = 4096
kernel.shmall = 1073741824
kernel.shmmax = 751619276800
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 16777216
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.wmem_default = 16777216
fs.aio-max-nr = 6194304
vm.dirty_ratio=20
vm.dirty_background_ratio=3
vm.dirty_writeback_centisecs=100
vm.dirty_expire_centisecs=500
vm.swappiness=10
vm.min_free_kbytes=524288
net.core.netdev_max_backlog = 30000
net.core.netdev_budget = 600
#vm.nr_hugepages =
net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.default.rp_filter = 2
net.ipv4.ipfrag_time = 120
net.ipv4.ipfrag_low_thresh = 41943040
net.ipv4.ipfrag_high_thresh = 40894464
net.ipv4.ipfrag_max_dist = 1024
kernel.panic_on_oops=1
sysctl -p生效
2.还有一个是由于数据库的cfg和/etc/hosts不一致,报错是SQL6048N
SQL6048N A communication error occurred during START or STOP DATABASE MANAGER processing.
SQL1032N No start database manager command was issued. SQLSTATE=57019
查看db2nodes.cfg和/etc/hosts的主机名不一致
将db2nodes.cfg中的主机名修改为/etc/hosts中的主机名解决