求教,db2中能不能通过agentid得到进程的pid,比如某个应用始终force不掉,force all也不行,日志还在持续增长,这时候知道应用的agentid,有没有办法知道它属于哪个进程,即pid,kill掉这个进程,有大神知道吗?
db2 9.5之後已經變為線程模型,所以你看到得agent都是在db2sysc的進程裏面。如果殺的話只能整體殺掉,所以不要這麼幹。
收起db2是线程级的,主进程只有db2sysc吧,
从db2pd -d DBNAME -agents 里查到agentid对应的apphandle,force掉这个apphandl不行么?
从经验看,遇到日志不停的增长,force application不起作用的情况,最好的办法是等待;如果担心日志空间不够的话可以去增加logsecond,这个参数立即生效;
另外建议设置参数NUM_LOG_SPAN,它的值要小于logprimary+logsecond的和,这样在日志被用满之前数据库会自己把这个应用回滚掉;
最差的办法是重启数据库,前提是你有充足的恢复时间,即使数据库损坏,你也可以接受并有处理方案。
虽然DB2 9.5/9.7之后是线程模型了,但是还是有办法得到该DB2线程的宿主应用进程的pid的,有了agentid之后首先通过db2top 或db2pd的apinfo得到它的Client pid/Application PID,然后ps去根据对应的db2pd进程去关联应用进程就行了。记住杀的时候一定要先kill应用进程再force DB2的进程。。。
收起