我有一个复杂的过程和一个该过程更新的表。还有一个为必须运行该过程的
Administrator
提供的 Web 服务,以及为主动处理表(所有类型的 DML 操作)的 Operators
提供的 Web 服务。Control table
创建一个 Launch flag
。当管理员在其 Web 服务中启动该过程时,我可以在控制表中设置一个标志,并在数据库服务器上注册一个 One-time job
,启动延迟约为 5 秒(以便操作员的所有未处理事务都有时间待处理)并在同一作业中,程序完成后,删除程序启动标志。在运营商的Web服务中,在开始下一步操作之前,检查控制表中的标志,如果标志表明该过程当前正在运行,则禁止该操作。Oracle 让您真正地锁定表,例如
SQL> lock table emp in exclusive mode;
Table(s) Locked.
SQL>
这将限制对其的访问(但不限制读者)。一旦您
commit
(或rollback
),锁定将自动解除。
lock
远不止我这个简单的例子;查看 documentation (我猜您可能对其 wait
参数感兴趣)。