Oracle:限制对表的访问,直到过程完成

问题描述 投票:0回答:1

我有一个复杂的过程和一个该过程更新的表。还有一个为必须运行该过程的

Administrator
提供的 Web 服务,以及为主动处理表(所有类型的 DML 操作)的
Operators
提供的 Web 服务。
任务很简单:我需要限制表上的任何操作员操作,直到管理员启动的过程完成。
我对解决此问题的建议:使用过程
Control table
创建一个
Launch flag
。当管理员在其 Web 服务中启动该过程时,我可以在控制表中设置一个标志,并在数据库服务器上注册一个
One-time job
,启动延迟约为 5 秒(以便操作员的所有未处理事务都有时间待处理)并在同一作业中,程序完成后,删除程序启动标志。在运营商的Web服务中,在开始下一步操作之前,检查控制表中的标志,如果标志表明该过程当前正在运行,则禁止该操作。
问题:这个解决方案的可靠性如何?对于这个问题还有其他解决方案吗?

sql plsql oracle
1个回答
0
投票

Oracle 让您真正地锁定表,例如

SQL> lock table emp in exclusive mode;

Table(s) Locked.

SQL>

这将限制对其的访问(但不限制读者)。一旦您

commit
(或
rollback
),锁定将自动解除。

lock
远不止我这个简单的例子;查看 documentation (我猜您可能对其
wait
参数感兴趣)。

© www.soinside.com 2019 - 2024. All rights reserved.