
正文
oracle存储过程死锁,oracle存储过程停不下来
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
oracle,存储过程报错,实现杀掉死锁进程,求大牛
1、第一步:尝试在sqlplus中通过sql命令进行删除,如果能够删除成功,则万事大吉。
2、用orakill杀死线程,orakill是oracle提供的一个可执行命令,语法为:orakill sid thread 其中:sid:表示要杀死的进程属于的实例名 thread:是要杀掉的线程号,即第3步查询出的spid。
3、在V$ACCESS视图中找到要停止进程的SID:SELECT SID FROM V$ACCESS WHERE NAME=存储过程名称; 在V$SESSION视图中查找到查出SID和SERIAL SELECT SID,SERIAL#,FROM V$SESSION WHERE SID=刚才查到的SID。
4、ID and b.object_name = 表名;用上面 的语句找到存储过程中主要用插入表的sid 和SERIAL 然后用下面的语句杀掉。alter system kill session sid ,SERIAL#;如果杀不掉的话,等所有人释放,或者从启服务。
5、其中username ,counter ,rolename 是传入参数,传入参数不能赋值,即第8行语句有问题,建议删除。建议在plsql工具中编辑,方便。
相关问答
Q1: 数据库死锁产生的原因?
1、产生死锁的原因主要是:(1)系统资源不足。(2) 进程运行推进的顺序不合适。(3)资源分配不当等。如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。
2、死锁的预防在数据库中,产生死锁的原因是两个或多个事务都已封锁了一些数据对象,然后又都请求对已为其他事务封锁的数据对象加锁,从而出现死等待。防止死锁的发生其实就是要破坏产生死锁的条件。
3、多线程是很容易造成死锁,一般情况下死锁都是因为并发操作引起的。
4、这样,死锁就形成了。您不能进入被我锁定的B记录,从而继续停留在A记录。我不能进入正被您锁定的A记录,从而继续留在B记录。互相等待对方释放锁定的记录,而不能释放自已所在的记录,从而无限期等待。
Q2: 咨询一个问题:oracle产生了死锁,很多表被锁住了,如何查找引起死锁的源头...
1、锁粒度:锁粒度通常是指锁定的数据范围大小,如果锁的粒度不合理,例如过大或过小,就可能导致死锁或锁表的问题。通常建议在进行并发操作时,使用尽可能小的锁粒度,以避免死锁或锁表的问题。
2、Lockwait:死锁的状态,如果有内容表示被死锁。Status: 状态,active表示被死锁 Machine: 死锁语句所在的机器。Program: 产生死锁的语句主要来自哪个应用程序。2)用dba用户执行以下语句,可以查看到被死锁的语句。
3、你要先查一下是那个会话那个sql锁住了表,有可能这是正常业务需求,不建议随便KILL session,如果这个锁表是正常业务你把session kill掉了会影响业务的。建议先查原因再做决定。
4、最好把日志记录贴出来。死锁一般是不正确的更新造成的。最简单的就是for update 操作完,没有释放。
关于oracle存储过程死锁和oracle存储过程停不下来的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。






