我使用的是Oracle DB Server,我有一个存储过程,它将由不同的流并行执行。这个存储过程使用数据库中的一个表来插入和删除记录。在存储过程的某个时刻,我希望它暂停一段时间,然后执行。
我可以写什么语句来暂停存储过程一段时间而不锁定它正在使用的表?
Oracle存储过程中有哪些替代方案可用于实现此类功能?
我可以使用DBMS_LOCK.SLEEP(seconds)
吗?正如我所说,同一个表被不同的流并行使用,当存储过程暂停时,这个DBMS_LOCK.SLEEP(n)
过程会锁定表吗?当存储过程处于睡眠状态时,它会消耗CPU周期吗?
除了在Oracle DB Server中使用DBMS_LOCK.SLEEP(n)
过程之外,还有其他替代方案可以实现此功能吗?
您可以使用DBMS_LOCK.SLEEP(n)
过程。使当前线程的执行停止n
秒的过程。
请注意,默认情况下,DBMS_LOCK
不会授予PUBLIC(或任何其他人)。因此,您需要请求友好的DBA颁发必要的EXECUTE权限。
这听起来像是DBMS_PARALLEL_EXECUTE
包的任务请参阅此处的文档DBMS_PARALLEL_EXECUTE
要停止处理,可以使用STOP_TASK
https://docs.oracle.com/database/121/ARPLS/d_parallel_ex.htm#ARPLS67379
STOP_TASK Procedure
This procedure stops the task and related job slaves.
Syntax
DBMS_PARALLEL_EXECUTE.STOP_TASK (
task_name IN VARCHAR2);
Parameters