Canalblog
Editer l'article Suivre ce blog Administration + Créer mon blog
Publicité
Blog d'un DBA sur le SGBD Oracle et SQL
5 novembre 2020

Création d'un catalogue RMAN - Creation of an RMAN catalog

                    

Introduction
Le catalogue RMAN est un référentiel (repository) utilisé pour stocker les métadatas des sauvegardes RMAN de bases Oracle.

Il y a de multiples avantages à utiliser ce catalogue : 

  • les métadatas des sauvegardes RMAN sont stockées à deux endroits différents : les control files des bases qui restent le repository primaire mais aussi le catalog, qui devient le repository secondaire; il y a donc une redondance de ces informations
  • il gère N bases, tout est centralisé et donc cela facilite les opérations de reporting et d'administration
  • il stocke plus longtemps l'historique des sauvegardes RMAN que le control file, qui, lui, est limité en taille et donc doit faire régulièrement des purges sur les métadatas des vieux backups
  • il garde un historique de la structure de la base de données (tablespaces, datafiles) alors que le ctrl file n'a que la structure actuelle (ce point est à valider)
  • certaines fonctionnalités RMAN ne sont accessibles que via le catalogue: par exemple exécuter des scripts RMAN
  • le catalogue RMAN est obligatoire si on utilise RMAN avec Dataguard
  • les données des sauvegardes étant stockées dans des vues dédiées, il est possible d'utiliser toute la puissance du SQL pour interroger celles-ci sans passer par les commandes LIST et REPORT

A noter que le user SYS ne peut pas être propriétaire de ce catalogue.



Points d'attention
N/A.




Base de tests
Une base Oracle 18c multi-tenants. 




Exemples

============================================================================================
Création du catalogue RMAN
============================================================================================
Pour se connecter à RMAN, il faut utiliser la syntaxe : 
     rman TYPE_DE_BASE login/password@service_base avec TYPE_DE_BASE = TARGET, CATALOG, AUXILIARY

Création de la base de données dédiée au catalogue RMAN
C'est mieux de la créer avec la nouvelle architecture CDB car l'ancienne n'est plus supportée par Oracle. 
Ne pas utiliser une base applicative déjà existante car elle stockera les métadatas des sauvegardes des autres bases, ce qui n'est pas propre.  

On peut utiliser la base contenant le Cloud Control ou en créer une nouvelle via DBCA ou CREATE DATABASE. Je vais utiliser ma VM Oracle et lancer le script newpdbords pour créer la PDB de test ords. Je ne mets pas la sortie ici, aucun intérêt.
     [oracle@vbgeneric ~]$ newpdbords
 
J'ai maintenant deux PDBs de test dans mon container, orcl et ords. Je me connecte au CDB$ROOT pour voir que la base ords existe bien.
     SQL> select PDB_NAME, DBID from dba_pdbs order by 1;
     PDB_NAME DBID
     -------------------- ----------
     ORCL 2846920952
     ORDS 4018883664
     PDB$SEED 1016842785

Création du tablespace dédié au catalogue

On crée maintenant dans la base le tablespace qui va héberger le catalogue RMAN; on s'y connecte comme SYS.
     [oracle@vbgeneric ~]$ sqlplus SYS/oracle@ords as sysdba
     SQL> show con_name
     CON_NAME
     ------------------------------
     ORDS

    SQL> create tablespace CATALOG_RMAN datafile '/u01/app/oracle/oradata/orcl12c/ORDS/catalog_rman.dbf' size 32m autoextend on next 32m maxsize 2048m extent management local;
     Tablespace created.

     SQL> select TABLESPACE_NAME from DBA_TABLESPACES order by 1;

     TABLESPACE_NAME
     ------------------------------
     CATALOG_RMAN
     SYSAUX
     SYSTEM
     TEMP
     UNDOTBS1
     USERS
     6 rows selected.

