Sélectionner une page

En restreignant l’accès au serveur qui héberge la base Oracle, Amazon Web Services (AWS)  empêche l’usage des outils du type “expdp”, “dgmgrl” ou encore “rman”. Cependant, l’offre Relational Database Services (RDS) d’AWS autorise l’utilisateur à réaliser des backup de type RMAN directement à partir de la base de données (notez cependant que la restauration RMAN n’est pas possible en direct sur la base Oracle RDS).

Pour effectuer un backup RMAN, il sera nécessaire d’utiliser la procédure « rdsadmin.rdsadmin_rman-util » contenu dans le package « rdsadmin » d’AWS RDS.
Mais pour demander une restauration RMAN, il va falloir passer par un process dédié, comme l’outil AWS CLI via les backups automatiques d’Amazon avec la commande « aws rds restore-db-instance-to-point-in-time ».

On peut se demander quel est l’intérêt de faire une sauvegarde RMAN à partir d’une instance, si AWS n’est pas capable de la restaurer. Tout d’abord, cela vous laisse le contrôle sur votre stratégie de backup : full, incremental, ou archivelog, avant d’externaliser les fichiers sur une cible externe ou un S3. Mais vous pouvez aussi utiliser ces fichiers RMAN pour justement effectuer une restauration de base (par contre, sur un serveur EC2 ou on-premise), ou encore isoler des séries de backups RMAN par exemple dans le cadre d’un exercice comptable, ou d’un audit réalisé par un cabinet externe par exemple.

Créer une sauvegarde RMAN sous Oracle RDS

Prérequis

Paramètres

La procédure rdsadmin.rdsadmin_rman_util a besoin d’appeler un certain nombre de paramètres qui seront les mêmes à chaque fois :

  • p_owner : à spécifier dans le p_directory_name (nom du propriétaire du répertoire)
  • p_directory_name : Nom du répertoire de la bdd ( au sens DIRECTORY d’Oracle )
  • p_label : nom du backup
  • p_compress : TRUE/FALSE détermine si la compression est activée ou non
  • p_include_archive_logs : TRUE/FALSE pour une sauvegarde avec ou sans archivelogs
  • p_include_controlfile : TRUE/FALSE pour une sauvegarde avec controlfile ou non
  • p_parallel : possibilité de sauvegarder sur (nombre) de canaux
  • p_rman_to_dbms_output : TRUE/FALSE affiche ou non les instructions RMAN via DBMS_OUTPUT. Penser à préciser “set serveroutput on”
  • p_section_size_mb : précise la taille de chaque fichier de sauvegarde (=MAXPIECESIZE dans RMAN)
  • p_validation_type : “PHYSICAL” (par défaut) ou “PHYSICAL+LOGICAL” recherchera la corruption éventuelle de blocs de bases de données.
Directory

Bien entendu, il faut un DIRECTORY avant de commencer la sauvegarde RMAN. C’est là que les fichiers vont se stocker. Utilisez la commande :

SQL> exec rdsadmin.rdsadmin_util.create_directory(p_directory_name => 'BACKUP_RMAN'); PL/SQL procedure successfully completed. SQL> select OWNER, DIRECTORY_NAME,DIRECTORY_PATH from dba_directories where DIRECTORY_NAME='BACKUP_RMAN'; OWNER      DIRECTORY_NAME            DIRECTORY_PATH---------- ------------------------- ---------------------------------------------SYS        BACKUP_RMAN               /rdsdbdata/userdirs/01
Mode ARCHIVELOG

Pensez à vérifier que la base de données est en mode ARCHIVELOG activé. Attention aux erreurs dans la destination des logs.

SQL>  select NAME,CREATED,LOG_MODE,OPEN_MODE,DATABASE_ROLE from v$database; NAME      CREATED   LOG_MODE     OPEN_MODE            DATABASE_ROLE--------- --------- ------------ -------------------- ----------------COWIGO   20-NOV-19 ARCHIVELOG   READ WRITE           PRIMARY  SQL> select DEST_ID,DEST_NAME,STATUS,TARGET,NAME_SPACE,DESTINATION,PROCESS,ERROR from v$archive_dest where status='VALID';    DEST_ID DEST_NAME            STATUS    TARGET           NAME_SP DESTINATION                              PROCESS    ERROR---------- -------------------- --------- ---------------- ------- ---------------------------------------- ---------- ----------         1 LOG_ARCHIVE_DEST_1   VALID     PRIMARY          SYSTEM  /rdsdbdata/db/COWIGO_A/arch/redolog     ARCH

Commencez par paramétrer la rétention des heures d’archivelogs avant toute chose. Il est possible par exemple de choisir de conserver 9h d’archivelogs sur un disque, et de les utiliser dans un autre processus (LogMiner par exemple).

SQL> exec rdsadmin.rdsadmin_util.set_configuration( name => 'archivelog retention hours', value => '12'); PL/SQL procedure successfully completed. SQL> commit; Commit complete. SQL> exec rdsadmin.rdsadmin_util.show_configuration;NAME:archivelog retention hoursVALUE:12DESCRIPTION:ArchiveLog expiration specifies the duration in hours before archive/redo log files are automatically deleted.NAME:tracefile retentionVALUE:10080DESCRIPTION:tracefile expiration specifies the duration in minutes before tracefiles in bdump are automatically deleted. PL/SQL procedure successfully completed.
Versions compatibles

Pour réaliser des backup RMAN sur une base de données Oracle RDS, il est nécessaire de configurer la base à partir d’une de ces versions de AWS :

