Die Version 12c verfügt über drei neue Job Typen:
Damit können Sie jetzt einfacher Skripte im Betriebsystem starten. Der Benutzer, der den Job ausführt, benötigt das CREATE EXTERNAL JOB Recht zum Ausführen eines Jobs im Betriebssystem.
Nachdem im Internet derzeit (30.9.2013) kein Beispiel zu diesem Thema existiert, müssen wir uns selbst eines erstellen ...
Bei der Gelegenheit können wir gleich noch ein weiteres, neues Package vorstellen: DBMS_CREDENTIAL.
Dieses Package wird verwendet, um den Namen und das Passwort eines Betriebssystem-Benutzers abzuspeichern.
Für Unix also z. B.:
BEGIN
DBMS_CREDENTIAL.CREATE_CREDENTIAL (
credential_name => 'oracle_cred',
username => 'oracle',
password => 'oracle', -- Hier bitte Ihr Passwort eintragen
enabled => TRUE);
END;
/
Nun wollen wir einen Job anlegen, der SOFORT ein Verzeichnis im Betriebssystem anlegt:
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'EXT_JOB1',
job_type => 'EXTERNAL_SCRIPT',
job_action => 'mkdir /u01/xxx', -- Unix
-- job_action => 'mkdir c:\temp\xxx', -- Windows
enabled => TRUE,
credential_name => 'oracle_cred');
END;
/
Das Skript /u01/app/oracle/product/12.1.0.1/dbhome_1/root.sh musste bei uns unter Unix nochmals ausgeführt werden, da der Job mit der folgenden Fehlermeldung abbrach:
"EXTERNAL_LOG_ID="job_92849_34326",
ORA-27369: job of type EXECUTABLE failed with exit code: Input/output error"
Für Windows muss zuerst noch der Dienst OracleJobScheduler<sid> von deaktiviert auf manuell (oder automatisch) gesetzt und gestartet werden:
BEGIN
DBMS_CREDENTIAL.CREATE_CREDENTIAL (
credential_name => 'oracle_cred',
username => 'mpatzwahl',
password => 'password',
windows_domain => 'muniqsoft.de', -- optional
enabled => TRUE);
END;
/
Wenn jetzt ein SQL*Plus Skript gestartet werden soll, kann folgende Syntax verwendet werden:
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'EXT_JOB1',
job_type => 'SQL_SCRIPT',
-- job_action => '@c:\temp\test_job.sql', -- Windows
job_action => '@/u01/test_job.sql', -- Unix
enabled => TRUE,
credential_name => 'oracle_cred');
END;
/
Das Skript mit dem Namen test_job.sql besteht dann beispielsweise aus folgenden Zeilen:
connect system/sys
INSERT INTO scott.test_job_tab VALUES(sysdate);
COMMIT;
exit
Legen Sie zuvor noch eine Tabelle an:
CREATE TABLE scott.test_job_tab (datum date);
Jetzt ist im Connect des Skripts das Passwort zu lesen. Das ist aus Sicherheitsgründen nicht immer gewünscht. Sie können hierfür ein eigenes Credential anlegen, dieses wird verschlüsselt in der DB abgelegt.
BEGIN
DBMS_CREDENTIAL.CREATE_CREDENTIAL (
credential_name => 'db_cred',
username => 'system',
password => 'sys',
enabled => TRUE);
END;
/
Die Syntax für den Job lautet dann:
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'EXT_JOB1',
job_type => 'SQL_SCRIPT',
-- job_action => '@c:\temp\test_job.sql', -- Windows
job_action => '@/u01/test_job.sql', -- Windows
enabled => FALSE,
credential_name => 'oracle_cred');
DBMS_SCHEDULER.SET_ATTRIBUTE(
name => 'EXT_JOB1',
attribute => 'connect_credential_name',
value => 'db_cred');
DBMS_SCHEDULER.ENABLE ('EXT_JOB1');
END;
/
Das Gleiche funktioniert mit RMAN Skripten. Mittels eines external Jobs kann die DB ihre eigenen RMAN Skripten starten.
Wir legen eine Backupdatei (c:\temp\backup_job.rman) an:
connect target sys/sys
backup tablespace users;
Dann starten wir unseren Job sofort wieder:
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'RMAN_JOB1',
job_type => 'BACKUP_SCRIPT',
-- job_action => '@c:\temp\backup_job.rman', -- Windows
job_action => '@/home/oracle/backup.rman', -- Unix
enabled => TRUE,
credential_name => 'oracle_cred');
END;
/
Praktischerweise werden sowohl die SQL*Plus Ausgabe als auch die RMAN Logs in einer Tabelle (Spalte output) als CLOB gespeichert.
SELECT log_date, job_name, status, errors, output, additional_info
FROM dba_scheduler_job_run_details
ORDER BY log_date desc;
Nun viel Spaß mit dem Starten von Skripten via DBMS_SCHEDULER!
Und wenn Sie noch weitere 299 Neuerungen zu Oracle 12c kennen lernen möchten, kommen Sie doch in unsere Oracle 12c New Features Schulung, oder lassen Sie sich von unserem Consulting Team beraten.
In unserer Know-How Datenbank finden Sie mehr als 300 ausführliche Beiträge zu den
Oracle-Themen wie DBA, SQL, PL/SQL, APEX und vielem mehr.
Hier erhalten Sie Antworten auf Ihre Fragen.