Vous effectuez une sauvegarde à froid gérée par l’utilisateur en copiant des fichiers après la fermeture de la base de données. Ce type de sauvegarde est également connu sous le nom de sauvegarde hors ligne. Votre base de données Oracle 12C peut être en mode noarchivelog ou en mode archivelog lorsque vous effectuez une sauvegarde à froid.
Les DBA ont tendance à considérer une sauvegarde à froid comme synonyme de sauvegarde d’une base de données en mode noarchivelog. Ce n’est pas correct. Vous pouvez faire une sauvegarde à froid d’une base de données en mode archivelog, et c’est une stratégie de sauvegarde que de nombreux magasins utilisent. Les différences entre une sauvegarde à froid avec la base de données en mode noarchivelog et en mode archivelog sont détaillées dans les sections suivantes.
Faire une sauvegarde à froid d’une base de données en mode Noarchivelog
Une raison principale pour faire une sauvegarde à froid d’une base de données Oracle 12C en mode noarchivelog est de vous donner un moyen de restaurer une base de données à un moment dans le passé. Vous ne devez utiliser ce type de sauvegarde que si vous n’avez pas besoin de récupérer les transactions survenues après la sauvegarde. Ce type de stratégie de sauvegarde et de restauration n’est acceptable que si les exigences de votre entreprise permettent la perte de données et les temps d’arrêt. Il est rare que vous implémentiez ce type de solution de sauvegarde et de récupération pour une base de données d’entreprise de production.
Cela dit, il existe de bonnes raisons d’implémenter ce type de sauvegarde. Une utilisation courante consiste à effectuer une sauvegarde à froid d’une base de données de développement/ test /formation et à réinitialiser périodiquement la base de données à la base de référence. Cela vous permet de redémarrer un test de performance ou une session de formation avec le même instantané ponctuel de la base de données.
Conseil Envisagez d’utiliser la fonction de base de données Flashback pour rétablir votre base de données à un moment dans le passé.
L’exemple de cette section vous montre comment effectuer une sauvegarde de tous les fichiers critiques de votre base de données : tous les fichiers de contrôle, les fichiers de données, les fichiers de données temporaires et les fichiers journaux de restauration en ligne. Avec ce type de sauvegarde, vous pouvez facilement restaurer votre base de données au moment où la sauvegarde a été effectuée. Les principaux avantages de cette approche sont qu’elle est conceptuellement simple et facile à mettre en œuvre. Voici les étapes requises pour une sauvegarde à froid d’une base de données en mode noarchivelog:
- Déterminez où copier les fichiers de sauvegarde et l’espace requis.
- Identifiez les emplacements et les noms des fichiers de base de données à copier.
- Fermez la base de données avec la clause IMMÉDIATE, TRANSACTIONNELLE ou NORMALE.
- Copiez les fichiers (identifiés à l’étape 2) vers l’emplacement de sauvegarde (déterminé à l’étape 1).
- Redémarrez votre base de données Oracle 12C.
Les sections suivantes détaillent ces étapes.
Étape 1. Déterminez Où Copier les fichiers de sauvegarde et Combien d’Espace Est Nécessaire
Idéalement, l’emplacement de sauvegarde doit se trouver sur un ensemble de disques distincts de l’emplacement de vos fichiers de données en direct. Cependant, dans de nombreux magasins, vous n’avez peut-être pas le choix et on peut vous dire quels points de montage doivent être utilisés par la base de données. Pour cet exemple, l’emplacement de sauvegarde est le répertoire /u01/cbackup/O12C. Pour avoir une idée approximative de l’espace dont vous avez besoin pour stocker une copie des sauvegardes, vous pouvez exécuter cette requête:
select sum(sum_bytes)/1024/1024 m_bytesfrom(select sum(bytes) sum_bytes from v$datafileunionselect sum(bytes) sum_bytes from v$tempfileunionselect (sum(bytes) * members) sum_bytes from v$loggroup by members);
Vous pouvez vérifier la quantité d’espace disque disponible avec la commande Linux/Unix df (disk free). Assurez-vous que la quantité d’espace disque disponible sur le système d’exploitation est supérieure à la somme renvoyée par la requête précédente:
$ df -h
Étape 2. Identifiez les emplacements et les noms des fichiers de base de données à copier
Exécutez cette requête pour répertorier les noms (et les chemins) des fichiers inclus dans une sauvegarde à froid d’une base de données en mode noarchivelog:
select name from v$datafileunionselect name from v$controlfileunionselect name from v$tempfileunionselect member from v$logfile;
SAUVEGARDE DES JOURNAUX DE REPRISE EN LIGNE (OU NON)
Avez-vous besoin de sauvegarder les journaux de reprise en ligne? Non ; vous n’avez jamais besoin de sauvegarder les journaux de restauration en ligne dans le cadre de tout type de sauvegarde. Alors, pourquoi les DBA sauvegardent-ils les journaux de restauration en ligne dans le cadre d’une sauvegarde à froid ? L’une des raisons en est que cela facilite légèrement le processus de restauration du scénario en mode noarchivelog. Les journaux de reprise en ligne sont nécessaires pour ouvrir la base de données de manière normale.
Si vous sauvegardez tous les fichiers (y compris les journaux de reprise en ligne), pour que votre base de données Oracle 12C retrouve l’état dans lequel elle se trouvait au moment de la sauvegarde, vous restaurez tous les fichiers (y compris les journaux de reprise en ligne) et démarrez votre base de données.
Étape 3. Fermez la base de données
Connectez-vous à votre base de données en tant qu’utilisateur SYS (ou en tant qu’utilisateur à privilèges SYSDBA) et fermez votre base de données, en utilisant IMMÉDIAT, TRANSACTIONNEL ou NORMAL. Dans presque toutes les situations, l’utilisation IMMÉDIATE est la méthode préférée. Ce mode déconnecte les utilisateurs, annule les transactions incomplètes et ferme la base de données:
$ sqlplus / as sysdbaSQL> shutdown immediate;
Étape 4. Créer des copies de sauvegarde des fichiers
Pour chaque fichier identifié à l’étape 2, utilisez un utilitaire de système d’exploitation pour copier les fichiers dans un répertoire de sauvegarde (identifié à l’étape 1). Dans cet exemple simple, tous les fichiers de données, les fichiers de contrôle, les fichiers de base de données temporaires et les journaux de restauration en ligne se trouvent dans le même répertoire. Dans les environnements de production, vous aurez très probablement des fichiers répartis dans plusieurs répertoires différents. Cet exemple utilise la commande cp Linux/Unix pour copier les fichiers de base de données de /u01/dbfile/O12C dans le répertoire /u01/cbackup/O12C:
$ cp /u01/dbfile/O12C/*.* /u01/cbackup/O12C
Étape 5. Redémarrez votre base de données
Une fois tous les fichiers copiés, vous pouvez démarrer votre base de données:
$ sqlplus / as sysdbaSQL> startup;
Restauration d’une sauvegarde à froid en mode Noarchivelog avec des journaux de restauration en ligne
L’exemple suivant explique comment restaurer à partir d’une sauvegarde à froid d’une base de données en mode noarchivelog. Si vous avez inclus les journaux de restauration en ligne dans la sauvegarde à froid, vous pouvez les inclure lorsque vous restaurez les fichiers. Voici les étapes de cette procédure:
- Arrêtez l’instance.
- Copiez les fichiers de données, les journaux de restauration en ligne, les fichiers temporaires et les fichiers de contrôle depuis la sauvegarde vers les emplacements des fichiers de données de la base de données en direct.
- Démarrez votre base de données.
Ces étapes sont détaillées dans les sections suivantes.
Étape 1. Arrêtez l’instance
Arrêtez l’instance, si elle est en cours d’exécution. Dans ce scénario, peu importe la façon dont vous fermez la base de données Oracle 12C, car vous restaurez à un moment donné (sans récupération des transactions). Tous les fichiers dans les emplacements de répertoire de base de données en direct sont écrasés lorsque les fichiers de sauvegarde sont copiés. Si votre instance est en cours d’exécution, vous pouvez l’interrompre brusquement. En tant qu’utilisateur à privilèges SYSDBA, procédez comme suit:
$ sqlplus / as sysdbaSQL> shutdown abort;
Étape 2. Copiez les fichiers de la sauvegarde
Cette étape fait l’inverse de la sauvegarde: vous copiez des fichiers de l’emplacement de sauvegarde vers les emplacements de fichiers de base de données en direct. Dans cet exemple, tous les fichiers de sauvegarde se trouvent dans le répertoire /u01/cbackup/O12C et tous les fichiers sont copiés dans le répertoire /u01/dbfile/O12C:
$ cp /u01/cbackup/O12C/*.* /u01/dbfile/O12C
Étape 3. Démarrer la base de données
Connectez-vous à votre base de données en tant que SYS (ou un utilisateur disposant des privilèges SYSDBA) et démarrez votre base de données:
$ sqlplus / as sysdbaSQL> startup;
Une fois ces étapes terminées, vous devriez avoir une copie exacte de votre base de données telle qu’elle était lorsque vous avez effectué la sauvegarde à froid. C’est comme si vous remettiez votre base de données au moment où vous avez effectué la sauvegarde.
Restauration d’une sauvegarde à froid en mode Noarchivelog Sans Journaux de restauration en ligne
Comme mentionné précédemment, vous n’avez jamais besoin des journaux de restauration en ligne lors de la restauration à partir d’une sauvegarde à froid. Si vous avez effectué une sauvegarde à froid de votre base de données en mode noarchivelog et que vous n’avez pas inclus les journaux de restauration en ligne dans la sauvegarde, les étapes de restauration sont presque identiques aux étapes de la section précédente. La principale différence est que la dernière étape vous oblige à ouvrir votre base de données, en utilisant la clause OPEN RESETLOGS. Voici les étapes:
- Arrêtez l’instance.
- Copiez les fichiers de contrôle et les fichiers de données à partir de la sauvegarde.
- Démarrez la base de données en mode montage.
- Ouvrez la base de données avec la clause OPEN RESETLOGS.
Étape 1. Arrêtez l’instance
Arrêtez l’instance, si elle est en cours d’exécution. Dans ce scénario, peu importe la façon dont vous fermez la base de données Oracle 12C, car vous restaurez à un moment donné. Tous les fichiers dans les emplacements de répertoire de base de données en direct sont écrasés lorsque les sauvegardes sont copiées. Si votre instance est en cours d’exécution, vous pouvez l’interrompre brusquement. En tant qu’utilisateur à privilèges SYSDBA, procédez comme suit:
$ sqlplus / as sysdbaSQL> shutdown abort;
Étape 2. Copiez les fichiers de la sauvegarde
Copiez les fichiers de contrôle et les fichiers de données de l’emplacement de sauvegarde vers les emplacements des fichiers de données en direct:
$ cp <backup directory>/*.* <live database file directory>
Étape 3. Démarrer la base de données en mode de montage
Connectez-vous à votre base de données en tant que SYS ou utilisateur avec les privilèges SYSDBA, et démarrez la base de données en mode de montage:
$ sqlplus / as sysdbaSQL> startup mount
Étape 4. Ouvrez la base de données avec la clause OPEN RESETLOGS
Ouvrez votre base de données pour l’utiliser avec la clause OPEN RESETLOGS:
SQL> alter database open resetlogs;
Si vous voyez le message de modification de la base de données, la commande a réussi. Cependant, vous pouvez voir cette erreur:
ORA-01139: RESETLOGS option only valid after an incomplete database recovery
Dans ce cas, émettez la commande suivante:
SQL> recover database until cancel;
Vous devriez voir ce message:
Media recovery complete.
Maintenant, essayez d’ouvrir votre base de données avec la clause OPEN RESETLOGS:
SQL> alter database open resetlogs;
Cette instruction demande à Oracle de recréer les journaux de restauration en ligne. Oracle utilise les informations contenues dans le fichier de contrôle pour l’emplacement, le nom et la taille des journaux de restauration. S’il y a d’anciens fichiers journaux de restauration en ligne dans ces emplacements, ils sont écrasés.
Si vous surveillez votre alerte.connectez-vous tout au long de ce processus, vous pouvez voir ORA-00312 et ORA-00313. Cela signifie qu’Oracle ne peut pas trouver les fichiers journaux de restauration en ligne ; ce n’est pas grave, car ces fichiers ne sont physiquement disponibles que lorsqu’ils sont recréés par la commande OPEN RESETLOGS.
Script d’une sauvegarde à froid et restauration
Il est instructif de voir comment écrire une sauvegarde à froid. L’idée de base est d’interroger dynamiquement le dictionnaire de données pour déterminer les emplacements et les noms des fichiers à sauvegarder. Ceci est préférable au codage en dur des emplacements des répertoires et des noms de fichiers dans un script. La génération dynamique d’un script est moins sujette aux erreurs et aux surprises (par exemple, l’ajout de nouveaux fichiers de données à une base de données mais pas à un ancien script de sauvegarde codé en dur).
Remarque Les scripts de cette section ne sont pas censés être des scripts de sauvegarde et de récupération de puissance de production. Ils illustrent plutôt les concepts de base de la création de scripts de sauvegarde à froid et de restauration ultérieure.
Le premier script de cette section effectue une sauvegarde à froid d’une base de données. Avant d’utiliser le script de sauvegarde à froid, vous devez modifier ces variables dans le script pour qu’elles correspondent à votre environnement de base de données:
- ORACLE_SID
- ORACLE_HOME
- cbdir
La variable cbdir spécifie le nom de l’emplacement du répertoire de sauvegarde. Le script crée un fichier nommé coldback.sql, qui est exécuté à partir de SQL*Plus pour lancer une sauvegarde à froid de la base de données:
#!/bin/bashORACLE_SID=O12CORACLE_HOME=/u01/app/oracle/product/12.1.0.1/db_1PATH=$PATH:$ORACLE_HOME/bin#sqlplus -s <<EOF/ as sysdbaset head off pages0 lines 132 verify off feed off trimsp ondefine cbdir=/u01/cbackup/O12Cspo coldback.sqlselect 'shutdown immediate;' from dual;select '!cp ' || name || ' ' || '&&cbdir' from v$datafile;select '!cp ' || name || ' ' || '&&cbdir' from v$tempfile;select '!cp ' || member || ' ' || '&&cbdir' from v$logfile;select '!cp ' || name || ' ' || '&&cbdir' from v$controlfile;select 'startup;' from dual;spo off;@@coldback.sqlEOFexit 0
Ce fichier génère des commandes qui doivent être exécutées à partir d’un script SQL* Plus pour effectuer une sauvegarde à froid d’une base de données Oracle. Vous placez un point d’exclamation (!) devant la commande cp Unix pour demander à SQL *Plus d’héberger vers le système d’exploitation pour exécuter la commande cp. Vous placez également une barre oblique arrière (\) devant chaque signe dollar ($) lors du référencement des vues du dictionnaire de données v$ ; ceci est requis dans un script shell Linux/Unix. Le \ échappe le $ et indique au script shell de ne pas traiter le character comme un caractère spécial (le variable signifie normalement une variable shell).
Après avoir exécuté ce script, voici un exemple des commandes de copie écrites dans le coldback.script sql:
shutdown immediate;!cp /u01/dbfile/O12C/system01.dbf /u01/cbackup/O12C!cp /u01/dbfile/O12C/sysaux01.dbf /u01/cbackup/O12C!cp /u01/dbfile/O12C/undotbs01.dbf /u01/cbackup/O12C!cp /u01/dbfile/O12C/users01.dbf /u01/cbackup/O12C!cp /u01/dbfile/O12C/tools01.dbf /u01/cbackup/O12C!cp /u01/dbfile/O12C/temp01.dbf /u01/cbackup/O12C!cp /u01/oraredo/O12C/redo02a.rdo /u01/cbackup/O12C!cp /u02/oraredo/O12C/redo02b.rdo /u01/cbackup/O12C!cp /u01/oraredo/O12C/redo01a.rdo /u01/cbackup/O12C!cp /u02/oraredo/O12C/redo01b.rdo /u01/cbackup/O12C!cp /u01/oraredo/O12C/redo03a.rdo /u01/cbackup/O12C!cp /u02/oraredo/O12C/redo03b.rdo /u01/cbackup/O12C!cp /u01/dbfile/O12C/control01.ctl /u01/cbackup/O12C!cp /u01/dbfile/O12C/control02.ctl /u01/cbackup/O12Cstartup;
Pendant que vous effectuez une sauvegarde à froid, vous devez également générer un script qui fournit les commandes pour copier les fichiers de données, les fichiers temporaires, les fichiers journaux et les fichiers de contrôle à leur emplacement d’origine. Vous pouvez utiliser ce script pour restaurer à partir de la sauvegarde à froid. Le script suivant dans cette section crée dynamiquement un coldrest.script sql qui copie les fichiers de l’emplacement de sauvegarde vers les emplacements de fichiers de données d’origine. Vous devez modifier ce script de la même manière que vous avez modifié le script de sauvegarde à froid (c’est-à-dire modifier les variables ORACLE_SID, ORACLE_HOME et cbdir pour qu’elles correspondent à votre environnement):
#!/bin/bashORACLE_SID=O12CORACLE_HOME=/u01/app/oracle/product/12.1.0.1/db_1PATH=$PATH:$ORACLE_HOME/bin#sqlplus -s <<EOF/ as sysdbaset head off pages0 lines 132 verify off feed off trimsp ondefine cbdir=/u01/cbackup/O12Cdefine dbname=$ORACLE_SIDspo coldrest.sqlselect 'shutdown abort;' from dual;select '!cp ' || '&&cbdir/' || substr(name, instr(name,'/',-1,1)+1) || ' ' || name from v$datafile;select '!cp ' || '&&cbdir/' || substr(name, instr(name,'/',-1,1)+1) || ' ' || name from v$tempfile;select '!cp ' || '&&cbdir/' || substr(member, instr(member,'/',-1,1)+1) || ' ' || member from v$logfile;select '!cp ' || '&&cbdir/' || substr(name, instr(name,'/',-1,1)+1) || ' ' || name from v$controlfile;select 'startup;' from dual;spo off;EOFexit 0
Ce script crée un script, nommé coldrest.sql, qui génère les commandes de copie pour restaurer vos fichiers de données, fichiers temporaires, fichiers journaux et fichiers de contrôle à leur emplacement d’origine. Après avoir exécuté ce script shell, voici un extrait du code dans le coldrest.fichier sql:
shutdown abort;!cp /u01/cbackup/O12C/system01.dbf /u01/dbfile/O12C/system01.dbf!cp /u01/cbackup/O12C/sysaux01.dbf /u01/dbfile/O12C/sysaux01.dbf!cp /u01/cbackup/O12C/undotbs01.dbf /u01/dbfile/O12C/undotbs01.dbf!cp /u01/cbackup/O12C/users01.dbf /u01/dbfile/O12C/users01.dbf!cp /u01/cbackup/O12C/tools01.dbf /u01/dbfile/O12C/tools01.dbf...!cp /u01/cbackup/O12C/redo03b.rdo /u02/oraredo/O12C/redo03b.rdo!cp /u01/cbackup/O12C/control01.ctl /u01/dbfile/O12C/control01.ctl!cp /u01/cbackup/O12C/control02.ctl /u01/dbfile/O12C/control02.ctlstartup;
Si vous devez restaurer à partir d’une sauvegarde à froid à l’aide de ce script, connectez-vous à SQL*Plus en tant que SYS et exécutez le script:
$ sqlplus / as sysdbaSQL> @coldrest.sql