Création du user propriétaire du catalogue RMAN
Attention à bien lui associer par défaut le tablespace créé précédemment et le droit recovery_catalog_owner; il doit pouvoir se connecter aussi donc n'oubliez pas connect comme droit (dba n'est pas important mais je préfère).

     SQL> CREATE USER usercat IDENTIFIED BY usercat DEFAULT TABLESPACE CATALOG_RMAN QUOTA UNLIMITED ON CATALOG_RMAN ACCOUNT UNLOCK;
     User created.

     SQL> GRANT dba, connect, resource, recovery_catalog_owner TO usercat;
     Grant succeeded.

Création du catalogue RMAN proprement dit par le user dédié
Vérification que les tables du catalogue RMAN n'existent pas encore dans le schéma du user usercat.
     SQL> connect usercat/usercat@ords;
     SQL> select * from user_tables order by 1;
     no rows selected

Le user usercat se connecte dans RMAN avec l'option CATALOG; c'est lui qui crée le catalogue et non pas SYS (déconseillé voir interdit par Oracle).
Vous noterez la ligne "connected to recovery catalog database".
     [oracle@vbgeneric ~]$ rman CATALOG usercat/usercat@ords
     Recovery Manager: Release 12.2.0.1.0 - Production on Wed Nov 4 06:52:35 2020
     Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved.
     connected to recovery catalog database

La commande est hyper simple, merci Oracle :-) Par contre la sortie est inexistante... Oracle crée 158 tables et vues pour gérer le catalogue.

     RMAN> CREATE CATALOG;
     recovery catalog created

     SQL> select count(*) from user_objects where object_type in ('TABLE', 'VIEW');

     COUNT(*)
     ----------
     158

Les vues les plus intéressantes du catalogue RMAN commencent par RC_ (pour Recovery Catalog).
     SQL> select object_name from dba_objects where object_name like 'RC/_%' escape ('/') order by 1 ;
     OBJECT_NAME
     ------------------------------------------------------------------------------
     RC_ARCHIVED_LOG
     RC_BACKUP_ARCHIVELOG_DETAILS
     RC_BACKUP_ARCHIVELOG_SUMMARY
     RC_BACKUP_CONTROLFILE
     RC_BACKUP_CONTROLFILE_DETAILS
     RC_BACKUP_CONTROLFILE_SUMMARY
     RC_BACKUP_COPY_DETAILS
     RC_BACKUP_COPY_SUMMARY
     RC_BACKUP_CORRUPTION
     RC_BACKUP_DATAFILE
     RC_BACKUP_DATAFILE_DETAILS
     RC_BACKUP_DATAFILE_SUMMARY
     RC_BACKUP_FILES
     RC_BACKUP_PIECE
     RC_BACKUP_PIECE_DETAILS
     RC_BACKUP_REDOLOG
     RC_BACKUP_SET
     RC_BACKUP_SET_DETAILS
     RC_BACKUP_SET_SUMMARY
     RC_BACKUP_SPFILE
     RC_BACKUP_SPFILE_DETAILS
     RC_BACKUP_SPFILE_SUMMARY
     RC_CHECKPOINT
     RC_CONTROLFILE_COPY
     RC_COPY_CORRUPTION
     RC_CURRENT_XMLFILE
     RC_DATABASE
     RC_DATABASE_BLOCK_CORRUPTION
     RC_DATABASE_INCARNATION
     RC_DATAFILE
     RC_DATAFILE_COPY
     RC_DELETED_OBJECT
     RC_DISK_RESTORE_RANGE
     RC_LBRECSETIMPL_T
     RC_LBRECSETIMPL_T
     RC_LBRECSET_T
     RC_LBREC_T
     RC_LISTBACKUPPIPE
     RC_LISTRSRANGEPIPE
     RC_LOG_HISTORY
     RC_OFFLINE_RANGE
     RC_PDBS
     RC_PLUGGABLE_DATABASE_INC
     RC_PROXY_ARCHIVEDLOG
     RC_PROXY_ARCHIVELOG_DETAILS
     RC_PROXY_ARCHIVELOG_SUMMARY
     RC_PROXY_CONTROLFILE
     RC_PROXY_COPY_DETAILS
     RC_PROXY_COPY_SUMMARY
     RC_PROXY_DATAFILE
     RC_RANGERECSETIMPL_T
     RC_RANGERECSETIMPL_T
     RC_RANGERECSET_T
     RC_RANGEREC_T
     RC_RCVER
     RC_REDO_LOG
     RC_REDO_THREAD
     RC_RESTORE_POINT
     RC_RESTORE_RANGE
     RC_RESYNC
     RC_RMAN_BACKUP_JOB_DETAILS
     RC_RMAN_BACKUP_SUBJOB_DETAILS
     RC_RMAN_BACKUP_TYPE
     RC_RMAN_CONFIGURATION
     RC_RMAN_OUTPUT
     RC_RMAN_STATUS
     RC_SBT_RESTORE_RANGE
     RC_SITE
     RC_STORED_SCRIPT
     RC_STORED_SCRIPT_LINE
     RC_TABLESPACE
     RC_TEMPFILE
     RC_UNUSABLE_BACKUPFILE_DETAILS
     RC_WATERMARKS
     74 rows selected.

