在Oracle数据库表上发出锁定和超时值

时间:2015-10-05 14:56:35

标签: database oracle locking

我有两个应用程序访问同一个表。我只希望一个应用程序随时访问该表。

是否可以在方法开始时发出锁定并在结束时删除锁定? 此外,如果应用程序死亡,我们可以在锁定上设置超时值吗?

Java方法概述:

//read the table...
//do something with the data
//update the table
return;

1 个答案:

答案 0 :(得分:2)

最简单的方法,可能是发布一个“更新选择”'锁定表中一行的语句,例如:

create table app_lock ( application_name varchar2(100) not null);

insert into app_lock values ('myapp');

commit;

select application_name from app_lock where application_name = 'myapp' for update;

然后,如果另一个会话尝试运行相同的SQL语句,它将阻塞,直到第一个会话释放锁。或者您可以指定超时值。例如,在10秒后超时:

select application_name from app_lock where application_name = 'myapp' for update wait 10;

通过发出提交或回滚来释放锁,或者如果应用程序死亡,它将与Oracle断开连接并回滚释放锁。

另一种选择是锁定表格:

lock table mytable in exclusive mode;

同样,此锁定一直持续到您的会话提交,回滚或断开连接。