DBAtlas · Veritabanı operasyon atlası

Scheduler job oluştur, elle çalıştır, devre dışı bırak ve kaldır

OracleScheduler

Komut

-- 1) Kapali olarak olustur, ozelliklerini ayarla, sonra etkinlestir:
BEGIN
  DBMS_SCHEDULER.CREATE_JOB(
    job_name        => 'MUSTERI_APP.GECE_ISTATISTIK',
    job_type        => 'PLSQL_BLOCK',
    job_action      => q'[BEGIN DBMS_STATS.GATHER_SCHEMA_STATS(ownname => 'MUSTERI_APP', options => 'GATHER STALE'); END;]',
    start_date      => SYSTIMESTAMP,
    repeat_interval => 'FREQ=DAILY; BYHOUR=2; BYMINUTE=30; BYSECOND=0',
    enabled         => FALSE,
    auto_drop       => FALSE,
    comments        => 'Gece stale istatistik toplama');
  DBMS_SCHEDULER.SET_ATTRIBUTE('MUSTERI_APP.GECE_ISTATISTIK', 'max_run_duration', INTERVAL '2' HOUR);
  DBMS_SCHEDULER.SET_ATTRIBUTE('MUSTERI_APP.GECE_ISTATISTIK', 'logging_level', DBMS_SCHEDULER.LOGGING_FULL);
  DBMS_SCHEDULER.ENABLE('MUSTERI_APP.GECE_ISTATISTIK');
END;
/

-- 2) Takvim ifadesini dogrula (sonraki calisma ani):
SET SERVEROUTPUT ON
DECLARE
  l_next TIMESTAMP WITH TIME ZONE;
BEGIN
  DBMS_SCHEDULER.EVALUATE_CALENDAR_STRING(
    calendar_string   => 'FREQ=DAILY; BYHOUR=2; BYMINUTE=30; BYSECOND=0',
    start_date        => SYSTIMESTAMP,
    return_date_after => SYSTIMESTAMP,
    next_run_date     => l_next);
  DBMS_OUTPUT.PUT_LINE('Sonraki calisma: ' || l_next);
END;
/

-- 3) Simdi arka planda calistir (takvimi bozmaz):
EXEC DBMS_SCHEDULER.RUN_JOB('MUSTERI_APP.GECE_ISTATISTIK', use_current_session => FALSE);

-- 4) Durum:
SELECT owner, job_name, enabled, state, run_count, failure_count,
       last_start_date, next_run_date
FROM   dba_scheduler_jobs WHERE owner = 'MUSTERI_APP';

-- 5) Durdur (calisiyorsa) / devre disi birak / kaldir:
-- EXEC DBMS_SCHEDULER.STOP_JOB('MUSTERI_APP.GECE_ISTATISTIK', force => FALSE);
EXEC DBMS_SCHEDULER.DISABLE('MUSTERI_APP.GECE_ISTATISTIK', force => TRUE);
EXEC DBMS_SCHEDULER.DROP_JOB('MUSTERI_APP.GECE_ISTATISTIK', force => TRUE);

Ne yapar?

DBMS_SCHEDULER ile takvimli bir PL/SQL işi tanımlar; maksimum süre aşımında olay üreten max_run_duration ve ayrıntılı log seviyesi ayarlanır, takvim ifadesi önceden doğrulanır, iş takvimi bozulmadan elle tetiklenebilir.

Ne zaman kullanılır?

Bakım, ETL, temizlik gibi tekrarlayan DB işlerini cron yerine veritabanı içinde, RAC/Data Guard farkındalığıyla çalıştırmak için.

Dikkat

Ek lisans gerektirmez. start_date'in saat dilimi önemlidir: SYSTIMESTAMP DB sunucusunun TZ'sini alır; yaz saati geçişlerinde kaymaması için açık bölge (ör. 'Europe/Istanbul') kullan. JOB_QUEUE_PROCESSES=0 ise hiçbir job çalışmaz. DISABLE force=>TRUE çalışan örneği durdurmaz, yalnız sonrakileri engeller; çalışanı kesmek için STOP_JOB kullan. Başka şemada job oluşturmak CREATE ANY JOB ister.

DBAtlas'ta aç →

İlgili