Enregistrement d'une ou N bases dans le catalogue RMAN
Il faut maintenant enregistrer les bases Oracle dans le catalogue RMAN. Si cette opération échoue, vérifiez que le listener est démarré car les bases TARGET et CATALOG peuvent être sur deux serveurs différents et donc doivent communiquer par le réseau et le listener. 

Il est impératif de se connecter dans RMAN à la fois à la base cible et à la base catalog. Notez qu'il est impossible de se connecter à une PDB comme TARGET, la TARGET doit être la CDB; après tout c'est normal car on veut enregistrer toutes les bases du container et pas seulement une partie.

Si on se connecte à la PDB orcl comme TARGET : message d'erreur! Par contre la base CATALOG peut être une PDB.

     [oracle@vbgeneric ~]$ rman TARGET sys/oracle@orcl CATALOG usercat/usercat@ORDS
     Recovery Manager: Release 12.2.0.1.0 - Production on Wed Nov 4 06:57:07 2020
     Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved.
     connected to target database: ORCL12C:ORCL (DBID=2846920952)
     RMAN-00571: ===========================================================
     RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
     RMAN-00571: ===========================================================
     RMAN-00554: initialization of internal recovery manager package failed
     RMAN-01005: recovery catalog is not supported when connected to pluggable database

Si on remplace orcl@ par @orcl12c, on passe de la PDB au CDB et là, la connexion est OK avec deux messages de connexion aux deux bases.

     [oracle@vbgeneric ~]$ rman TARGET sys/oracle@orcl12c CATALOG usercat/usercat@ORDS
     Recovery Manager: Release 12.2.0.1.0 - Production on Wed Nov 4 06:57:24 2020
     Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved.
     connected to target database: ORCL12C (DBID=768045447)
     connected to recovery catalog database

Une fois la connexion OK, on enregistre simplement la base applicative avec la commande REGISTER DATABASE.
Vous noterez la resynchronisation entre les deux bases : les métadatas des sauvegardes RMAN du ctrl file de la base target sont copiées dans le catalogue RMAN mais également les infos sur la structure de la base target comme les datafiles, tablespaces...
     RMAN> REGISTER DATABASE;
     database registered in recovery catalog
     starting full resync of recovery catalog
     full resync complete

Vérification que la base cible est bien enregistrée dans le repository RMAN avec rc_database, une des vues du catalog RMAN.
     [oracle@vbgeneric ~]$ sqlplus usercat/usercat@ords
     SQL> select * from rc_database;
     DB_KEY DBINC_KEY DBID NAME RESETLOGS_CHANGE# RESETLOGS FINAL_CHANGE#
     -------------------------------------------------------------------
     1 2 768045447 ORCL12C 1408558 02-MAR-17

Configurer la sauvegarde de la base du catalogue RMAN

