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 ».