仗劳勤学网

oracle存储过程锁死(oracle存储过程停不下来)

本篇目录:

oracle存储过程无法编译、表数据无法修改

在对数据的增、删、改操作时,有时会发现一直操作不成功,原因可能是表被锁死;或者存储过程无法编译。

【注】以上两步,可以通过Oracle的管理控制台来执行。

oracle存储过程锁死(oracle存储过程停不下来)-图1

一种是你的存储过程编辑没有成功,创建了,但里面有语法错误。还有一种是存储过程使用的表有结构上的改变,需要重新编译一下。解决方法如下:重新编译一下,如果不成功,就是有语法问题,你需要修改存储过程。

你怎么查的锁?v$locked_object?dba_ddl_locks查了没,可能是ddl的锁,如果不能编译,一编译就死,也可能是ddl的锁导致的,以前碰到过。如果能找到锁,那就简单了。

PL SQL 的查询结果本来就不能用于直接修改。请根据查询结果编写(使用)标准的SQL语句,让PL SQL执行(也就是发送给数据库服务器)来进行修改。或手动找到相关的表点右键,点“编辑数据”。

首先打开PL/SQL Developer软件,新建sql窗口。打开修改oracle存储过程,该存储过程有一个输入参数(pid)跟一个输出参数(name),即通过用户id查询用户名称并将名称返回。

oracle存储过程锁死(oracle存储过程停不下来)-图2

如何杀死oracle死锁进程

\x0d\x0a\x0d\x0a杀死进程:\x0d\x0aalter system kill session 137,233; (其中137,223分别是上面查询出的sid,serial#)\x0d\x0a\x0d\x0aPS.以上两步,可通过Oracle的管理控制台来执行。

用的是客户端登录,直接关掉客户端就可以了,因为你的客户端也是个session普通用户也可以,因为是你这个用户开启这个进程,那么你也可以关闭这个进程。尽量用dba权限的用户操作,还有可以到主机上 kill -9 spid 会更快。

一些ORACLE中的进程被杀掉后,状态被置为killed,但是锁定的资源很长时间不释放,有时实在没办法,只好重启数据库。现在提供一种方法解决这种问题,那就是在ORACLE中杀不掉的,在OS一级再杀。

务器的模式,如果你Kill掉ORACLE.EXE这个进程,将导致整个Oracle实例关闭,如同使用Shutdown abort命令一样。

oracle存储过程锁死(oracle存储过程停不下来)-图3

oracle表在什么情况下会被锁住

1、不会锁表 2 添加唯一约束不会锁表,但是在添加唯一约束时,会对表进行验证,如果表中已经存在重复数据,那么添加唯一约束就会失败。在验证的过程中,会对表进行读取操作,但是不会对表进行写入操作,因此不会引起锁表。

2、ORACLEEBS操作某一个FORM界面,或者后台数据库操作某一个表时发现一直出于假死状态,可能是该表被某一用户锁定,导致其他用户无法继续操作。

3、悲观锁:每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。

4、简单地说,锁是为了保证数据的一致性,锁不止存在于oracle,其他数据库一样有,只不过机制上可能大相径庭。至于什么样的操作会锁表,其实锁的种类很多,你所说的锁表大概说的是行级锁——也就是事务锁吧。

如何检测被锁住的Oracle存储过程

可用第三方工具检查错误。如以下存储过程:其中第六行故意少写了一个分号。然后执行后,会提示完成,这时可以去左边的树中找到这个存储过程,显示是有个红叉的。这时,可以右键,选择编辑。

可查看sys用户下所有存储过程名字 select text from user_source where name=XXX可查看该存储过程的内容 plSQLdevloper工具:左侧找到‘Procedures’,点开之后即可查看当前用户的所有存储过程。

打开PL/SQL,新建sql窗口 输入包体的用户名及包名,例如用户名.包名,选中右击,选择view spec & body查看,包体有两页,第1页为包里过程的目录,第2也为具体内容。

你是要知道存储过程整个sql句子?还是执行存储过程啊?查看存储过程完整的sql句子,一个很简单的方法:储过程名后面加个“.”,然后选中存储过程名称,单击右键,点击view或者edit即可。

到此,以上就是小编对于oracle存储过程停不下来的问题就介绍到这了,希望介绍的几点解答对大家有用,有任何问题和不懂的,欢迎各位老师在评论区讨论,给我留言。

分享:
扫描分享到社交APP
上一篇
下一篇