2014-01-13 50 views
1

當USER = SYS時,我在程序包中返回一個特殊值的函數。 我在Scheduler中安排了一項工作,每天執行一次。出於奇怪的原因,我在某些數據庫實例上出現錯誤,指出USER並非真正的SYS,但是<SCHEMA>。 我正在使用Oracle SQL數據庫11g版本。Oracle調度程序作業執行程序,或者在作業運行期間誰是用戶

從我的測試中,我發現只有一種方法是如何在Job中擁有不同的USER。當用戶直接由用戶USER = <SCHEMA>安排作業時。問題是,這是不太可能的情況,因爲通常所有的腳本都是在SYS下執行的。

請你能解釋一下Job「執行者」的決心是如何運作的嗎?有沒有辦法通過PL/SQL腳本來確定作業執行者是誰?你能指導我一個文檔,它會描述它嗎?

回答

1

1)ALL_SCHEDULER_JOB_LOG/DBA_SCHEDULER_JOB_LOG。

http://docs.oracle.com/cd/B12037_01/server.101/b10755/statviews_1139.htm#i1587038

2)你是否真的需要SYS帳號執行作業?在大多數生產系統中,這引起了很多DBA的關注,他們幾乎不允許在SYS下執行用戶定義的作業。

一個更加有用的鏈接:

http://docs.oracle.com/cd/B19306_01/server.102/b14231/schedover.htm#i1106753

「 可以通過指定schema.job_name創建另一個架構一個作業的作業的創造者,因此,不一定是工作所有者。作業所有者是創建作業的架構中的用戶,而作業創建者是創建作業的用戶,作業是使用創建作業的架構的特權來執行的。運行是在作業創建時出現的運行。

作業創建完成後,可以使用* _SCHEDULER_JOBS視圖查詢。作業默認情況下被禁用,需要啓用才能運行。 「

+0

非常感謝你的這種快速響應!如果我現在正確地得到它,那麼當我在SCHEMA1下有USER = SYS創建的Job1時,執行程序是SYS,當Job2由SCHEMA1下的USER = SCHEMA1創建時,執行程序是SCHEMA1(當Job2 JOB_ACTION ='DBMS_OUTPUT.PUT_LINE('登錄用戶:'|| USER);'它會返回SCHEMA1) 問題是,我沒有機會查詢USER。 OPERATION = RUN is ALL_SCHEDULER_JOB_LOG.USER_NAME = null。對於OPERATION <> RUN是USER_NAME不再爲null,但這些值早已不存在,導致自動日誌處置。 – Javo

+0

剛剛找到ALL_SCHEDULER_JOBS,它有JOB_CREATOR – Javo

相關問題