[Actualit�] Copie d'une base de donn�es Oracle vers un autre serveur avec RMAN
par
, 10/10/2019 � 09h56 (8898 Affichages)
� partir de la sauvegarde � chaud d'une base Oracle, pr�sent�e r�cemment, je vous propose ici une m�thode pour transporter cette sauvegarde sur un autre serveur afin de remplacer une base existante par la sauvegarde.
Le cas typique est la copie d'une base de production vers une base de test.
Tout ce qui suit utilise Rman de Oracle Database 12, sur des serveurs Oracle Linux.
Merci � Farouk Mansouri, de Capdata, qui m'a donn� la grosse commande Rman de chargement des donn�es.
1. Sc�nario de copie
Le sc�nario ci-apr�s r�alise la copie de la sauvegarde de la base de production nomm�e "prod" du serveur "oracleprod" vers la base de test nomm�e "test" du serveur "oracletest". Pour r�aliser la m�me op�ration vers une autre base, il suffit de remplacer "test" par le nom de la base cible.
On peut s'en inspirer pour restaurer la base de production � partir d'une sauvegarde, en ayant bien � l'esprit que toutes les donn�es saisies depuis la sauvegarde seront perdues !Il y a d'autres manipulations � faire pour r�cup�rer au moins une partie des donn�es saisies depuis la derni�re sauvegarde, gr�ce aux archivelogs et redologs, que je ne pr�sente pas ici.
1.1 D�roulement du sc�nario
- Arr�ter les applications qui utilisent la base cible.
- Se connecter au serveur cible et arr�ter la base cible.
- Copier les fichiers de sauvegarde du serveur source au serveur cible.
- Remplacer la base cible par la sauvegarde de la base source.
2. Instructions d�taill�es
2.1 Arr�ter les applications qui utilisent la base cible.
Durant l'op�ration, la base de donn�es cible sera inaccessible. Si vous ne voulez pas avoir des coups de fil d'utilisateurs paniqu�s, pr�venez-les et arr�tez les applications qui utilisent la base de donn�es cible.
Ceci d�pend de votre configuration (arr�t des services Tomcat ou Webobject, par exemple), je ne m'�tends donc pas davantage.
2.2 Se connecter au serveur cible et arr�ter la base cible.
Sur le serveur de test, une fois connect� avec un user reconnu par Oracle :
Code bash : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5 set ORACLE_SID=test sqlplus / "sys/[mot de passe]" as sysdba shutdown immediate; startup nomount; quit;
2.3 Copier les fichiers de sauvegarde du serveur source au serveur cible.
Sur le serveur de test, j'ai un r�pertoire o� enregistrer les fichiers de sauvegarde transf�r�s depuis le serveur de production. La premi�re chose � faire est de supprimer les fichiers �ventuels d'une pr�c�dente copie de base :
Code bash : S�lectionner tout - Visualiser dans une fen�tre � part
1
2 cd /chemin/vers/rep/de/transfert rm -f *
Dans une autre console de commande, se connecter au serveur source et aller dans le r�pertoire des sauvegardes et afficher les fichiers :
Code bash : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3 ssh user@oracleprod.domaine cd /chemin/vers/rep/de/sauvegarde ll
Exemple d'affichage obtenu par la commande ll :
Je conserve sur le serveur de prod les deux derni�res sauvegardes. Il faut transf�rer vers le serveur de test les fichiers de la derni�re sauvegarde : ceux du 5 septembre que j'ai colori� en bleu. Il y a :total 2300244
-rw-rw---- 1 oracle oracle 218624 4 sept. 03:32 arch_bckp_4ouasr2t_1_1
-rw-rw---- 1 oracle oracle 116795904 5 sept. 03:30 arch_bckp_4quavf9s_1_1
-rw-rw---- 1 oracle oracle 208384 5 sept. 03:32 arch_bckp_4suavfej_1_1
-rw-rw---- 1 oracle oracle 10518528 4 sept. 03:32 cf_c-3503333691-20190904-00
-rw-rw---- 1 oracle oracle 10518528 5 sept. 03:32 cf_c-3503333691-20190905-00
-rw-rw---- 1 oracle oracle 1108770816 4 sept. 03:32 db_bckp_4nuasquc_1_1
-rw-rw---- 1 oracle oracle 1108402176 5 sept. 03:32 db_bckp_4ruavfac_1_1
- la sauvegarde des fichiers des archivelogs, commen�ant par "arch_bckp_"
- la sauvegarde du fichier de contr�le, commen�ant par "cf_"
- la sauvegarde des donn�es, commen�ant par "db_bckp_"
Transfert des fichiers du serveur de prod vers le serveur de test avec scp :
La commande scp va vous demander le mot de passe du user qui se connecte. Une fois la copie termin�e, vous pouvez quitter le serveur source (prod, dans notre cas). �a �vite de faire des manipulations hasardeuses dessus en se trompant de console !
Code : S�lectionner tout - Visualiser dans une fen�tre � part scp arch_bckp_4quavf9s_1_1 arch_bckp_4suavfej_1_1 cf_c-3503333691-20190905-00 db_bckp_4ruavfac_1_1 [email protected]:/chemin/vers/rep/de/transfert/
2.4 Remplacer la base cible par la sauvegarde de la base source.
Revenir sur la console du serveur de test. Je suppose ici que vous ne l'avez pas quitt�e et que ORACLE_SID est toujours bien valoris� � "test".
Comme on a utilis� Rman pour la sauvegarde, on va aussi l'utiliser pour charger celle-ci sur la base de test.
Code bash : S�lectionner tout - Visualiser dans une fen�tre � part
1
2 rman auxiliary / duplicate database to test backup location '/chemin/vers/rep/de/transfert' DB_FILE_NAME_CONVERT 'chemin/vers/rep/donnees/base/source','chemin/vers/rep/donnees/base/cible' LOGFILE GROUP 1('/chemin/vers/rep/redofiles/base/cible/redo01a.log') SIZE 16m, GROUP 2('/chemin/vers/rep/redofiles/base/cible/redo02a.log') SIZE 16m, GROUP 3('/chemin/vers/rep/redofiles/base/cible/redo03a.log') SIZE 16m, GROUP 4('/chemin/vers/rep/redofiles/base/cible/redo04a.log') SIZE 16m;
Quelques explications sur la commande ex�cut�e dans Rman...
On dupplique la source (prod) sur la cible (test). Le param�tre DB_FILE_NAME_CONVERT demande � Rman de convertir le nom de la base source en nom de la base cible. En effet, ceci est enregistr� dans le controlfile... qui vient de la prod. Mais comme on ne souhaite pas renommer la base test en prod mais lui conserver son nom de "test", il faut indiquer quoi remplacer dans le fichier de contr�le : 'chemin/vers/rep/donnees/base/source' qu'on transforme en 'chemin/vers/rep/donnees/base/cible'.
Ensuite, avec LOGFILE, on reconstruit des fichiers de redologs vides pour la base de donn�es test. Il ne faut en effet pas que la base de test red�marre avec ses anciens fichiers de redologs qui sont incoh�rents avec ce qui provient de la base de prod. Cette partie de la commande est � adapter au nombre de redofiles que vous avez et � leur taille.
Rman se d�brouille tout seul pour remplacer les donn�es actuelles de la base de test par celles de la base de prod, reconstituer le controlfile, nettoyer son catalogue de sauvegarde, si vous avez une sauvegarde de donn�es aussi sur la base de test, puis red�marrer la base de test.
Si tout s'est bien pass�, vous pouvez vous d�connecter de Rman avec quit et r�utiliser la base de test, red�marrer les applications qui l'utilisent...
Il est sans doute possible de faire un script bash global pour automatiser tout �a mais �a ne fait que quelques fois que j'utilise cette proc�dure et je ne me suis pas encore pench� sur le sujet.