在本地某次啟動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中的主機名解決