26 Aralık 2011 Pazartesi

DBMS_JOB.next_date for other user

DBMS_JOB ile yetkisi olan her kullanıcı kendi şeması altında job tanımlayabilir. Başka bir şema altında job tanımlamak (legal olarak) mümkün değil. Paketin kullanımı ile ilgili buradan detaylı bilgiyi bulabilirsiniz. Başka kullanıcı altındaki joblara müdahele etmek gibi bir gereklilikte kullanabileceğimiz bir yöntem var. Joblarını değiştirmek istediğimiz kullanıcı altına prosedür oluşturup işlerimi yapabiliriz. Prosedürü farklı yöntemlerle oluşturmak mümkün.

Örneğin sadece bizim gönderdiğimiz bir herhangi komutu execute edecek şekilde prosedür yazmak bunlardan biri.Bu durumda sadece job için değil diğer başka limititasyonları da aşmış olabiliriz. (dmbs_job, database link gibi). Bu linkten bu amaçla yazmış olduğum prosedürü inceleyebilirsiniz.


Aşağıda job için yazlmış bir prosedür var. Bu prosedür ile diğer şema altındaki jobların sonraki çalışma zamanlarını, işin çalışma zaman aralığı kadar sonraya atamış olacağız.

yani  next_date = hesaplanan interval olacak.



create or replace PROCEDURE app_user.job_ilerlet (tarih date)
IS
cmd varchar2(500) := '';
BEGIN
   FOR c IN (SELECT job, last_date, interval
               FROM user_jobs
              WHERE TRUNC (last_date) = TRUNC (tarih))
   LOOP 
      cmd := 'begin dbms_job.next_date('||c.job||', '||c.interval||'); commit; end;';
      dbms_output.put_line(cmd);
      execute immediate cmd;
   END LOOP;
END;
/






Hiç yorum yok:

Yorum Gönder