2009-12-08 15 views
0

首先,我創建可執行作業:這是將Oracle Recovery Manager與Oracle Job Scheduler結合使用的有效方法嗎?

BEGIN 
    DBMS_SCHEDULER.CREATE_JOB(job_name => 'PIPE_JOB', job_type => 'EXECUTABLE', job_action => 'RMAN PIPE TEST_PIPE_1 target/TIMEOUT = 60'); 
END; 

接下來,我想這一系列甲骨文的執行作業命令:

DECLARE 
    pipename CONSTANT VARCHAR2(100) := 'TEST_PIPE_1'; 
    create_result INTEGER; 
    send_result INTEGER; 
BEGIN 
    create_result := DBMS_PIPE.CREATE_PIPE(pipename); 
    DBMS_PIPE.PACK_MESSAGE('BACKUP INCREMENTAL LEVEL 1 CUMULATIVE DEVICE TYPE DISK DATABASE INCLUDE CURRENT CONTROLFILE;'); 
    send_result := DBMS_PIPE.SEND_MESSAGE(pipename); 
    DBMS_SCHEDULER.RUN_JOB(job_name => 'PIPE_JOB', use_current_session => false); 
END; 

現在,當我撥打電話到RUN_JOB RMAN可執行文件在服務器上啓動,但隨即立即退出,可能是因爲它從未收到我試圖打包到管道中的命令。

如何正確使用管道使RMAN收到我想要發送的命令?

回答

1

我不認爲你可以爲此使用DBMS_PIPE。這是一個PL/SQL'東西',而不是RMAN可以處理的東西,而不是像STDIN的unix管道。

雖然你可以用DBMS_SCHEDULER做參數。您可能需要一個介入的shell腳本。

[新增] 我有一個shell腳本,需要一個或多個參數

dbms_scheduler.create_job 
(
job_name => 'job1', 
job_type => 'EXECUTABLE', 
job_action => '/somewhere/rman_script.sh', 
enabled => false, 
number_of_arguments => 2, 
comments => 'Run shell-script' 
); 
dbms_scheduler.set_job_argument_value(SHELL || jobidx,1,'blah'); 
dbms_scheduler.set_job_argument_value(SHELL || jobidx,2,'blah'); 
dbms_scheduler.enable('job1'); 

shell腳本將通過標準輸入調用RMAN和管道的參數給它。

+0

當你說「你可以做參數」時,你究竟是什麼意思?創建作業時,我可以將命令行參數添加到可執行文件中?哪裏需要一個shell腳本? (我對Oracle的所有東西都很陌生) –

1

看起來我以前錯了,RMAN可以和DBMS_PIPE一起使用。 第here。自己不明白,但博客上的評論可能會提供更多詳細信息

+0

感謝您重新訪問這個問題!我一定會看看這篇文章。 –

相關問題