1 缘由
服务器意外断电了,重新上电后发现DM数据库不能连接,提示网络通信异常,数据库拒绝连接。通过服务查看器发现数据库服务停止,并且手动启动失败,code=exited,status=1/failure。
2 问题排查
网上查资料说code=1,status=1可能是需要用dmdba用户启动,用root用户启动时会出现这个故障,同时建议通过/opt/dmdbms/bin/dmserver dm.ini的方式手动启动服务。
经过尝试,dmdba用户启动服务同样失败,使用命令行手动启动时,提示redo日志有invalid记录,启动失败,errocde=-723。至此查明故障原因是断电导致的redo日志损坏,从而引起的数据库服务启动失败。
3 故障修复
redo日志损坏无法自动修复,需要重建一个同样的实例,老替换redo日志文件。具体操作如下:
1)根据原服务的dminitxx.log中的记录生成一个新的实例:
#/opt/dmdbms/bin/dminit path=/home/dmdba/data charset=1
case_sensitive=0 port_num=5237
port_num=5237是需要和已有的端口错开。
2)启动新实例并退出。
启动新实例:
#/opt/dmdbms/bin/dmserver /home/dmdba/data/DAMENG/dm.ini
等输出system is ready时输入exit退出。
3)查看原库的db_magic
$./dmmdf type=1 file=/home/dmdba/data/DAMENG/SYSTEM.DBF
4)修改新库的db_magic值
$./dmmdf type=2 file=/home/dmdba/data/DAMENG/DAMENG01.log
$./dmmdf type=2 file=/home/dmdba/data/DAMENG/DAMENG02.log
5)将原库的redo日志改名备份,拷贝新库的redo日志
6)修改原库(5237) dm.ini 文件 PSEG_RECV=0
该文件内容较多,可以vim的使用:/PSEG搜索
7)将原库服务启动正常关闭后,再次将 PSEG_RECV改回 3
8)正常启动原库,修复完成
4 重启服务器,OK,数据库服务正常了。