5

20:00毎日実行され、30 分間実行される Oracle スケジューラ ジョブを作成したいと考えています。KPI_LOGSこのテーブルには大量のデータが含まれており、拡大し続けるため、このジョブはテーブルから行を削除します。このようなジョブのためにOracle sql開発者で以下のスクリプトを作成しましたが、スケジューラジョブの概念が初めてなので、これが正しいかどうかはわかりません。

    BEGIN
        DBMS_SCHEDULER.CREATE_JOB (
                job_name => '"RATOR_MONITORING"."CROP_KPI_LOGS"',
                job_type => 'PLSQL_BLOCK',
                job_action => 'DELETE FROM KPI_LOGS WHERE CAST(TIMESTAMP AS DATE) < (SYSDATE  - 28);',
                number_of_arguments => 0,
                start_date => NULL,
                repeat_interval => 'FREQ=DAILY;INTERVAL=30',
                end_date => NULL,
                enabled => FALSE,
                auto_drop => FALSE,
                comments => 'CROP_KPI_LOGS');    

        DBMS_SCHEDULER.SET_ATTRIBUTE( 
                 name => '"RATOR_MONITORING"."CROP_KPI_LOGS"', 
                 attribute => 'logging_level', value => DBMS_SCHEDULER.LOGGING_OFF);



    DBMS_SCHEDULER.enable(
             name => '"RATOR_MONITORING"."CROP_KPI_LOGS"');
END;
4

1 に答える 1

7

repeat_internal が正しくありません。そこにあるものは 30 日ごとに実行されます。毎日午後 8 時に実行するには...

FREQ=DAILY; BYHOUR=20

実行時間を指定することはできません。DELETE ステートメントにかかる時間と同じくらいかかります。

于 2015-07-28T15:05:34.347 に答える