############################################################################# # Backup_RMAN_script_HOT.txt - 07.07.2005 - Gregory Steulet Sebastien Koller # Oracle 10G # Doc. officielle d'Oracle $ORACLE_HOME/rdbms/demo/case1.rcv # # IMPORTANT: Pour chaque base, prendre le DBID et l'incorporer # dans le fichier 'rman_restore_recovery' # >select dbid, name from v$database; # Il faut également modifier le paramètre # d'initialisation CONTROL_FILE_RECORD_KEEP_TIME. # Ce paramètre spécifie combien de temps on veut # garder les backups des controlfiles: # >alter system set CONTROL_FILE_RECORD_KEEP_TIME=21 scope=both; # -------------------------------------------------------------- # Infos: le signe '?' représente l'ORACLE_HOME et le '@' # représente l'ORACLE_SID ############################################################################## 1) La première chose à faire est de mettre la base en mode ARCHIVELOG SQL> shutdown immediate; SQL> startup mount; SQL> alter database archivelog; SQL> alter database open; SQL> archive log list; mode Database log mode Archive Archivage automatique Activé Destination de l'archive /u01/app/oracle/product/10104EE/dbs/arch Séquence de journal en ligne la plus ancienne 47 Séquence de journal suivante à archiver 49 Séquence de journal courante 49 2)Liste des fichiers (à configurer pour chaque base): Nom fichier Exécution ----------- --------- - rman_conf (1x) - rman_bck_onceday_hot (1x par semaine) - rman_bck_everyday_hot (6x par semaine) - rman_valid_restore (7x par semaine) - rman_maintenance (7x par semaine) - rman_restore_recovery (seulement si crash) Pour exécuter l'un des fichiers ci-dessus (SAUF rman_restore_recovery !), procéder avec la commande (il faut setter les variables avant!): >rman target / cmdfile nom_script ou mieux... utiliser le script 'rman_connect.sh' (variables inclusent): >./rman_connect SID nom_script !!Si il y a un crash, voir Restore_checklist_RMAN.txt!! -------------------------------------------------------------------- RMAN>SHOW ALL -> permet de voir la configuration courrante de RMAN -------------------------------------------------------------------- ======================== Description des fichiers ======================== rman_conf ========= C'est un fichier de configuration. Permet entre autre: - de configurer le nombre de backup pour chaque datafile. - le nombre de processus serveur qui s'occupe des opérations de backup/restore en parallèle. - le répertoire de destination du backup. Une fois le script exécuté, les paramètres sont stockés de manière permanente pour tous les backup/restore/recovery/maintenance. #Indique que les backups seront crit sur disque. CONFIGURE DEFAULT DEVICE TYPE TO DISK; #Indique qu'il faut garder au moins 5 backups de chaque datafile #Si on dsire garder certain backups plus longtemps que #"retention policy" (voir plus bas), il faut utiliser l'option KEEP avec #la commande BACKUP lors de la cration des backups. #CONFIGURE RETENTION POLICY TO REDUNDANCY 1; #Configure RMAN pour utiliser 2 "disk channel" pour les oprations de backup #restore, recovery et maintenance. CONFIGURE DEVICE TYPE DISK PARALLELISM 2; #Configure RMAN pour crire les backups sur disque dans le rpertoire /backup. #%t est remplac par l'heure sur 4 octect, %s par le numro de backup #et %p par le numero de type de backup CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/safe/oracle/@/backup/ora_df%T_%s'; #Indique RMAN de backuper le control file et le spfile aprs chaque backup. CONFIGURE CONTROLFILE AUTOBACKUP ON; #Configure RMAN pour qu'il crive le backup du controlfile dans un rpertoire. CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/safe/oracle/@/backup/ora_cf%F'; #Permet d'exclure certains tablescpaces du backup #CONFIGURE EXCLUDE FOR TABLESPACE TBL_exclude 3) Script pour le backup de niveau 0 (full) à chaud: rman_bck_onceweek_hot ==================== C'est un fichier qui est exécuté une fois par semaine (le même jour). Comme la base de données est en mode ARCHIVELOG, on peut faire un backup à chaud. Dans notre cas, nous désirons un full backup chaque semaine, avec un backup incrémentale chaque jour. Le cycle démarre par exemple le mercredi (à mettre dans le crontab). Le paramètre REDUNDANCY (voir rman_conf) indique à RMAN de faire 5 backups full (non pas incrémentale). Ceci permet de revenir en arrière de 5 semaines. backup incremental level 0 cumulative device type disk tag '%TAG' database; backup device type disk tag '%TAG' archivelog all delete all input; allocate channel for maintenance type disk; delete noprompt obsolete device type disk; release channel; #la variable TAG est une balise facultative ===================== rman_bck_everyday_hot ===================== Ce script peut être exécuté le reste de la semaine afin d'avoir les backups incrémentaux. C'est la même commande qu'auparavant, sauf qu'il faut spécifier LEVEL 1 CUMULATIVE. Ceci indique que seulement les blocks qui ont été modifiés à partir du dernier backup (level 0) seront backupés. Si l'option CUMULATIVE était pas spécifiée, alors seulement les blocks modifiés à partir du dernier backup (level 1) seraient backupés. L'avantage d'un backup "CUMULATIVE", c'est qu'il faut seulement UN backup incrémentale durant le recovery. backup incremental level 1 cumulative device type disk tag '%TAG' database; backup device type disk tag '%TAG' archivelog all delete all input; #la variable TAG est une balise facultative rman_valid_restore ================== Ce script peut être exécuté n'importe quand afin de contrôler si RMAN est capable de faire un restore de la base de données/tablespace en utilisant un backup existant. RESTORE DATABASE VALIDATE; #RESTORE TABLESPACE read_only_tablespace_name VALIDATE; RMAN> RESTORE DATABASE VALIDATE; Dmarrage de restore dans 07.07.05 utilisation du fichier de contrle de la base de donnes cible au lieu du catalogue de rcupration canal affect : ORA_DISK_1 canal ORA_DISK_1 : sid=149 typedev=DISK canal affect : ORA_DISK_2 canal ORA_DISK_2 : sid=135 typedev=DISK canal ORA_DISK_1 : dmarrage de la validation de l'ensemble de sauvegarde des fichiers de donnes canal ORA_DISK_2 : dmarrage de la validation de l'ensemble de sauvegarde des fichiers de donnes canal ORA_DISK_1 : restauration de l'lment de sauvegarde 1 lment descripteur=/safe/oracle/dev/backup/ora_df20050706_43 balise=%TAG canal ORA_DISK_1 : validation termine canal ORA_DISK_2 : restauration de l'lment de sauvegarde 1 lment descripteur=/safe/oracle/dev/backup/ora_df20050706_44 balise=%TAG canal ORA_DISK_2 : validation termine Fin de restore dans 07.07.05 rman_maintenance ================ C'est un script de maintenance. Par exemple: # Vérifier que tous les backups sur les médias sont bons. CROSSCHECK BACKUP OF DATABASE; # Affiche une liste des fichiers qui ont besoin d'être backupés par rapport # au paramètre RETENTION POLICY TO REDUNDANCY 5. Ce qui signifie que les # fichiers qui n'ont pas au moins 5 backups seront affichés. REPORT NEED BACKUP; # Supprime les backups qui ne sont pas nécessaires. Cette commande est basée # sur le paramètre RETENTION POLICY TO REDUNDANCY 5, c'est-à-dire que les # backups vieux de plus de 5 semaines seront supprimés. DELETE OBSOLETE; # Pour supprimer un backup spécifique, faire un #LIST BACKUP; #DELETE BACKUPPIECE numero_BP; # Pour avoir la liste complète des backups existant LIST BACKUP SUMMARY; rman_restore_recovery ===================== C'est un script permettant de faire un complete recovery. Néanmoins, avec l'option SET UNTIL, il est possible de faire un recovery jusqu'à un certain point dans le temps grâce aux backups incrémentaux. Comme la base de données n'est pas en mode ARCHIVELOG, on peut seulement faire un recover à partir d'un backup full ou incrémentale. Pour cela il faut impérativement tous les fichiers de configurations: spfile, tnsnames.ora, et listener.ora à leurs places respectives. Ensuite on peut démarrer la base de données en NOMOUNT et se connecter avec RMAN sur la cible (target). Lors de backup en mode NOCATALOG, il faut impérativement sauvegarder le DBID de la base de données. Pour cela, on peut se connecter avec RMAN comme ceci: >connect target / RMAN>connected to target database: INVENTORY (DBID=1670954628) ou: >sqlplus "/ as sysdba" SQL>select dbid, name from v$database; Si on utilise pas de recovery catalog, il faut démarrer RMAN sans l'option TARGET et 'seter' le DBID avant de restorer le controlfile de l'autobackup. SET DBID ; CONNECT TARGET /; STARTUP NOMOUNT; RUN { SET CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/safe/oracle/@/backup/ora_cf%F'; RESTORE CONTROLFILE FROM '/RAID0/orasauve/@/nom_backup_controlfile'; ALTER DATABASE MOUNT; # SET UNTIL TIME 'SYSDATE-3'; RESTORE DATABASE CHECK READONLY; RECOVER DATABASE NOREDO; ALTER DATABASE OPEN RESETLOGS; } Si une erreur ORA-01152 se produit il faut faire ça: SQL> recover database until cancel using backup controlfile; SQL> Alter database open resetlogs; ---------------------------rman_connect.sh--------------------------- #Fichier :/safe/RMAN/rman_connect.sh #Date :16.09.03 #Description :Execute une commande RMAN avec 2 paramtres # $1=ORACLE_SID et $2=script #Auteur :E.Meylan, S.Koller, G.Steulet #Priodicit : chaque appel de script #Dclaration des variables OS export MAILX="/usr/bin/mailx" export MAIL_LIST="gregory.steulet@he-arc.ch" date_debut=`date +'%H:%M:%S %d-%h-%Y'` date=`date +'%H-%M-%S_%d-%m'` #Dclaration des variables d'environnement Oracle ORACLE_SID=$1; export ORACLE_SID ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE ORACLE_HOME=$ORACLE_BASE/product/10104EE; export ORACLE_HOME ORA_NLS10=$ORACLE_HOME/nls/data; export ORA_NLS10 PATH=$ORACLE_HOME/bin:/usr/bin:/bin:/usr/local/bin:$PATH; export PATH TNS_ADMIN=$ORACLE_HOME/network/admin; export TNS_ADMIN NLS_LANG=French_Switzerland.WE8ISO8859P15; export NLS_LANG NLS_DATE_FORMAT='DD-MM-YYYY:HH24:MI:SS'; export NLS_DATE_FORMAT echo "*********************************" echo "ORACLE_HOME = "$ORACLE_HOME echo "ORACLE_SID = "$ORACLE_SID echo "Script = "$2 echo "*********************************" rman nocatalog log=/tmp/$date$1.log target / cmdfile $2 if [ $? -ne 0 ]; then date_fin=`date +'%H:%M:%S %d-%h-%Y'` $MAILX -s "!!! SCRIPT RMAN sur l'instance $ORACLE_SID" \ $MAIL_LIST <