– 11.2.0.4.v19 ou versions 11.2 supérieures – 12.1.0.2.v15 ou versions 12.1 supérieures – 12.2.0.1.ru-2019-01.rur-2019-01.r1 ou versions 12.2 supérieures

Sauvegarde complète

Afin de réaliser un backup de type FULL DATABASE, il va falloir recourir à la procédure « rdsadmin.rdsadmin_rman_util.backup_database_full ».
Voici un exemple de Full backup de la base COWIGO sur le nouveau directory « BACKUP_RMAN » créé à l’étape précédente.

set serveroutput onBEGIN rdsadmin.rdsadmin_rman_util.backup_database_full(   p_owner                 => 'SYS',    p_directory_name        => 'BACKUP_RMAN',   p_parallel              => 2,    p_section_size_mb       => 50,   p_rman_to_dbms_output   => TRUE);END;/

En combinant le mode « serveroutput on » avec l’option “p_rman_to_dbms_outputon », on affichera le mode verbeux du processus, qui montre la commande exacte lancée par RMAN :

RUN_RMAN_CMD: /rdsdbbin/oracle/bin/rman TARGET / LOG /rdsdbdata/log/trace/rds-rman-backup-database-2019-11-20.08-59-25.417855000.txt@/rdsdbdata/tmp/rds-rman-backup-database-2019-11-20.08-59-25.417855000.inputRecovery Manager: Release 12.1.0.2.0 - Production on Fri Jun 21 08:59:29 2019Copyright (c) 1982, 2014, Oracle and/or its affiliates. All rights reserved.connected to target database: COWIGO (DBID=703110999)RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;2> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/rdsdbdata/userdirs/01/BACKUP-2019-11-20-08-59-25-%F';3> CONFIGURE BACKUP OPTIMIZATION ON;4> RUN {5> ALLOCATE CHANNEL d1 DEVICE TYPE DISK FORMAT '/rdsdbdata/userdirs/01/BACKUP-2019-11-20-08-59-25-backup-%T-%U';6> ALLOCATE CHANNEL d2 DEVICE TYPE DISK FORMAT '/rdsdbdata/userdirs/01/BACKUP-2019-11-20-08-59-25-backup-%T-%U';7> crosscheck archivelog all;8> BACKUP DATABASE SECTION SIZE 50M;9> RELEASE CHANNEL d1;10> RELEASE CHANNEL d2;11> }12>

Rendez-vous dans le Directory spécifié pour constater la présence des fichiers.

SQL> select * from table (rdsadmin.rds_file_util.listdir(p_directory => ‘BACKUP_RMAN’));

FILENAME                                                     TYPE         FILESIZE MTIME------------------------------------------------------------ ---------- ---------- -------------------01/                                                          directory        4096 2019/11/20 09:09:33BACKUP-2019-11-20-08-59-25-backup-20190621-0gu4l1nu_4_1      file            49152 2019/11/20 08:59:42BACKUP-2019-11-20-08-59-25-backup-20190621-01u4l1nk_4_1      file         45965312 2019/11/20 08:59:35BACKUP-2019-11-20-08-59-25-backup-20190621-0gu4l1nu_6_1      file            57344 2019/11/20 08:59:42BACKUP-2019-11-20-08-59-25-backup-20190621-02u4l1nk_1_1      file         35233792 2019/11/20 08:59:33BACKUP-2019-11-20-08-59-25-backup-20190621-02u4l1nk_6_1      file         45842432 2019/11/20 08:59:41BACKUP-2019-11-20-08-59-25-backup-20190621-01u4l1nk_6_1      file         49684480 2019/11/20 08:59:36BACKUP-2019-11-20-08-59-25-backup-20190621-0mu4l1nu_2_1      file            49152 2019/11/20 08:59:42BACKUP-2019-11-20-08-59-25-backup-20190621-0gu4l1nu_5_1      file            90112 2019/11/20 08:59:42BACKUP-2019-11-20-08-59-25-backup-20190621-01u4l1nk_7_1      file         38756352 2019/11/20 08:59:37BACKUP-2019-11-20-08-59-25-backup-20190621-0ou4l1nu_1_1      file          6463488 2019/11/20 08:59:42BACKUP-2019-11-20-08-59-25-backup-20190621-0gu4l1nu_1_1      file          2351104 2019/11/20 08:59:42BACKUP-2019-11-20-08-59-25-backup-20190621-02u4l1nk_3_1      file         42885120 2019/11/20 08:59:39BACKUP-2019-11-20-08-59-25-backup-20190621-01u4l1nk_8_1      file         22667264 2019/11/20 08:59:38BACKUP-2019-11-20-08-59-25-backup-20190621-0gu4l1nu_3_1      file            49152 2019/11/20 08:59:42BACKUP-2019-11-20-08-59-25-backup-20190621-02u4l1nk_2_1      file         35938304 2019/11/20 08:59:38BACKUP-2019-11-20-08-59-25-backup-20190621-01u4l1nk_2_1      file         33734656 2019/11/20 08:59:34BACKUP-2019-11-20-08-59-25-backup-20190621-02u4l1nk_7_1      file         19382272 2019/11/20 08:59:42BACKUP-2019-11-20-08-59-25-backup-20190621-01u4l1nk_5_1      file         48603136 2019/11/20 08:59:36BACKUP-2019-11-20-08-59-25-backup-20190621-0mu4l1nu_1_1      file          6356992 2019/11/20 08:59:42BACKUP-2019-11-20-08-59-25-backup-20190621-02u4l1nk_4_1      file         37306368 2019/11/20 08:59:40BACKUP-2019-11-20-08-59-25-backup-20190621-0gu4l1nu_2_1      file           573440 2019/11/20 08:59:42BACKUP-2019-11-20-08-59-25-c-703110999-20190621-00           file          8421376 2019/11/20 08:59:43BACKUP-2019-11-20-08-59-25-backup-20190621-02u4l1nk_5_1      file         52469760 2019/11/20 08:59:40BACKUP-2019-11-20-08-59-25-backup-20190621-01u4l1nk_3_1      file         28262400 2019/11/20 08:59:34BACKUP-2019-11-20-08-59-25-backup-20190621-01u4l1nk_1_1      file         25346048

