News & Events
DBA-Tipp: Oracle - Welchem Scheduler vertraut man bei Backups?

Die Information ist ein schnelllebiges Gut. Jeden Tag werden wir mit hunderten Informationen zugemüllt. Deshalb sind wir bestrebt uns auf das Wesentliche zu konzentrieren und nur substantiell nachhaltige Informationen bereitzustellen.

Icon Unternehmen

Die Einrichtung von Datenbank-Backups mit RMAN ist einfach. Aber welchen Scheduler nutzt man im besten Fall? Alles 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. Fernab den Überlegung, wo die Datenbank aktuell läuft - Stichwort "Failover" - nimmt die Oracle einem die Überlegungen ab, und übernimmt diese Aufgabe.

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 betriebssystem eigenem Aufgabenplanung Gebrauch nehmen.

 


Newsletter-Archiv

Die Einrichtung von Datenbank-Backups mit RMAN ist einfach. Aber welchen Scheduler nutzt man im besten Fall? Alles 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. Fernab den Überlegung, wo die Datenbank aktuell läuft - Stichwort "Failover" - nimmt die Oracle einem die Überlegungen ab, und übernimmt diese Aufgabe.

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 betriebssystem eigenem Aufgabenplanung Gebrauch nehmen.