一、事件起因:
各家mes接口不能正常发送
二、问题分析:
- 因前期出现过多次此问题,所以定位到PIP接口堵塞
- 重新查看PIP数据库管理,通过Web登录,但一直停留在PIP GUI登录界面,无法正常登录
- 分析为数据库数据满导致,查看日志分析/var/log/message
通过上述日志分析,是sybase的数据库PIP的日志文件满了,且无法再进行扩展logsegment,无法再往里面写入数据,导致所有数据写入及读取出现停滞状态。
查找第一次发生的时间点,报错为:
Jul 19 19:50:24 YCZBPIPRD SAPPIP_00[2524]: BY4 Database: Database error 1105 with FET access to table TRFCQSTATE Jul 19 19:50:24 YCZBPIPRD SAPPIP_00[2524]: BY0 Database: > [ASE Error SQL1105][SAP][ASE ODBC Driver][Adaptive Server Jul 19 19:50:24 YCZBPIPRD SAPPIP_00[2524]: BY0 Database: > Enterprise]Can't allocate space for object 'syslogs' in Jul 19 19:50:24 YCZBPIPRD SAPPIP_00[2524]: BY0 Database: > database 'PIP' because 'logsegment' segment is full/has no Jul 19 19:50:24 YCZBPIPRD SAPPIP_00[2524]: BY0 Database: > free extents. If you ran out of space in syslogs, dump the Jul 19 19:50:24 YCZBPIPRD SAPPIP_00[2524]: BY0 Database: > transaction log. Otherwise, use ALTER DATABASE to increase Jul 19 19:50:24 YCZBPIPRD SAPPIP_00[2524]: BY0 Database: > the size of the segment.
此期间并没有数据库备份等操作。
- 进入数据库,查看logsegment
- Free_pages无法进行extends
三、解决方案:
1、sybase监听端口查询
默认:Sybase 5000
在命令行中输入查询Sybase监听端口: select * from syslisteners
下载软件登录:sqladv-12_5
2、故障查找饼解决流程
处理步骤:
- 查找异常的进程:select * from syslogshold
- 查看此进程(spid)是什么:sp_who "222"
- 查看此进程是什么:sp_lock 222
- 杀掉此进程:kill 222
- 查看log是否恢复
- 查看语句:SELECT * FROM master..sysprocesses WHERE status LIKE '%lock%' or spid=222
- Kill后查询222这个SPID:已经没有了
详情:
再次查询syslogshold 仍然存在新的spid-655和210,继续kill即可,直到前期的堵塞都通开。如果kill一个后,多刷新几次,后面的都自动通开了,则不用kill了。
等kill完成,接口就通了,到PIP中查看一下
三、扩容log(在比较紧急且无法直接处理接口堵塞的情况下进行,优先进行下一步“二”)
登录Sybase
# su - sybpip
/sybase/PIP> isql -Usapsa -SPIP -X
Password: YczbPip0Sybase
1> use master
2> disk resize name ="PIP_log_001",size="2g"
3> go
1> alter database PIP log on PIP_log_001="2g"
2> go
文章评论