2011-06-22 28 views
1

我在oracle.DB中有一個DBMS_SCHEDULER的問題。我有一個外部程序(駐留在運行oracle的服務器上的perl腳本),我想從我的存儲過程因此,我瞭解到可以通過創建DBMS_SCHEDULER.create_program來運行外部程序。所以我只做了這個。現在這個問題,我有一個在oracle中創建的程序對象,但我無法執行這個對象。我有一直在嘗試一些這樣的事情來運行這個對象:運行對象由DBMS_SCHEDULER.create_program創建

EXECUTE MY_PROGRAM_OBJECT;

但是每次我這樣做都是說對象MY_PROGRAM_OBJECT是無效的(FYI ...我可以看到這個對象使用select * from ALL_OBJECTS)。現在我真誠地認爲必須有一些其他方式來運行它。不幸的是,我似乎沒有找到任何正式的文檔。對於一個正在運行的程序對象。現在可以告訴我它是如何執行的嗎?爲了執行,我必須創建另一個工作並從那裏指向它,爲此我沒有看到任何理性。

P.S.我已經獲得了DBMS_SCHEDULER的執行權限。 在這方面的所有幫助將不勝感激。

非常感謝,抽出時間!

+0

從* SELECT * FROM dba_scheduler_job_run_details WHERE STATUS <>'SUCCEEDED'ORDER BY LOG_ID DESC *發佈附加錯誤詳細信息並查看顯示 – Harrison

+0

的內容,請查看以下鏈接:http://forums.oracle.com/ forums/thread.jspa?threadID = 555102 – Harrison

+0

你可以發佈你使用的CREATE_JOB命令嗎? – DCookie

回答

1

您應該創建一個使用您創建的程序的作業。喜歡的東西:

exec dbms_scheduler.create_job(
job_name=>'JOB_RUN_MY_PROGRAM', 
program_name=>'PROG_RUN_MY_PROCEDURE', 
schedule_name=>'INTERVAL_EVERY_DAY', 
enabled=>true, 
auto_drop=>false, 
comments=>'This will run my scheduler program'); 

注意,時間表「INTERVAL_EVERY_DAY」將需要通過dbms_scheduler.create_schedule創建。

要手動運行或停止,可以使用dbms_scheduler.run_job和dbms_scheduler.stop_job。使用dba_scheduler_jobs查看您剛剛創建的作業的狀態。

至於創建計劃的基本原理,它們可以幫助您創建更復雜的工作鏈。您將定義鏈式步驟以指向程序並定義關於如何繼續執行鏈式的規則(按照定義的順序併發或按順序運行步驟)。

+0

非常感謝您的回覆。但是,單單運行一個程序並不奇怪,您必須安排它。當我不需要它時,有必要創建一個調度程序?我有一個簡單的要求,即當我在執行存儲過程中遇到問題我會調用一個程序,它會引發一個alert.so我不需要按計劃,但需要根據我的要求調用。是否有一些我缺少的東西? – mawia

+0

除非你想按某個時間表運行某些東西,否則不需要調度程序。如果你想運行一個存儲過程,你只需要調用execute,如:execute my_stored_procedure('Some param'); – tbone

+0

我不需要存儲過程。我想從存儲過程運行一個shell腳本。是否有其他方式可以從oracle運行shell腳本? – mawia