我是oracle的新手。在我们的应用程序中,我们需要在计划作业的运行持续时间超过10分钟时执行一个过程。我们正在检查user_scheduler_jobs
表,并且必须在last_run_duration
列超过10分钟时触发一个过程。我们尝试为此目的创建触发器,如下所示:
CREATE TRIGGER TRG1
AFTER UPDATE ON ALL_SCHEDULER_JOBS
BEGIN
MONITOR_JOB_DURATION();
END TRG1;
但是当我尝试编译触发器时,它显示错误为
Error report:
ORA-25001: cannot create this trigger type on views
25001. 00000 - "cannot create this trigger type on views"
*Cause: Only INSTEAD OF triggers can be created on a view.
*Action: Change the trigger type to INSTEAD OF.
user_scheduler_jobs
是一个观点吗?
如果我继续执行INSTEAD OF
触发器,它是否会影响作业执行后自动发生的更新?
答案 0 :(得分:2)
user_scheduler_jobs
是一个观点吗?肯定是。更重要的是,它是在SYS模式中,你真的不应该试图弄乱该模式。它对于数据库的运行至关重要,应该像Oracle安装它一样保存。
Oracle Enterprise Manager具有一些监视作业的功能。在开始自己推动之前,你有没有看过它?
答案 1 :(得分:1)
处理此问题的最佳方法是检查代码运行了多长时间,然后执行某些操作。正如APC所述,在任何情况下都不会开始在SYS架构中放置触发器或其他任何内容,因此会造成更多麻烦。像下面这样的东西应该有效:
declare
l_start_time date default sysdate;
-- other stuff
begin
-- do something
if sysdate - l_start_time > ( 1 / 24 / 6 )
-- run something else
-- maybe using dbms_scheduler
end if;
-- do more stuff
end;