Il faut maintenant mettre en place la stratégie de sauvegarde de la base renfermant le catalogue RMAN. Je me connecte à cette base et j'affiche les paramètres de sauvegarde par défaut. A vous de voir ce qu'il faut changer.

     [oracle@vbgeneric ~]$ rman TARGET sys/oracle@ords
     connected to target database: ORCL12C:ORDS (DBID=4018883664)

     RMAN> show all;
     using target database control file instead of recovery catalog
     RMAN configuration parameters for database with db_unique_name ORCL12C are:
     CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
     CONFIGURE BACKUP OPTIMIZATION OFF; # default
     CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
     CONFIGURE CONTROLFILE AUTOBACKUP ON; # default
     CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
     CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
     CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
     CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
     CONFIGURE MAXSETSIZE TO UNLIMITED; # default
     CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
     CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
     CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
     CONFIGURE RMAN OUTPUT TO KEEP FOR 7 DAYS; # default
     CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
     CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/12.2/db_1/dbs/snapcf_orcl12c.f'; # default

Sauvegarder la base du catalogue RMAN

Eh oui, une fois les paramètres changés, il faut sauvegarder avec RMAN la base du catalogue RMAN :-) Les métadatas iront dans le control file de cette base et uniquement là, d'où l'importance qu'il soit bien multiplexé. Faites bien attention à sauvegarder la première fois l'intégralité du container et pas seulement la PDB (ords ici) qui contient le catalogue RMAN. 


============================================================================================
Tests de sauvegarde avec le catalogue RMAN
============================================================================================
Sauvegarde du ctrl file du CDB

ATTENTION : il est marqué "using target database control file instead of recovery catalog" mais c'est faux, Oracle utilise les deux comme on va le voir après. La raison doit être qu'on s'est connecté sous RMAN sans renseigner la base CATALOG et donc la synchro entre les deux bases doit se faire de façon transparente.
     [oracle@vbgeneric ~]$ rman TARGET sys/oracle@orcl12c
     connected to target database: ORCL12C (DBID=768045447)

     RMAN> backup current controlfile;

     Starting backup at 04-NOV-20
     using target database control file instead of recovery catalog
     allocated channel: ORA_DISK_1
     channel ORA_DISK_1: SID=19 device type=DISK
     channel ORA_DISK_1: starting full datafile backup set
     channel ORA_DISK_1: specifying datafile(s) in backup set
     including current control file in backup set
     channel ORA_DISK_1: starting piece 1 at 04-NOV-20
     channel ORA_DISK_1: finished piece 1 at 04-NOV-20
     piece handle=/u01/app/oracle/fast_recovery_area/orcl12c/ORCL12C/backupset/2020_11_04/o1_mf_ncnnf_TAG20201104T085319_ht5dljjy_.bkp tag=TAG20201104T085319 comment=NONE
     channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
     Finished backup at 04-NOV-20
     Starting Control File and SPFILE Autobackup at 04-NOV-20
     piece handle=/u01/app/oracle/fast_recovery_area/orcl12c/ORCL12C/autobackup/2020_11_04/o1_mf_s_1055580801_ht5dll08_.bkp comment=NONE
     Finished Control File and SPFILE Autobackup at 04-NOV-20

Les id des sauvegardes sont 1 et 2 pour le ctrl file.
     RMAN> LIST BACKUP OF CONTROLFILE;

     List of Backup Sets
     ===================
     BS Key Type LV Size Device Type Elapsed Time Completion Time
     ------- ---- -- ---------- ----------- ------------ ---------------
     1 Full 17.91M DISK 00:00:01 04-NOV-20
     BP Key: 1 Status: AVAILABLE Compressed: NO Tag: TAG20201104T085319
     Piece Name: /u01/app/oracle/fast_recovery_area/orcl12c/ORCL12C/backupset/2020_11_04/o1_mf_ncnnf_TAG20201104T085319_ht5dljjy_.bkp
     Control File Included: Ckp SCN: 2190276 Ckp time: 04-NOV-20

     BS Key Type LV Size Device Type Elapsed Time Completion Time

     ------- ---- -- ---------- ----------- ------------ ---------------
     2 Full 17.94M DISK 00:00:01 04-NOV-20
     BP Key: 2 Status: AVAILABLE Compressed: NO Tag: TAG20201104T085321
     Piece Name: /u01/app/oracle/fast_recovery_area/orcl12c/ORCL12C/autobackup/2020_11_04/o1_mf_s_1055580801_ht5dll08_.bkp
     Control File Included: Ckp SCN: 2190282 Ckp time: 04-NOV-20

