DBMS_LOCK.SLEEP 对比 UNIX 睡眠
DBMS_LOCK.SLEEP vs UNIX sleep
我有一个 shell 脚本,它会在满足某些先决条件后触发 PL/SQL 报告生成过程。 PL/SQL包中写了判断前置条件是否满足的逻辑。报告生成需要等到前置条件不满足时才生成。
与 UNIX sleep
相比,在 PL/SQL 过程中使用 dbms_lock.sleep
等待的优缺点是什么?
就像很多设计决策一样,答案是视情况而定。
数据库连接是昂贵且相对耗时的操作。因此,更有效的方法可能是连接到数据库一次并让 PL/SQL 作业处理等待过程。
此外,进行简单的 PL/SQL 调用并让数据库处理 报告或休眠 逻辑可能比编写一个 API returns 调用程序必须解释和执行的状态。这也为您提供了更简洁的替代执行路径(比如从 GUI 或 DBMS_SCHEDULER 作业调用)。
使用 shell 脚本有两个具体优势 sleep
:
- 您可以选择在每次循环进入休眠模式时发出状态(如果这是交互式的)
- 在
sys.dbms_lock
上执行默认情况下不授予任何人。一些 DBA 可能不愿意授予对该包的执行权。
我有一个 shell 脚本,它会在满足某些先决条件后触发 PL/SQL 报告生成过程。 PL/SQL包中写了判断前置条件是否满足的逻辑。报告生成需要等到前置条件不满足时才生成。
与 UNIX sleep
相比,在 PL/SQL 过程中使用 dbms_lock.sleep
等待的优缺点是什么?
就像很多设计决策一样,答案是视情况而定。
数据库连接是昂贵且相对耗时的操作。因此,更有效的方法可能是连接到数据库一次并让 PL/SQL 作业处理等待过程。
此外,进行简单的 PL/SQL 调用并让数据库处理 报告或休眠 逻辑可能比编写一个 API returns 调用程序必须解释和执行的状态。这也为您提供了更简洁的替代执行路径(比如从 GUI 或 DBMS_SCHEDULER 作业调用)。
使用 shell 脚本有两个具体优势 sleep
:
- 您可以选择在每次循环进入休眠模式时发出状态(如果这是交互式的)
- 在
sys.dbms_lock
上执行默认情况下不授予任何人。一些 DBA 可能不愿意授予对该包的执行权。