在OLTP系统中,特别是高并发环境下,要求事务尽量晚的锁住资源(一般为一行要修改的记录),尽量早的释放资源(commit)。但有时应用程序的BUG或者其他原因,有一个SESSION总是不释放资源,特别是锁住核心帐户这种表的一行记录,可以在很短的时间内让locked的SESSION暴涨,造成系统负载上升,SESSION上升,影响系统的稳定性。这时候以最快的速度找出根锁(就是最初那个锁住资源的SESSION)并KILL掉是最好的解决方法。以下脚本是我开发的自动化杀根锁的SHELL脚本和存储过程,好东西就要分享
程序包:
脚本目的:
找出锁的根,自动KILL掉,适用于单节点和RAC
特点:
自动找出要KILL掉的根锁(ROOTLOCK)
所有LOCKED和KILLED_ROOTLOCK都有记录
并行运行,前一个没有运行完成后一个不会自动启动
初始化:
在sqlplus中运行pkg_mail_tools.sql,生成发送EMAIL的存储过程,注意要改一下存储过程中的邮件服务器的IP和端口,如果不想发送则把monitor_kill_rootlock.sh脚本中发送的几命令去掉
使用table_create.sql创建表
在SYS用户创建存储过程prc_monitor_kill_rootlock.sql
在操作系统oracle中创建shell脚本monitor_kill_rootlock.sh
把monitor_kill_rootlock.sh放入crontab中运行
表说明:
MONITOR_KILL_ROOTLOCK_CONF
配置文件,各值说明,注意ID 101-199只能用于节点的IP
ALERT LOCK NUMBER 数据库有多少TX锁开始KILL
RAC NODE NUMBER 节点数,默认3节点
LOCAL HOST IP 脚本布置在哪个主机上,主要是RAC环境要注意
101 1 节点一的IP
102 2 节点二的IP
103 3 节点三的IP
如果多于3个节点,可以再加,例如节点4
104 4 节点四的IP
MONITOR_KILL_ROOTLOCK_CUR
每次运行都会先清空,再插入最新的锁详细信息,用于分析
MONITOR_KILL_ROOTLOCK_LOG
历史日志文件
MONITOR_KILL_ROOTLOCK_TEMP
临时文件
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23250928/viewspace-1042526/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/23250928/viewspace-1042526/