DBMS_JOB paketiyle işi oluşturan kişi görevin sahibi olarak belirlenir. Bu job'in sahibi olarak görevi değiştirebilecek tek kişidir. Bu job'larla ilgili bilgi edinmek istediğimizde bakılabilecek belirli tablolar vardır.
Bunlar:
- DBA_JOBS
- ALL_JOBS
- USER_JOBS
- DBA_JOBS_RUNNING
- USER_JOBS_RUNNING
- SYS.SCHEDULER$_JOB
- DBA_SCHEDULER_JOB
- ALL_SCHEDULER_JOB_RUN_DETAILS
DBMS_JOB SCHEDULE Değiştirilmesi:
DBMS_JOB.CHANGE prosedürü tanımladığımız işin zamanını ve diğer özellikleri değiştirebilir.
DBMS_JOB.CHANGE
job IN BINARY_INTEGER, --Çalıştırılacak Job Numarası
what IN VARCHAR2, -- Çalıştırılacak PL/SQL kodu
next_date IN DATE, --Gelecek Çalıştırılma Zamanı
interval IN VARCHAR2, --İş Çalıştıktan Sonraki Gelecek Çalıştırılmaya Kadarki Aralık
instance IN BINARY_INTEGER DEFAULT NULL,
force IN BOOLEAN DEFAULT FALSE);
Zaman Aralıklarının Belirtilme Şekilleri,
Her gün çalışsın: 'SYSDATE + 1'
Haftada bir çalışsın: 'SYSDATE + 7'
Her saat başında çalışsın: 'SYSDATE + 1/24'
10 dakikada bir çalışsın: 'SYSDATE + 10/1440'
30 saniyede: 'SYSDATE + 30/86400'
Bir daha çalışmasın: 'NULL'
DBMS_JOB.WHAT: Job'ın içeriğini değiştirebilen prosedür.
DBMS_JOB.NEXT_DATE: Job'ın gelecek çalışma zamanını değiştiren prosedür.
Ör:
DBMS_JOB.NEXT_DATE (JOB IN BINARY_INTEGER,
NEXT_DATE IN DATE);
DBMS_JOB.INTERVAL: Job'in çalışma aralığının değiştirilmesi.
Ör:
DBMS_JOB.INTERVAL (job IN BINARY_INTEGER,interval IN VARCHAR2);
DBMS_JOB.BROKEN: Job'in bozulup bozulmadığının belirtilmesi. DBMS_JOB 16 kere bozuk çalışırsa veya broken olarak işaretliyse broken olarak gözükür. Bu prosedürde DBMS_JOB'ın bizim tarafımızdan broken gösterilmesi veya düzelttikten sonra broken statüsünde çıkartılmasını sağlar.
Ör:
EXEC dbms_job.broken(jobno, FALSE);
DBMS_JOB.RUN: Job'in hemen çalıştırılması.
Ör:
EXEC dbms_job.run(job_no);
DBMS_JOB.REMOVE: Job'in kaldırılması.
Ör:
EXECUTE dbms_job.remove(job no );
Şu An Çalışan Job'larin Gösterilmesi:
select
job j,
to_char ( last_date, 'hh24:mi:ss' ) last,
to_char ( this_date, 'hh24:mi:ss' ) this,
to_char ( next_date, 'hh24:mi:ss' ) next,
broken b,
failures f,
interval,
what
from dba_jobs;
Çalışmış Job'ların Detayları:
Burada çalışmış job'ların detayları yer alır. Fail edenlerle ilgili bilgiler gösterilir.
Burada çalışmış job'ların detayları yer alır. Fail edenlerle ilgili bilgiler gösterilir.
select * from all_scheduler_job_run_details
Hangi Sessionların Job Çalıştırdığının Görülmesi:
select j.sid,
s.spid,
s.serial#,
j.log_user,
j.job,
j.broken,
j.failures,
j.last_date||':'||j.last_sec last_date,
j.this_date||':'||j.this_sec this_date,
j.next_date||':'||j.next_sec next_date,
j.next_date - j.last_date interval,
j.what
from (select djr.SID,
dj.LOG_USER, dj.JOB, dj.BROKEN, dj.FAILURES,
dj.LAST_DATE, dj.LAST_SEC, dj.THIS_DATE, dj.THIS_SEC,
dj.NEXT_DATE, dj.NEXT_SEC, dj.INTERVAL, dj.WHAT
from dba_jobs dj, dba_jobs_running djr
where dj.job = djr.job ) j,
(select p.spid, s.sid, s.serial#
from v$process p, v$session s
where p.addr = s.paddr ) s
where j.sid = s.sid;
Schedule Edilmiş - Programlanmış Job'ların Görülmesi:
select j.log_user,
j.job,
j.broken,
j.failures,
j.last_date||':'||j.last_sec last_date,
j.this_date||':'||j.this_sec this_date,
j.next_date||':'||j.next_sec next_date,
j.next_date - j.last_date interval,
j.what
from (select dj.LOG_USER, dj.JOB, dj.BROKEN, dj.FAILURES,
dj.LAST_DATE, dj.LAST_SEC, dj.THIS_DATE, dj.THIS_SEC,
dj.NEXT_DATE, dj.NEXT_SEC, dj.INTERVAL, dj.WHAT
from dba_jobs dj) j;
DBMS_JOB Örneği:
variable jobno number;
variable instno number;
begin
select instance_number into :instno from v$instance;
dbms_job.submit(
:jobno, 'BEGIN statspack_alert_proc; END;',
trunc(sysdate)+6/24,
'trunc(SYSDATE+1/24,''HH'')',
TRUE,
:instno);
commit;
end
eline sağlık, teşekkürler.
YanıtlaSil