Oracle——关于for update的锁表与解锁

来源:互联网 发布:怎样增加淘宝访客量 编辑:程序博客网 时间:2024/06/05 04:58

前传:

上周工作时,犯了件蠢事,select数据的时候加入了for update却忘记了加条件,测试环境的数据过多,查询时间太长,于是就把这个进程给kill了,结果造成了锁表。

结论:

for update语句一旦运行就会把表锁住,防止他人和你一同更改,第二个连接进来再进行select 。。。for update会造成阻塞,即第二个连接无法查询出数据。

在前传中,我将进程kill了,但是没有提交该事物,所以oracle认为,这个连接一直在修改数据,于是没有办法再执行for update语句。

但是for update锁住的只有符合条件的行,不符合该条件的行还是可以继续修改,比如:insert。

周末在家想重现这个事件,又不可能造大量的数据来造成当时查询时间过长的状况,于是,我想不commit直接关闭PL/SQL,但是无论如何都重现不了工作中的状况。

后来发现,PL/SQL有设定,当我们注销或者关闭PL/SQL的时候,默认提交事物,选项中只有“提交”、“回滚”和“询问”三个选项,所以当我们直接关闭PL/SQL的时候是很安全的。

原创粉丝点击