我有一个shell脚本,在满足某些前提条件后会触发PL/SQL报告生成过程。用于检查前提条件是否满足的逻辑用PL/SQL包编写。报告生成需要等到前提条件不满足为止。DBMS_LOCK.SLEEP vs UNIX sleep
在PL/SQL过程中等待使用dbms_lock.sleep
vs UNIX sleep
有什么优点和缺点?
我有一个shell脚本,在满足某些前提条件后会触发PL/SQL报告生成过程。用于检查前提条件是否满足的逻辑用PL/SQL包编写。报告生成需要等到前提条件不满足为止。DBMS_LOCK.SLEEP vs UNIX sleep
在PL/SQL过程中等待使用dbms_lock.sleep
vs UNIX sleep
有什么优点和缺点?
就像许多设计决定的答案一样,这取决于。
数据库连接是昂贵且相对耗时的操作。因此,更有效的方法可能是连接数据库一次,让PL/SQL作业处理等待过程。
此外,它可能是一个简单的PL/SQL调用更清洁,让数据库处理报告或睡眠逻辑,而不是编写一个API来返回调用程序必须解释和操作的状态。这也为您提供了一个更好的替代执行路径(例如通过从GUI或DBMS_SCHEDULER作业调用)。
有使用shell脚本sleep
的两个具体优点:
sys.dbms_lock
是默认情况下不会授予任何人。一些DBA可能不愿意在该包上授予执行权。我想应该可以为sys.dbms_lock.sleep提供一个包装,以限制对该过程的访问。 –
@davidaldridge - 当然这是可能的,而且确实值得推荐,但有多少DBA很费心去做呢?好消息是,Oracle终于解决了这个问题,在未来的发行版中,'sleep()'将被默认包(例如'dbms_session')添加到公共中。世界等着喘不过气来... – APC
当您询问dbms_lock.sleep时,我想您正处于一个循环中,在您再次检查您的前提条件之前睡了几秒钟。为什么不用锁把它转向?例如:当前提条件满足时,您释放一个锁(可能触发),您的报告过程正在等待。不需要循环和轮询... – sers