skip to Main Content
1-800-987-654 admin@totalwptheme.com

Oracle DBMS Job’lar hakkında

Elimde uzun süredir Tamamlanamamış Materialized view’lerin otomatik yenilenmesi için dbms_job’lar mevcut.  bu joblar çalıştığında bağlantı problemi yaşanırsa, takılıp kalıyor. Session’u Kill etmeye çalışsam da Killed pozisyonda duruyor. MAterialized viewler lock’lu kaldığı için de yeniden oluşturamıyorum.

Öncelikle Sistemdeki jobları ve bunların hangi görevi gerçekleştirdiğini bulalım.

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;

Şimdi de bunların içinden bahsettiğim gibi, Çalışıyor görünüp de takılmış olabilecekleri listeleyelim.

select j.sid,
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;

Şimdi bu çalışan jobların Session bilgilerini de görelim.

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;

1- ) Öncelikle bu job’ları broken hala çevirelim. Biz job’ı bir şekilde kill etsek bile kendi kendine tekrar çalışmaması için. way be google translate gibi yazdım yaw :D bu nasıl bir cümle yapısı bilen beri gelsin.

EXEC DBMS_JOB.BROKEN(821,TRUE); 
Çok fazla kod manyağı olduğum söylenemez, bu işlemi Plsql Developer ya da toad benzeri bir programla da kod yazmadan yapabilirsiniz. Fakat bu durumda ben ne zaman denesem, program takılıyor. o yüzden Kodu yazıp çalıştırmak daha mantıklı.

2-) Job’u çalıştıran Session’u bulup, Kill edelim.

ALTER SYSTEM KILL SESSION ‘sid,serial#’;

3-) Büyük ihtimalle  Session Marked for Kill diye bir mesaj alacaksınız. henüz kill edemediği için, biz bunu İşletim sistemi platformunda kill etmeliyiz.

Windows için Komut Satırına  c:\orakill sid spid yazılır. yalnız dikkat edin buradaki sid Session ID anlamındaki sid değil.Oracle SID dir. Yani ORCL gibi. SID  doğru yazmasanız şöyle bir hata alırsınız. Could not attach to Oracle instance 154: err = 2

c:\orakill orcl  1947

unix / linux bilmiyorum ama o da şöyle  command line> kill ’9 spid

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Back To Top