News:
Oracle - Welchem Scheduler vertraut man bei Backups?

Mit "DBMS_SCHEDULER" lassen sich Backups mit Datenbankmitteln realisieren.

Icon Unternehmen

Die Einrichtung von Datenbank-Backups mit RMAN ist einfach. Aber welchen Scheduler nutzt man im besten Fall? Alle Betriebssysteme, seien es Windows mit den "Geplanten Tasks", oder Linux mit dem "crontab"-System bieten hierfür eine Lösung. Seit der Version 12.1 ist es nun auch mit Datenbankmitteln, genau dem "DBMS_SCHEDULER", dem DBA möglich, dies einzurichten.

Credentials anlegen

    begin
      -- create the credential for operating system access
      dbms_credential.create_credential(credential_name => 'OS_CREDENTIAL',
                                        username        => 'oracle',
                                        password        => 'oracle',
                                        enabled         => true,
                                        comments        => 'OS credentials for backup jobs');

      -- create credential to provide RMAN with database access
      dbms_credential.create_credential(credential_name => 'DB_CREDENTIAL',
                                        username        => 'sys',
                                        password        => 'oracle',
                                        database_role   => 'sysdba',
                                        enabled         => true,
                                        comments        => 'DB credentials for backup jobs');
      end;
      /

Backup - Datenbank Full

    begin
      dbms_scheduler.create_job(        job_name        => 'DAILY_BACKUP_FULL',
                                        job_type        => 'BACKUP_SCRIPT',
                                        job_action      => 'run { backup check logical database plus archivelog not
                                                           backed up;' ||
                                                           'delete noprompt archivelog until time ''sysdate-1'';' ||
                                                           'delete noprompt obsolete; }',
                                        start_date      => trunc(sysdate),
                                        repeat_interval => 'freq=daily;byhour=23;byminute=00;bysecond=0',
                                        credential_name => 'OS_CREDENTIAL',
                                        enabled         => false,
                                        auto_drop       => false,
                                        comments        => 'backup job database full (daily execution)');
      -- add the db credential to the job.
      -- this can't be done in the create_job call
      dbms_scheduler.set_attribute(     name            => 'DAILY_BACKUP_FULL',
                                        attribute       => 'CONNECT_CREDENTIAL_NAME',
                                        value           => 'DB_CREDENTIAL');
      -- after enabling the job, backups are made according to the schedule
      dbms_scheduler.enable(            name            => 'DAILY_BACKUP_FULL');
    end;
    /

Logging und Fehlersuche

set linesize 10000
col job_name format a40
col schedule_name format a40
col schedule_type format a40
select job_name, start_date, next_run_date,LAST_START_DATE,LAST_RUN_DURATION from dba_scheduler_jobs where schedule_type like 'CALENDAR' and job_name like 'DAILY%';
select job_name, enabled from DBA_SCHEDULER_JOBS where job_name like 'DAILY%';

select session_key, to_char(start_time, 'DD-MON-YYYY HH24:MI:SS') START_TIME from v$rman_backup_job_details where status!='COMPLETED' order by start_time;
select output from v$rman_output where session_key=<session_key>;

Fazit:
Unabhängig von der Aufgabenverwaltung eines Betriebssystem ist es somit möglich, Backups sorgenfrei laufen zu lassen. Leider gibt es eine Einschränkung: Eine physische Standby-Datenbank hat kein aktives Scheduler-System. Will man hierbei Backups ressourcenschonend von der Datenbankkopie laufen lassen, muss man von Skripten und der systemeigenem Aufgabenplanung Gebrauch nehmen.