本篇目录:
oracle存储过程无法编译、表数据无法修改
在对数据的增、删、改操作时,有时会发现一直操作不成功,原因可能是表被锁死;或者存储过程无法编译。
【注】以上两步,可以通过Oracle的管理控制台来执行。
一种是你的存储过程编辑没有成功,创建了,但里面有语法错误。还有一种是存储过程使用的表有结构上的改变,需要重新编译一下。解决方法如下:重新编译一下,如果不成功,就是有语法问题,你需要修改存储过程。
你怎么查的锁?v$locked_object?dba_ddl_locks查了没,可能是ddl的锁,如果不能编译,一编译就死,也可能是ddl的锁导致的,以前碰到过。如果能找到锁,那就简单了。
PL SQL 的查询结果本来就不能用于直接修改。请根据查询结果编写(使用)标准的SQL语句,让PL SQL执行(也就是发送给数据库服务器)来进行修改。或手动找到相关的表点右键,点“编辑数据”。
首先打开PL/SQL Developer软件,新建sql窗口。打开修改oracle存储过程,该存储过程有一个输入参数(pid)跟一个输出参数(name),即通过用户id查询用户名称并将名称返回。
如何杀死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表在什么情况下会被锁住
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存储过程停不下来的问题就介绍到这了,希望介绍的几点解答对大家有用,有任何问题和不懂的,欢迎各位老师在评论区讨论,给我留言。