DEBORA – Erweiterung um Ausführung von Programmen via DBMS_SCHEDULER

Fun, Oracle

Seit Oracle 10 gibt es mit dem Package DBMS_SCHEDULER ein ziemlich mächtiges Werkzeug welches in der Version 11 nochmals erweitert wurde. Mich interessieren tut hier in dem Zusammenhang weniger das Aufsetzen eines Jobs der in einem high sophisticated Zeitintervall läuft (mit Zeitzone, Feiertagskalender und allem drum und dran…), sondern vielmehr der Zugriff aufs darunter liegende Betriebssystem. Warum? Ganz einfach, weil somit augenblicklich alle möglichen (Kommandozeilen-)programme direkt aus Oracle heraus ausführbar werden. Etwa über eine Weboberfläche die mit APEX erstellt wurde!?

Damit das ganze aber reibungslos funktionieren kann, muss zuvor einiges erledigt werden…

1. Einstellungen im Guest bzw. bei DEBORA

Wir beginnen mit der Arbeit in Debian und führen als root folgende Befehle aus:

cd $ORACLE_HOME
chown root:dba bin/extjob
chmod 4750 bin/extjob
touch rdbms/admin/externaljob.ora
chown root:dba rdbms/admin/externaljob.ora
chmod 644 rdbms/admin/externaljob.ora

 

Nun müssen in diese soeben erstellte Datei noch zwei Zeilen mit folgenden Inhalt hinein:

run_user = oracle
run_group = dba

2. Einstellungen in der DB

Als Admin muss man dem User, welcher Programme ausführen dürfen soll, noch bissl Rechte geben – z.B. einen Testuser mit dem Namen „DEBORA“.

CREATE USER DEBORA IDENTIFIED BY DEBORA;
GRANT CONNECT,RESOURCE TO DEBORA;
GRANT CREATE JOB TO DEBORA;
GRANT CREATE EXTERNAL JOB TO DEBORA;

So, und nun können wir (hoffentlich) das Ergebnis bestaunen. Wir erstellen dazu der Einfachheit halber eine leere Datei.

BEGIN
  dbms_scheduler.create_job(
    job_name        => 'EXAMPLE_JOB',
    job_type        => 'EXECUTABLE',
    job_action      => '/bin/touch',
    auto_drop       => true,
    enabled         => false,
    start_date      => systimestamp,
    number_of_arguments => 1
  );
  dbms_scheduler.set_job_argument_value(
    job_name          => 'EXAMPLE_JOB',
    argument_position => 1,
    argument_value    => '/tmp/file_created_by_oracle_db'
  );
  dbms_scheduler.ENABLE('EXAMPLE_JOB');
END;

Viel Spass beim Experimentieren und wie immer ist Feedback willkommen!

P.S. Das erfolgreiche (oder eben auch mal nicht erfolgreiche) Ausführen der Jobs wird protokolliert und leicht abgefragt werden via

SELECT * FROM all_scheduler_job_run_details;
Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s