Interrogez la vue “v$rman_backup_job_details” pour vérifier si la sauvegarde a bien été prise en compte dans le controlfile.

SQL> select START_TIME,END_TIME,INPUT_BYTES/1024/1024,OUTPUT_BYTES/1024/1024,STATUS,INPUT_TYPE,ELAPSED_SECONDS/60 “Minutes”
from v$rman_backup_job_details where START_TIME > sysdate – 1 order by START_TIME;

START_TIME          END_TIME            INPUT_BYTES/1024/1024 OUTPUT_BYTES/1024/1024 STATUS                  INPUT_TYPE    Minutes------------------- ------------------- --------------------- ---------------------- ----------------------- ------------- ----------2019/11/20 08:59:32 2019/11/20 08:59:44              741.0625             559.164063 COMPLETED               DB FULL       .2

Sauvegarde incrémentale

Si vous préférez effectuer une sauvegarde en INCREMENTAL, utilisez la procédure “rdsadmin.rdsadmin_rman_util.backup_database_incremental“.

Block change tracking

Activer le block change tracking permet d’optimiser l’incrémentation. Pour cela, utilisez “rdsadmin.rdsadmin_rman_util.enable_block_change_tracking”

SQL> exec rdsadmin.rdsadmin_rman_util.enable_block_change_tracking; PL/SQL procedure successfully completed. SQL> select * from v$block_change_tracking; STATUS     FILENAME                                                          BYTES     CON_ID---------- ------------------------------------------------------------ ---------- ----------ENABLED    /rdsdbdata/db/COWIGO_A/changetracking/o1_mf_gjs99w4p_.chg     11599872          0

Lancez le backup incremental après cela.
Attention au paramètre “p_level” : “p_level” à 0, puis “p_level” à 1.

BEGIN    rdsadmin.rdsadmin_rman_util.backup_database_incremental(        p_owner               => 'SYS',         p_directory_name      => 'BACKUP_RMAN',        p_level              => 1,        p_parallel            => 2,          p_section_size_mb     => 50,        p_rman_to_dbms_output => TRUE);END;/

Comme on l’a vu pour la sauvegarde en mode FULL, il est possible de consulter le directory BACKUP_RMAN pour lister les fichiers générés, ou appeler la vue v$rman_backup_job_details afin de vérifier si la sauvegarde incrémentale s’est bien déroulée. On a aussi vu que le paramètre “p_rman_to_dbms_output” TRUE permettait d’afficher directement la sortie de la commande RMAN.
En activant le block change tracking, on peut voir lors du passage du “p_level” 1 que la commande RMAN ne traite que 300Mo de blocks de données en entrée, à la place des 740Mo du backup full.

SQL> select START_TIME,END_TIME,INPUT_BYTES/1024/1024,OUTPUT_BYTES/1024/1024,STATUS,INPUT_TYPE,ELAPSED_SECONDS/60 "Minutes" from v$rman_backup_job_details  2  where START_TIME > sysdate - 1 and INPUT_TYPE like '%INCR%' order by START_TIME; START_TIME          END_TIME            INPUT_BYTES/1024/1024 OUTPUT_BYTES/1024/1024 STATUS               INPUT_TYPE       Minutes------------------- ------------------- --------------------- ---------------------- ----------------------- ------------- ----------2019/11/20 09:49:41 2019/11/20 09:50:06             744.40625              561.40625 COMPLETED            DB INCR          .4166666672019/11/20 09:50:32 2019/11/20 09:50:55            300.820313               9.984375 COMPLETED            DB INCR          .383333333

Sauvegarde avec archivelogs

Il existe 4 façons de sauver les archivelogs :

  • sauvegardes des archivelogs complets
  • sauvegardes des archivelogs à partir d’une plage de dates
  • sauvegardes des archivelogs à partir d’une plage SCN
  • sauvegardes des archivelogs à partir d’une plage de séquence
Sauvegarde archivelogs complète

Utilisez “backup_archivelog_all”.

BEGIN    rdsadmin.rdsadmin_rman_util.backup_archivelog_all(        p_owner               => 'SYS',         p_directory_name      => 'BACKUP_RMAN',        p_parallel            => 2,          p_rman_to_dbms_output => TRUE);END;/

Pour le check, listez les fichiers dans ‘BACKUP_RMAN’ ou interrogez la vue v$rman_backup_job_details.

SQL> select START_TIME,END_TIME,INPUT_BYTES/1024/1024,OUTPUT_BYTES/1024/1024,STATUS,INPUT_TYPE,ELAPSED_SECONDS/60 "Minutes" from v$rman_backup_job_details  2  where START_TIME > sysdate - 1 and INPUT_TYPE like '%ARC%' order by START_TIME; START_TIME          END_TIME            INPUT_BYTES/1024/1024 OUTPUT_BYTES/1024/1024 STATUS               INPUT_TYPE       Minutes------------------- ------------------- --------------------- ---------------------- ----------------------- ------------- ----------2019/11/20 10:07:55 2019/11/20 10:07:57            6.93212891             6.93701172 COMPLETED            ARCHIVELOG    .033333333
Sauvegarde archivelogs avec plage de dates