Dans le catalogue RMAN, on a bien les mêmes sauvegardes mais sous des id de BS (Backup Set) différents; il y a donc dans les deux bases des copies des métadatas des sauvegardes; attention, ce ne sont pas les sauvegardes qui sont multiplexées, c'est à dire des copies physiquement différentes car le chemin des fichiers est identique; on a juste, à deux endroits différents, la même info mais il s'agit juste des métadatas.

     [oracle@vbgeneric ~]$ rman target sys/oracle@orcl12c catalog usercat/usercat@ords
     connected to target database: ORCL12C (DBID=768045447)
     connected to recovery catalog database

     RMAN> LIST BACKUP OF CONTROLFILE;

     List of Backup Sets
     ===================
     BS Key Type LV Size Device Type Elapsed Time Completion Time
     ------- ---- -- ---------- ----------- ------------ ---------------
     219 Full 17.91M DISK 00:00:01 04-NOV-20
     BP Key: 221 Status: AVAILABLE Compressed: NO Tag: TAG20201104T085319
     Piece Name: /u01/app/oracle/fast_recovery_area/orcl12c/ORCL12C/backupset/2020_11_04/o1_mf_ncnnf_TAG20201104T085319_ht5dljjy_.bkp
     Control File Included: Ckp SCN: 2190276 Ckp time: 04-NOV-20

     BS Key Type LV Size Device Type Elapsed Time Completion Time

     ------- ---- -- ---------- ----------- ------------ ---------------
     220 Full 17.94M DISK 00:00:01 04-NOV-20
     BP Key: 222 Status: AVAILABLE Compressed: NO Tag: TAG20201104T085321
     Piece Name: /u01/app/oracle/fast_recovery_area/orcl12c/ORCL12C/autobackup/2020_11_04/o1_mf_s_1055580801_ht5dll08_.bkp
     Control File Included: Ckp SCN: 2190282 Ckp time: 04-NOV-20

A noter que si on n'est pas connecté à la base target mais uniquement à la base catalogue, la même commande ne marche pas.

     [oracle@vbgeneric ~]$ rman catalog usercat/usercat@ords
     connected to recovery catalog database
     RMAN> LIST BACKUP OF CONTROLFILE;
     RMAN-00571: ===========================================================
     RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
     RMAN-00571: ===========================================================
     RMAN-03002: failure of list command at 11/04/2020 09:34:34
     RMAN-06171: not connected to target database

Je pensais qu'en interrogeant alors le référentiel du catalogue ce serait OK mais non, encore KO. C'est bizarre car cela signifie que je ne peux pas voir en une seule interrogation sur ce référentiel toutes les sauvegardes des N bases mais que de la base TARGET à laquelle je suis connecté? A tester avec des sauvegardes de N bases et, si c'est le cas, il faudra alors faire des SELECTs sur les vues RC.
     RMAN> desc RC_BACKUP_CONTROLFILE
     RMAN-00571: ===========================================================
     RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
     RMAN-00571: ===========================================================
     RMAN-03002: failure of DESCRIBE command at 11/04/2020 09:40:33
     RMAN-06171: not connected to target database

Publicité
Publicité
Commentaires
Blog d'un DBA sur le SGBD Oracle et SQL
Publicité
Archives
Blog d'un DBA sur le SGBD Oracle et SQL
  • Blog d'un administrateur de bases de données Oracle sur le SGBD Oracle et sur les langages SQL et PL/SQL. Mon objectif est de vous faire découvrir des subtilités de ce logiciel, des astuces, voir même des surprises :-)
  • Accueil du blog
  • Créer un blog avec CanalBlog
Visiteurs
Depuis la création 340 689
Publicité