需求:让 Oracle 启动一个 shell 脚本,该脚本对 Oracle 数据库中的表和数据进行处理。该脚本由来自 Web 客户端的特定活动实例化。
问题:Web 客户端将同时实例化此作业。为了从 Oracle 执行 shell 脚本,您必须使用 Oracle 调度程序执行此操作。此作业设置为从 Oracle 立即执行。我从 ORA-27477 文档中看到,Oracle 不允许同名作业同时运行。
背景:我们需要从 shell 运行这个特定的处理作业,因为它使用 C 来完成繁重的工作。将该代码移植到 PL/SQL 不是一个选择。这里还有很多遗留代码,这让我很难过,但这就是生活。
答案1
您可以为每次运行创建一个新作业,也可以使用 复制现有作业DBMS_SCHEDULER.COPY_JOB
。在这两种情况下,您都可以使用DBMS_SCHEDULER.GENERATE_JOB_NAME
为作业生成唯一的名称。