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

Issuing a lock and timeout value on a Oracle database table

我有两个应用程序访问同一个 table。我只想让一个应用程序随时访问 table。

是否可以在方法开始时发出锁并在方法结束时删除锁? 另外,万一应用死掉了,我们可以给锁设置一个超时值吗?

Java 方法概述:

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

最简单的方法,可能是在锁 table 中的一行上发出 'select for update' 语句,例如:

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 断开连接并回滚以释放锁。

另一种选择是锁定 table:

lock table mytable in exclusive mode;

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