New Features Oracle 11g: Scheduler und “Credentials”
Posted by Sven Vetter on October 14th, 2007
Mit dem in Oracle 10g eingeführten Scheduler (der in der Datenbank, implementiert mit dem Package dbms_scheduler) ist es leicht möglich, externe Programme (z.B. OS-Scripts) zu starten. Innerhalb der Datenbank konnte aber nicht gesteuert werden, unter welchem Betriebssystembenutzer die Programme laufen. Dies konnte nur über eine Datei pro ORACLE_HOME gesteuert werden (siehe Metalink Note 391820.1) - d.h. alle externen Programme liefen immer unter dem gleichen Account.
Auch wenn es nicht im New Features Dokument steht - über das neue Objekt CREDENTIAL ist es nun in Oracle 11g einfach möglich, jedem Job (bei Bedarf) andere Usernamen/Passwort-Kombinationen zuzuweisen.
Beispiel:
Anlegen der Credentials mit dem Namen "JOB_USER" und dem Usernamen job:
BEGIN DBMS_SCHEDULER.CREATE_CREDENTIAL( credential_name => 'JOB_USER', username => 'job', password => 'secretpwd'); END; /
Benutzen der Credentials beim Anlegen eines Jobs:
BEGIN DBMS_SCHEDULER.CREATE_JOB( job_name => 'EXTERNAL_JOB_TEST1', job_type => 'EXECUTABLE', job_action => '/home/job/ext_job.sh', enabled => FALSE); -- hier werden die Credentials benutzt -- DBMS_SCHEDULER.SET_ATTRIBUTE( name => 'EXTERNAL_JOB_TEST1', attribute => 'credential_name', VALUE => 'JOB_USER'); DBMS_SCHEDULER.SET_ATTRIBUTE( name => 'EXTERNAL_JOB_TEST1', attribute => 'destination', VALUE => 'server.company.com:12345'); DBMS_SCHEDULER.ENABLE( name => 'EXTERNAL_JOB_TEST1'); END; /
Dies ist gleichzeitig ein Beispiel, wie externe Programme auch auf einem Remote-Rechner ausgeführt werden können (dazu gibt es mehr in unserem TechnoCircle).
Das verschlüsselte Passwort (und andere Informationen) stehen dann in der Tabelle sys.scheduler$_credential.