2016-11-08 3 views
-1

エントリを持っていない神託でクリーンアップを仕事テーブルのための仕事を準備することは、私は完全に下に働いているDBMSスケジューラにおける以下のスケジュールジョブを持って5日以上古い

begin 
    DBMS_SCHEDULER.CREATE_JOB (
     job_name    => 'KEEP_STATS_DBNEW5', 
     job_type    => 'PLSQL_BLOCK', 
     job_action   => 'begin 
    insert into my_log_table3 (MDATE, MUSER, MCNT) 
    select sysdate, osuser, count(osuser) 
    from v$session 
    group by osuser; 
    commit; 
end;', 
     start_date   => timestamp '2016-11-08 18:30:00', 
     repeat_interval  => 'FREQ=MINUTELY;INTERVAL=10;', 
     enabled    => TRUE); 
end; 
/

はとても基本的にこの仕事は、いくつかを挿入していますmy_log_table3という名前のテーブル内のデータも一度に列に名前付きの日付があります。これで私のクエリもまたこのテーブルを消去する必要があります。最後の5日間のエントリだけを残しておきますすべての行を削除する必要があります

So私はmy_log_table3_cleanupとなる別の仕事を書いておきたいと思います。仕事

も、私は同じことを達成するためにdelete文を得れば、私はまた、あなたがそれを行うことができ、同じ

+0

ジョブを作成し、単純にdeleteステートメントを使用することができます。問題はどこですか? 5日以上経過した行を見つけることに問題がありますか? – Aleksej

+0

@Aleksejはい私はもっとgrspできるようにショーをお願いします。あらかじめありがとうございます – user1924563

+1

5日以上経過した行を削除するには、delete my_log_table3 where mdate <= sysdate -5'のようなものが必要な場合があります。 – Aleksej

答えて

0

を達成するために周りの23:00で、夜に少なくとも一度実行するように私の仕事を設定することができます助言してくださいこのように:

begin 
    DBMS_SCHEDULER.CREATE_JOB (
     job_name    => 'KEEP_STATS_DBNEW5', 
     job_type    => 'PLSQL_BLOCK', 
     job_action   => 'begin 
    insert into my_log_table3 (MDATE, MUSER, MCNT) 
    select sysdate, osuser, count(osuser) 
    from v$session 
    group by osuser; 
    if to_char(sysdate, ''HH24MI'') = 2300 then 
    delete from my_log_table3 where MDATE <= sysdate -5; 
    end if; 
    commit; 
end;', 
     start_date   => timestamp '2016-11-08 18:30:00', 
     repeat_interval  => 'FREQ=MINUTELY;INTERVAL=10;', 
     enabled    => TRUE); 
end; 
/

しかし、これは本当に醜いコードです。古いデータを削除するrepeat_interval => 'FREQ=DAILY;INTERVAL=1;BYHOUR=23;BYMINUTE=00'と別のジョブを作成する方が良いでしょう。

関連する問題