Procédez avec “backup_archivelog_date”, en activant les paramètres ‘p_from_date’ et ‘p_to_date’ :

BEGIN    rdsadmin.rdsadmin_rman_util.backup_archivelog_date(        p_owner               => 'SYS',         p_directory_name      => 'BACKUP_RMAN',        p_from_date           => '20/11/2019 09:00:00',        p_to_date             => '20/11/2019 10:00:00',        p_parallel            => 2,          p_rman_to_dbms_output => FALSE);END;/

Check :

SQL> select START_TIME,END_TIME,INPUT_BYTES/1024/1024,OUTPUT_BYTES/1024/1024,STATUS,INPUT_TYPE,ELAPSED_SECONDS/60 "Minutes" from v$rman_backup_job_details  2  where START_TIME > sysdate - 1 and INPUT_TYPE like '%ARC%' order by START_TIME; START_TIME          END_TIME            INPUT_BYTES/1024/1024 OUTPUT_BYTES/1024/1024 STATUS               INPUT_TYPE       Minutes------------------- ------------------- --------------------- ---------------------- ----------------------- ------------- ----------20/11/2019 10:07:55 20/11/2019 10:07:57            6.93212891             6.93701172 COMPLETED            ARCHIVELOG    .03333333320/11/2019 10:20:03 20/11/2019 10:20:05            6.77636719             6.78076172 COMPLETED            ARCHIVELOG    .033333333
Sauvegarde archivelogs en plage SCN

Process “backup_archivelog_scn” + paramètres principaux ‘p_from_scn’ et ‘p_to_scn’ .
Par exemple, on cible ici les derniers archivelogs en date générés avec les SCN associés (ici, 1h d’historique) :

SQL> select NAME,FIRST_TIME,FIRST_CHANGE# from v$archived_log where FIRST_TIME > sysdate - (1/24) order by 3; NAME                                                         FIRST_TIME          FIRST_CHANGE#------------------------------------------------------------ ------------------- -------------/rdsdbdata/db/COWIGO_A/arch/redolog-258-1-1011452844.arc    20/11/2019 11:14:42        612259/rdsdbdata/db/ COWIGO _A/arch/redolog-259-1-1011452844.arc    20/11/2019 11:19:42        612396/rdsdbdata/db/ COWIGO _A/arch/redolog-260-1-1011452844.arc    20/11/2019 11:24:42        612566/rdsdbdata/db/ COWIGO _A/arch/redolog-261-1-1011452844.arc    20/11/2019 11:29:42        612706/rdsdbdata/db/ COWIGO _A/arch/redolog-262-1-1011452844.arc    20/11/2019 11:34:40        612840/rdsdbdata/db/ COWIGO _A/arch/redolog-263-1-1011452844.arc    20/11/2019 11:39:40        612993/rdsdbdata/db/ COWIGO _A/arch/redolog-264-1-1011452844.arc    20/11/2019 11:44:40        613124/rdsdbdata/db/ COWIGO _A/arch/redolog-265-1-1011452844.arc    20/11/2019 11:49:40        613257/rdsdbdata/db/ COWIGO _A/arch/redolog-266-1-1011452844.arc    20/11/2019 11:54:40        613420/rdsdbdata/db/ COWIGO _A/arch/redolog-267-1-1011452844.arc    20/11/2019 11:59:41        613550/rdsdbdata/db/ COWIGO _A/arch/redolog-268-1-1011452844.arc    20/11/2019 12:04:41

Choisissez ensuite une plage de SCN :

BEGIN    rdsadmin.rdsadmin_rman_util.backup_archivelog_scn(        p_owner               => 'SYS',         p_directory_name      => 'BACKUP_RMAN',        p_from_scn            => 612396,        p_to_scn              => 613550,        p_parallel            => 2,          p_rman_to_dbms_output => TRUE);END;/

Check :

SQL> select START_TIME,END_TIME,INPUT_BYTES/1024/1024,OUTPUT_BYTES/1024/1024,STATUS,INPUT_TYPE,ELAPSED_SECONDS/60 "Minutes" from v$rman_backup_job_details  2  where START_TIME > sysdate - 1 and INPUT_TYPE like '%ARC%' order by START_TIME; START_TIME          END_TIME            INPUT_BYTES/1024/1024 OUTPUT_BYTES/1024/1024 STATUS               INPUT_TYPE       Minutes------------------- ------------------- --------------------- ---------------------- ----------------------- ------------- ----------20/11/2019 10:07:55 20/11/2019 10:07:57            6.93212891             6.93701172 COMPLETED            ARCHIVELOG    .03333333320/11/2019 10:20:03 20/11/2019 10:20:05            6.77636719             6.78076172 COMPLETED            ARCHIVELOG    .03333333320/11/2019 12:16:56 20/11/2019 12:16:58            2.36523438             2.36816406 COMPLETED            ARCHIVELOG    .033333333

Sauvegarde archivelogs avec plage de séquences

De la même façon qu’une date ou le SCN, une sauvegarde RMAN avec plage de séquences utilisera un numéro de séquence des archivelogs générés. Appelez “backup_archivelog_sequence” avec les paramètres ‘p_from_sequence’ et ‘p_to_sequence’.

SQL> select NAME,FIRST_TIME,SEQUENCE# from v$archived_log where FIRST_TIME > sysdate – (2/24) ;

