2012-03-05 78 views
1

我是oracle新手。在我們的應用程序中,當計劃作業的運行持續時間超過10分鐘時,我們需要執行一個過程。我們正在檢查user_scheduler_jobs表,並且在last_run_duration列超過10分鐘時必須啓動一個程序。我們試圖爲此創建一個觸發如下圖所示:如何在oracle中的user_scheduler_jobs上創建觸發器?

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觸發器,它會影響作業執行後自動發生的更新嗎?

回答

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; 
2

user_scheduler_jobs a view?它當然是。更重要的是,它在SYS模式中,你真的不應該試圖混淆該模式。對於數據庫的運行至關重要,並且應該完全按照Oracle安裝它的方式進行保存。


Oracle企業管理器具有一些監視作業的功能。在開始自己滾動之前,你看過嗎?

+0

+1,絕對是;改變sys是導致問題的最可靠的方法。 – Ben 2012-03-05 13:32:58

+0

對不起,我對Oracle企業管理器一無所知。我會試着研究一下。感謝您提供寶貴的信息。 – 988875 2012-03-06 04:11:52