NAME                                                         FIRST_TIME           SEQUENCE#------------------------------------------------------------ ------------------- ----------/rdsdbdata/db/COWIGO_A/arch/redolog-248-1-1011452844.arc    20/11/2019 10:24:40        248/rdsdbdata/db/COWIGO_A/arch/redolog-249-1-1011452844.arc    20/11/2019 10:29:40        249/rdsdbdata/db/COWIGO_A/arch/redolog-250-1-1011452844.arc    20/11/2019 10:34:40        250/rdsdbdata/db/COWIGO_A/arch/redolog-251-1-1011452844.arc    20/11/2019 10:39:40        251/rdsdbdata/db/COWIGO_A/arch/redolog-252-1-1011452844.arc    20/11/2019 10:44:40        252/rdsdbdata/db/COWIGO_A/arch/redolog-253-1-1011452844.arc    20/11/2019 10:49:41        253/rdsdbdata/db/COWIGO_A/arch/redolog-254-1-1011452844.arc    20/11/2019 10:54:41        254/rdsdbdata/db/COWIGO_A/arch/redolog-255-1-1011452844.arc    20/11/2019 10:59:41        255/rdsdbdata/db/COWIGO_A/arch/redolog-256-1-1011452844.arc    20/11/2019 11:04:41        256/rdsdbdata/db/COWIGO_A/arch/redolog-257-1-1011452844.arc    20/11/2019 11:09:41        257/rdsdbdata/db/COWIGO_A/arch/redolog-258-1-1011452844.arc    20/11/2019 11:14:42        258/rdsdbdata/db/COWIGO_A/arch/redolog-259-1-1011452844.arc    20/11/2019 11:19:42        259/rdsdbdata/db/COWIGO_A/arch/redolog-260-1-1011452844.arc    20/11/2019 11:24:42        260/rdsdbdata/db/COWIGO_A/arch/redolog-261-1-1011452844.arc    20/11/2019 11:29:42        261/rdsdbdata/db/COWIGO_A/arch/redolog-262-1-1011452844.arc    20/11/2019 11:34:40        262/rdsdbdata/db/COWIGO_A/arch/redolog-263-1-1011452844.arc    20/11/2019 11:39:40        263/rdsdbdata/db/COWIGO_A/arch/redolog-264-1-1011452844.arc    20/11/2019 11:44:40        264/rdsdbdata/db/COWIGO_A/arch/redolog-265-1-1011452844.arc    20/11/2019 11:49:40        265/rdsdbdata/db/COWIGO_A/arch/redolog-266-1-1011452844.arc    20/11/2019 11:54:40        266/rdsdbdata/db/COWIGO_A/arch/redolog-267-1-1011452844.arc    20/11/2019 11:59:41        267/rdsdbdata/db/COWIGO_A/arch/redolog-268-1-1011452844.arc    20/11/2019 12:04:41        268/rdsdbdata/db/COWIGO_A/arch/redolog-269-1-1011452844.arc    20/11/2019 12:09:41        269/rdsdbdata/db/COWIGO_A/arch/redolog-270-1-1011452844.arc    20/11/2019 12:14:41        270

Appelez la procédure suivante :

BEGIN    rdsadmin.rdsadmin_rman_util.backup_archivelog_sequence(        p_owner               => 'SYS',         p_directory_name      => 'BACKUP_RMAN',        p_from_sequence       => 250,        p_to_sequence         => 268,        p_parallel            => 2,          p_rman_to_dbms_output => FALSE);END;/

Result :

SQL> select START_TIME,END_TIME,INPUT_BYTES/1024/1024,OUTPUT_BYTES/1024/1024,STATUS,INPUT_TYPE,ELAPSED_SECONDS/60 "Minutes" from v$rman_backup_job_details  2  where START_TIME > sysdate - 1 and INPUT_TYPE like '%ARC%' order by START_TIME; START_TIME          END_TIME            INPUT_BYTES/1024/1024 OUTPUT_BYTES/1024/1024 STATUS               INPUT_TYPE       Minutes------------------- ------------------- --------------------- ---------------------- ----------------------- ------------- ----------20/11/2019 10:07:55 20/11/2019 10:07:57            6.93212891             6.93701172 COMPLETED            ARCHIVELOG    .03333333320/11/2019 10:20:03 20/11/2019 10:20:05            6.77636719             6.78076172 COMPLETED            ARCHIVELOG    .03333333320/11/2019 12:16:56 20/11/2019 12:16:58            2.36523438             2.36816406 COMPLETED            ARCHIVELOG    .03333333320/11/2019 12:25:18 20/11/2019 12:25:21            5.14501953             5.15039063 COMPLETED            ARCHIVELOG      .05

Validation

Utilisez la procédure “rdsadmin.rdsadmin_rman_util.validate_database” pour valider les fichiers de la base de données (paramètres à définir). Pour une validation par défaut, appelez simplement ‘exec rdsadmin.rdsadmin_rman_util.validate_database’, sinon :

BEGIN    rdsadmin.rdsadmin_rman_util.validate_database(        p_validation_type     => 'PHYSICAL+LOGICAL',         p_parallel            => 4,          p_section_size_mb     => 50,        p_rman_to_dbms_output => TRUE);END;/

Avec ‘p_rman_to_dbms_output’ en TRUE, le rapport des datafiles s’afficher à l’écran.
Exemple :

List of Datafiles=================File Status Marked Corrupt Empty Blocks Blocks Examined High SCN---- ------ -------------- ------------ --------------- ----------4    OK     0              12030        12799           3792File Name: /rdsdbdata/db/COWIGO_A/datafile/o1_mf_users_gf76fbhb_.dbfBlock Type Blocks Failing Blocks Processed---------- -------------- ----------------Data       0              0Index      0              0Other      0              769channel d1: validation complete, elapsed time: 00:00:01List of Control File and SPFILE===============================File Type    Status Blocks Failing Blocks Examined------------ ------ -------------- ---------------SPFILE       OK     0              2channel d2: validation complete, elapsed time: 00:00:01List of Control File and SPFILE===============================File Type    Status Blocks Failing Blocks Examined------------ ------ -------------- ---------------Control File OK     0              562

Transfert des données vers Amazon S3

Après une sauvegardes RMAN réalisée avec succès, il est possible d’exporter les données vers une instance externe (on-premise ou EC2, vers un stockage S3 par exemple. Il faudra alors les envoyer depuis le directory ‘BACKUP_RMAN’ vers un bucket S3 ; ici nommé ‘backuprman2019’.
Affichez le listing des derniers backup présents sur le directory Oracle :

SQL> select * from table(rdsadmin.rds_file_util.listdir(p_directory => 'BACKUP_RMAN')) order by 4 desc ; FILENAME                                                     TYPE         FILESIZE MTIME------------------------------------------------------------ ---------- ---------- -------------------01/                                                          directory       12288 20/11/2019 12:25:20BACKUP-2019-11-20-12-25-13-backup-20190621-3fu4ldpg_1_1      file           196096 20/11/2019 12:25:20BACKUP-2019-11-20-12-25-13-backup-20190621-3eu4ldpe_1_1      file          2499072 20/11/2019 12:25:19BACKUP-2019-11-20-12-25-13-backup-20190621-3du4ldpe_1_1      file          2706944 20/11/2019 12:25:19BACKUP-2019-11-20-12-16-51-backup-20190621-3cu4ld9p_1_1      file           132608 20/11/2019 12:16:57BACKUP-2019-11-20-12-16-51-backup-20190621-3bu4ld9p_1_1      file          2351616 20/11/2019 12:16:57BACKUP-2019-11-20-10-19-57-backup-20190621-3au4l6ek_1_1      file           382976 20/11/2019 10:20:04BACKUP-2019-11-20-10-19-57-backup-20190621-38u4l6ej_1_1      file          3680256 20/11/2019 10:20:03BACKUP-2019-11-20-10-19-57-backup-20190621-39u4l6ej_1_1      file          3048448 20/11/2019 10:20:03BACKUP-2019-11-20-10-07-50-backup-20190621-36u4l5ns_1_1      file          3429888 20/11/2019 10:07:56BACKUP-2019-11-20-10-07-50-backup-20190621-35u4l5ns_1_1      file          3731456 20/11/2019 10:07:56BACKUP-2019-11-20-10-07-50-backup-20190621-37u4l5ns_1_1      file           114176 20/11/2019 10:07:56BACKUP-2019-11-20-09-50-27-c-703110999-20190621-03           file          9306112 20/11/2019 09:50:55BACKUP-2019-11-20-09-50-27-backup-20190621-33u4l4nr_1_1      file            40960 20/11/2019 09:50:53BACKUP-2019-11-20-09-50-27-backup-20190621-31u4l4nq_2_1      file            40960 20/11/2019 09:50:52BACKUP-2019-11-20-09-50-27-backup-20190621-31u4l4nq_1_1      file            40960 20/11/2019 09:50:51BACKUP-2019-11-20-09-50-27-backup-20190621-2ru4l4nl_6_1      file            40960 20/11/2019 09:50:51.........

Transférez ensuite ces fichiers vers le nouveau bucket S3 backuprman2019.

Configuration d’AWS

Cette config unique permettre de prendre en charge les échanges entre les services base de données RDS et Amazon S3.
Notez que l’utilisateur devra disposer du rôle adéquat pour manipuler les services IAM, RDS et S3, ou que la machine EC2 pourra remplir ce rôle.
Configurez AWS_CLI via “aws configure au moyen de l’outil AWS_CLI.

Le bucket

Créez le nouveau bucket avec impérativement l’option “–create-backup-configuration LocationConstraint” avec la région souhaitée (Ici Lyon). Si vous ne le faites pas, le bucket va se créer par défaut sur la région ‘eu-east-1’.

C: aws s3api create-bucket –bucket backuprman2019 –region eu-west-3 –create-bucket-configuration LocationConstraint=eu-west-3
{
“Location”: “http://backuprman2019.s3.amazonaws.com/”
}
Policy du bucket S3

Autorisez ensuite la base RDS à accéder au bucket S3 ainsi créé. Il va falloir définir une nouvelle stratégie, et un nouveau rôle ensuite.
Pour faciliter les choses, utilisez le nom ARN du bucket et nommez la policy ‘rds-s3-backup-policy‘.

Pour définir cette nouvelle policy, il est plus intéressant de la créer directement dans un fichier ‘policy-rds.json‘ et de l’appeler ensuite au moyen de AWS_CLI.
Vérifiez l’entrée suivante dans le fichier json :

{     "Version": "2012-10-17",     "Statement": [       {         "Sid": "s3integration",         "Action": [           "s3:GetObject",           "s3:ListBucket",           "s3:PutObject"         ],         "Effect": "Allow",         "Resource": [           "arn:aws:s3:::backuprman2019",            "arn:aws:s3:::backuprman2019/*"         ]       }     ]   }

Puis, vérifiez l’AWS_CLI :

C: aws iam create-policy --policy-name rds-s3-backup-policy --policy-document file://policy-rds.json{    "Policy": {        "PolicyName": "rds-s3-backup-policy",        "PermissionsBoundaryUsageCount": 0,        "CreateDate": "2019-11-20T13:35:33Z",        "AttachmentCount": 0,        "IsAttachable": true,        "PolicyId": "ANPAQIMXBNKBLEYWLTCIH",        "DefaultVersionId": "v1",        "Path": "/",        "Arn": "arn:aws:iam::018033502850:policy/rds-s3-backup-policy",        "UpdateDate": "2019-11-20T13:35:33Z"    }}

Ici, le nom ARN de la policy est : arn:aws:iam::018033502850:policy/rds-s3-backup-policy

Rôle IAM pour approbation

On va ici créer le rôle qui va gérer la relation d’approbation entre Amazon RDS et le bucket S3. Pour ça, on utilise à nouveau un json nommé ici ‘rds-s3-approb.json‘ sous la forme suivante :

{     "Version": "2012-10-17",     "Statement": [       {         "Effect": "Allow",         "Principal": {            "Service": "rds.amazonaws.com"          },         "Action": "sts:AssumeRole"       }     ]   }

Appelez ensuite AWS_CLI :

C: aws iam create-role --role-name rds-s3-approb-role --assume-role-policy-document file://rds-s3-approb.json{    "Role": {        "AssumeRolePolicyDocument": {            "Version": "2012-10-17",            "Statement": [                {                    "Action": "sts:AssumeRole",                    "Effect": "Allow",                    "Principal": {                        "Service": "rds.amazonaws.com"                    }                }            ]        },        "RoleId": "AROAQIMXBNKBLRYFQ3BT7",        "CreateDate": "2019-11-20T13:50:24Z",        "RoleName": "rds-s3-approb-role",        "Path": "/",        "Arn": "arn:aws:iam::018033502850:role/rds-s3-approb-role"    }}

Voici l’ARN de ce rôle : arn:aws:iam::018033502850:role/rds-s3-approb-role

Enfin, attachez la stratégie au rôle :

C: aws iam attach-role-policy --policy-arn arn:aws:iam::018033502850:policy/rds-s3-backup-policy --role-name rds-s3-approb-role
Rôle de l’instance RDS

Il s’agit ici d’enregistrer l’instance COWIGO au moyen du rôle ‘rds-s3-approb-role’ créé à l’étape d’ avant, grâce à l’ARN du rôle.

C: aws rds add-role-to-db-instance --db-instance-identifier COWIGO --feature-name S3_INTEGRATION --role-arn arn:aws:iam::018033502850:role/rds-s3-approb-role

La feature_name S3_INTEGRATION est un nom générique qui désigne l’option propre à ce rôle. Ne le changez pas.

Groupe d’options RDS

Dans l’étape suivante, il va falloir modifier le groupe d’options de l’instance Oracle RDS ainsi créée.
Notez qu’il n’est pas possible de changer le groupe d’option par défaut : il va falloir en créer un et l’affecter ensuite à l’instance COWIGO.
Ce groupe d’options va donc être ici nommé ‘COWIGO-121-optionsgroup’ pour la version Enterprise Edition du moteur 12.1.

C: aws rds create-option-group --option-group-name COWIGO-121-optiongroup --engine-name oracle-ee --major-engine-version 12.1 --option-group-description "Option groupe pour COWIGO"{    "OptionGroup": {        "OptionGroupName": "COWIGO-121-optiongroup",        "OptionGroupDescription": "Option groupe pour COWIGO",        "EngineName": "oracle-ee",        "MajorEngineVersion": "12.1",        "Options": [],        "AllowsVpcAndNonVpcInstanceMemberships": true,        "OptionGroupArn": "arn:aws:rds:eu-west-3:018033502850:og:COWIGO-121-optiongroup"    }}

De cette façon, l’instance va prendre en compte le nouveau groupe d’options :

C: aws rds modify-db-instance --db-instance-identifier COWIGO --option-group-name "COWIGO-121-optiongroup"  --apply-immediately

Notez cette caractéristique parmi les informations retournées par la commande :

"OptionGroupMemberships": [           {               "OptionGroupName": "COWIGO-121-optiongroup",               "Status": "pending-apply"           },           {               "OptionGroupName": "default:oracle-ee-12-1",               "Status": "pending-removal"           }       ],

Enfin, validez la prise en compte au moyen de l’instruction “describe-db-instances“ :

C: aws rds describe-db-instances --db-instance-identifier COWIGO --query "DBInstances[*].[OptionGroupMemberships]"[    [        [            {                "OptionGroupName": "COWIGO-121-optiongroup",                "Status": "in-sync"            }        ]    ]]

Et affectez l’option propre au nouveau groupe d’options :

C: aws rds add-option-to-option-group --option-group-name "COWIGO-121-optiongroup" --options OptionName=S3_INTEGRATION,OptionVersion=1.0{    "OptionGroup": {        "OptionGroupName": "COWIGO-121-optiongroup",        "OptionGroupDescription": "Option groupe pour COWIGO",        "EngineName": "oracle-ee",        "MajorEngineVersion": "12.1",        "Options": [            {                "OptionName": "S3_INTEGRATION",                "OptionDescription": "Enables S3_INTEGRATION for data ingestion",                "Persistent": false,                "Permanent": false,                "OptionVersion": "1.0",                "OptionSettings": [],                "DBSecurityGroupMemberships": [],                "VpcSecurityGroupMemberships": []            }        ],        "AllowsVpcAndNonVpcInstanceMemberships": false,        "VpcId": "vpc-09c93b8bac48a99ff",        "OptionGroupArn": "arn:aws:rds:eu-west-3:018033502850:og:COWIGO-121-optiongroup"    }}

Copie des backup RMAN vers S3

Après la phase de prérequis, il est temps de réaliser la copie des fichiers de sauvegarde RMAN et de les envoyer vers le bucket S3 ‘COWIGOrman2019’ grâce à la fonction “rdsadmin.rdsadmin_s3_tasks.upload_to_s3”. Pour réaliser cette opération, il faudra gérer les valeurs de paramètres suivantes :

  • p_bucket_name : nom du bucket S3
  • p_directory_name :  nom du directory Oracle
  • p_s3_prefix :  préfixe des noms de fichiers dans le S3
  • p_prefix : préfixe des noms de fichiers dans le directory

Pour rapatrier tous les fichiers préfixés ‘BACKUP-2019-11-20%’ depuis le directory BACKUP_RMAN vers le bucket S3 ‘backuprman2019’, cela donne :

SQL > SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3(p_bucket_name => 'backuprman2019', p_prefix => 'BACKUP', p_s3_prefix  => '',   p_directory_name =>  'BACKUP_RMAN') AS TASK_ID   FROM DUAL;

Et voici le task id :

TASK_ID
———————————————-
1561389117542-1872

Suivez l’évolution de la tâche en appelant directement le bucket s3 :

C: aws s3 ls s3://backuprman20192019-11-24 15:12:04   25673728 BACKUP-2019-11-24-15-06-15-backup-20191124-01u4tkbd_1_12019-11-24 15:12:14   33734656 BACKUP-2019-11-24-15-06-15-backup-20191124-01u4tkbd_2_12019-11-24 15:12:12   28262400 BACKUP-2019-11-24-15-06-15-backup-20191124-01u4tkbd_3_12019-11-24 15:12:09   45981696 BACKUP-2019-11-24-15-06-15-backup-20191124-01u4tkbd_4_12019-11-24 15:12:16   48603136 BACKUP-2019-11-24-15-06-15-backup-20191124-01u4tkbd_5_12019-11-24 15:12:08   49684480 BACKUP-2019-11-24-15-06-15-backup-20191124-01u4tkbd_6_12019-11-24 15:12:15   38723584 BACKUP-2019-11-24-15-06-15-backup-20191124-01u4tkbd_7_12019-11-24 15:12:07   13762560 BACKUP-2019-11-24-15-06-15-backup-20191124-01u4tkbd_8_12019-11-24 15:12:02   34521088 BACKUP-2019-11-24-15-06-15-backup-20191124-02u4tkbd_1_12019-11-24 15:12:14   35414016 BACKUP-2019-11-24-15-06-15-backup-20191124-02u4tkbd_2_12019-11-24 15:12:13   42885120 BACKUP-2019-11-24-15-06-15-backup-20191124-02u4tkbd_3_12019-11-24 15:12:10   37306368 BACKUP-2019-11-24-15-06-15-backup-20191124-02u4tkbd_4_12019-11-24 15:11:58   52469760 BACKUP-2019-11-24-15-06-15-backup-20191124-02u4tkbd_5_12019-11-24 15:12:07   42541056 BACKUP-2019-11-24-15-06-15-backup-20191124-02u4tkbd_6_12019-11-24 15:12:14      49152 BACKUP-2019-11-24-15-06-15-backup-20191124-02u4tkbd_7_12019-11-24 15:12:08   52461568 BACKUP-2019-11-24-15-06-15-backup-20191124-0gu4tkbm_1_1

ou en utilisant la procédure “rdsadmin.rds_file_util.read_text_file”  (log dans le directory BDUMP) :

SQL> select text from table(rdsadmin.rds_file_util.read_text_file('BDUMP','dbtask-1561389117542-1872.log')); TEXT----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------2019-11-24 15:11:57.621 UTC [INFO ] File #1: Uploading the file /rdsdbdata/userdirs/01/BACKUP-2019-11-24-15-06-15-backup-20191124-02u4tkbd_5_1 to Amazon S3 with bucket name backuprman2019 and key BACKUP-2019-11-24-15-06-15-backup-20191124-02u4tkbd_5_1. 2019-11-24 15:11:58.384 UTC [INFO ] The file /rdsdbdata/userdirs/01/BACKUP-2019-11-24-15-06-15-backup-20191124-02u4tkbd_5_1 was uploaded to Amazon S3 with bucket name backuprman2019 and keyBACKUP-2019-11-24-15-06-15-backup-20191124-02u4tkbd_5_1. 2019-11-24 15:11:58.384 UTC [INFO ] File #2: Uploading the file /rdsdbdata/userdirs/01/BACKUP-2019-11-24-15-09-19-backup-20191124-0ru4tkh4_1_1 to Amazon S3 with bucket name backuprman2019 and key BACKUP-2019-11-24-15-09-19-backup-20191124-0ru4tkh4_1_1. 2019-11-24 15:11:58.779 UTC [INFO ] The file /rdsdbdata/userdirs/01/BACKUP-2019-11-24-15-09-19-backup-20191124-0ru4tkh4_1_1 was uploaded to Amazon S3 with bucket name backuprman2019 and keyBACKUP-2019-11-24-15-09-19-backup-20191124-0ru4tkh4_1_1. 2019-06-24 15:11:58.780 UTC [INFO ] File #3: Uploading the file /rdsdbdata/userdirs/01/BACKUP-2019-11-24-15-09-19-backup-20191124-19u4tkhk_1_1 to Amazon S3 with bucket name backuprman2019 and key BACKUP-2019-11-24-15-09-19-backup-20191124-19u4tkhk_1_1.

Log de fin :

2019-11-24 15:12:15.831 UTC [INFO ] The task finished successfully.

105 rows selected.

Une fois les fichiers RMAN de cette base RDS rapatriés sur S3, vous pourrez ensuite les transférer sur un EC2, ou un serveur « on premise ».