root/traduc/trunk/postgresql/backup.xml

Revision 1150, 99.9 kB (checked in by gleu, 2 months ago)

Mise à jour en version 8.3.4.

  • Property svn:keywords set to Date Author Revision
Line 
1 <?xml version="1.0" encoding="ISO-8859-15"?>
2 <!-- Dernière modification
3      le       $Date$
4      par      $Author$
5      révision $Revision$ -->
6
7 <chapter id="backup">
8  <title>Sauvegardes et restaurations</title>
9
10  <indexterm zone="backup"><primary>backup</primary></indexterm>
11
12  <para>
13   Comme tout ce qui contient des données importantes, les bases de données
14   <productname>PostgreSQL</productname> doivent être sauvegardées régulièrement.
15   Bien que la procédure soit assez simple, il est important de comprendre les
16   techniques et hypothèses sous-jacentes.
17  </para>
18
19  <para>
20   Il y a trois approches fondamentalement différentes pour sauvegarder les
21   données de <productname>PostgreSQL</productname>&nbsp;:
22   <itemizedlist>
23    <listitem><para><acronym>la sauvegarde SQL&nbsp;;</acronym></para></listitem>
24    <listitem><para>la sauvegarde au niveau du système de
25     fichiers&nbsp;;</para></listitem>
26    <listitem><para>l'archivage continu.</para></listitem>
27   </itemizedlist>
28   Chacune a ses avantages et ses inconvénients.
29   Elles sont toutes analysées, chacune leur tour.
30  </para>
31
32  <sect1 id="backup-dump">
33   <title>Sauvegarde <acronym>SQL</acronym></title>
34
35   <para>
36    Le principe est de produire un fichier texte de commandes SQL (appelé
37    <quote>fichier dump</quote>), qui, si on le renvoie au serveur, recrée une
38    base de données identique à celle sauvegardée.
39    <productname>PostgreSQL</productname> propose pour cela le programme utilitaire
40    <xref linkend="app-pgdump"/>. L'usage basique est&nbsp;:
41 <synopsis>pg_dump <replaceable class="parameter">base_de_donnees</replaceable> &gt; <replaceable class="parameter">fichier_de_sortie</replaceable></synopsis>
42    <application>pg_dump</application> écrit son résultat sur la
43    sortie standard. Son utilité est expliqué plus loin.
44   </para>
45
46   <para>
47    <application>pg_dump</application> est un programme client
48    <productname>PostgreSQL</productname>
49    classique (mais plutôt intelligent). Cela signifie que la
50    sauvegarde peut être effectuée depuis n'importe quel ordinateur ayant accès à la base.
51    Mais <application>pg_dump</application> n'a pas de droits spéciaux.
52    Il doit, en particulier, avoir accès en lecture à toutes les tables
53    à sauvegarder, si bien qu'il doit être lancé pratiquement
54    toujours en tant que superutilisateur de la base.
55   </para>
56
57   <para>
58    Pour préciser le serveur de bases de données que
59    <application>pg_dump</application> doit
60    contacter, on utilise les options de ligne de commande
61    <option>-h <replaceable>serveur</replaceable></option> et
62    <option>-p <replaceable>port</replaceable></option>.
63    Le serveur par défaut est le serveur local ou celui indiqué par la
64    variable d'environnement <envar>PGHOST</envar>.
65    De la même façon, le port par défaut est indiqué par la variable d'environnement
66    <envar>PGPORT</envar> ou, en son absence, par la valeur par défaut précisée
67    à la compilation. Le serveur a normalement reçu les mêmes valeurs par
68    défaut à la compilation.
69   </para>
70
71   <para>
72    Comme tout programme client <productname>PostgreSQL</productname>,
73    <application>pg_dump</application>
74    se connecte par défaut avec l'utilisateur de base de données de même nom que
75    l'utilisateur système courant. L'utilisation de l'option
76    <option>-U</option> ou de la variable d'environnement
77    <envar>PGUSER</envar> permettent de
78    modifier le comportement par défaut. Les connexions de
79    <application>pg_dump</application> sont soumises aux mécanismes normaux
80    d'authentification des programmes clients (décrits dans le
81    <xref linkend="client-authentication"/>).
82   </para>
83
84   <para>
85    Les sauvegardes créées par <application>pg_dump</application> sont
86    cohérentes, ce qui signifie que la sauvegarde représente une image de la
87    base de données au moment où commence l'exécution de
88    <application>pg_dump</application>.
89    <application>pg_dump</application> ne bloque pas les autres opérations sur la base
90    lorsqu'il fonctionne (sauf celles qui nécessitent un verrou exclusif, comme
91    la plupart des formes d'<command>ALTER TABLE</command>.)
92   </para>
93
94   <important>
95    <para>
96     Si la base de données utilise les OID (par exemple en tant que clés
97     étrangères), il est impératif d'indiquer à
98     <application>pg_dump</application> de sauvegarder
99     aussi les OID. Pour cela, on utilise l'option <option>-o</option> sur la ligne
100     de commande.
101    </para>
102   </important>
103
104   <sect2 id="backup-dump-restore">
105    <title>Restaurer la sauvegarde</title>
106
107    <para>
108     Les fichiers texte créés par <application>pg_dump</application> peuvent être
109     lus par le programme <application>psql</application>. La syntaxe générale
110     d'une commande de restauration est
111 <synopsis>psql <replaceable class="parameter">base_de_donnees</replaceable> &lt; <replaceable class="parameter">fichier_d_entree</replaceable></synopsis>
112     où <replaceable class="parameter">fichier_d_entree</replaceable> est
113     celui précisé comme <replaceable class="parameter">fichier_de_sortie</replaceable>
114     à la commande <application>pg_dump</application>. La base de données
115     <replaceable class="parameter">base_de_donnees</replaceable> n'est pas créée par cette
116     commande. Elle doit être créée à partir de <literal>template0</literal>
117     avant d'exécuter <application>psql</application> (par exemple avec <literal>createdb -T
118     template0 <replaceable class="parameter">base_de_donnees</replaceable></literal>).
119     <application>psql</application> propose des options similaires à celles de
120     <application>pg_dump</application> pour indiquer le serveur de bases de
121     données sur lequel se connecter et le nom d'utilisateur à utiliser. La
122     page de référence de <xref linkend="app-psql"/> donne plus d'informations.
123     </para>
124
125    <para>
126     Tous les utilisateurs possédant des
127     objets ou ayant certains droits sur les objets de la base sauvegardée
128     doivent exister préalablement à la restauration de la sauvegarde. S'ils
129     n'existent pas, la
130     restauration échoue pour la création des objets dont ils sont
131     propriétaires ou sur lesquels ils ont des droits (quelque fois, cela
132     est souhaitable mais ce n'est habituellement pas le cas).
133    </para>
134
135    <para>
136     Par défaut, le script <application>psql</application> continue de
137     s'exécuter après la détection d'une erreur SQL. La commande suivante
138     peut être placée au début du script pour modifier ce comportement.
139     <application>psql</application> quitte alors avec un
140     code d'erreur 3 si une erreur SQL survient&nbsp;:
141 <programlisting>\set ON_ERROR_STOP
142 </programlisting>
143     Dans tous les cas, une sauvegarde partiellement restaurée est obtenue.
144     Si cela n'est pas souhaitable, il est possible d'indiquer que la sauvegarde
145     complète doit être restaurée au cours d'une transaction unique. De ce
146     fait, soit la restauration est validée dans son ensemble, soit elle est
147     entièrement annulée. Ce mode est choisi
148     en passant l'option <option>-1</option> ou <option>--single-transaction</option>
149     en ligne de commande à <application>psql</application>. Dans ce mode,
150     la plus petite erreur peut annuler une restauration en cours depuis
151     plusieurs heures. Néanmoins, c'est probablement
152     préférable au nettoyage manuel d'une base rendue complexe par une
153     sauvegarde partiellement restaurée.
154    </para>
155
156    <para>
157     La capacité de <application>pg_dump</application> et
158     <application>psql</application> à écrire
159     et à lire dans des tubes permet de sauvegarder une base de données
160     directement d'un serveur sur un autre. Par exemple&nbsp;:
161 <programlisting>pg_dump -h <replaceable>serveur1</replaceable> <replaceable>base_de_donnees</replaceable> | psql -h <replaceable>serveur2</replaceable> <replaceable>base_de_donnees</replaceable></programlisting>
162    </para>
163
164    <important>
165     <para>
166      Les fichiers de sauvegarde produits par <application>pg_dump</application> sont
167      relatifs à <literal>template0</literal>. Cela signifie que chaque langage,
168      procédure, etc. ajouté à <literal>template1</literal> est aussi sauvegardé
169      par <application>pg_dump</application>. En conséquence, si une base
170      <literal>template1</literal> modifiée est utilisée lors de la
171      restauration, il faut créer la base vide à partir de
172      <literal>template0</literal>, comme dans l'exemple précédent.
173     </para>
174    </important>
175
176    <para>
177     Après la restauration d'une sauvegarde, il est conseillé d'exécuter
178     <xref linkend="sql-analyze" endterm="sql-analyze-title"/> sur chaque base de
179     données pour que l'optimiseur de requêtes dispose de statistiques utiles.
180     Un moyen simple de le faire est d'exécuter <command>vacuumdb -a -z</command>&nbsp;;
181     c'est équivalent à exécuter manuellement <command>VACUUM ANALYZE</command> sur chaque
182     base.
183     Pour plus de conseils sur le chargement efficace de grosses quantités de
184     données dans <productname>PostgreSQL</productname>, on peut se référer à la
185     <xref linkend="populate"/>.
186    </para>
187    
188   </sect2>
189
190   <sect2 id="backup-dump-all">
191    <title>Utilisation de <application>pg_dumpall</application></title>
192
193    <para>
194     <application>pg_dump</application> ne sauvegarde qu'une seule base à la
195     fois, et ne sauvegarde pas les informations relatives aux rôles et
196     <foreignphrase>tablespaces</foreignphrase> (parce que ceux-ci portent
197     sur l'ensemble des bases du cluster, et non sur une base particulière).
198     Pour permettre une sauvegarde aisée de tout le contenu d'un cluster, le
199     programme <xref linkend="app-pg-dumpall"/> est fourni.
200     <application>pg_dumpall</application> sauvegarde toutes les bases de données d'un
201     cluster (ensemble des bases d'une instance) <productname>PostgreSQL</productname> et
202     préserve les données communes au cluster, telles que les rôles et tablespaces.
203     L'utilisation basique de cette commande est&nbsp;:
204 <synopsis>pg_dumpall &gt; <replaceable>fichier_de_sortie</replaceable></synopsis>
205     Le fichier de sauvegarde résultant peut être restauré avec
206     <application>psql</application>&nbsp;:
207 <synopsis>psql -f <replaceable class="parameter">fichier_d_entree</replaceable> postgres</synopsis>
208     (N'importe quelle base de données peut être utilisée pour la connexion
209     mais si le rechargement est exécuté sur un cluster vide, il est
210     préférable d'utiliser <literal>postgres</literal>.)
211     Il faut obligatoirement avoir le profil superutilisateur pour restaurer
212     une sauvegarde faite avec <application>pg_dumpall</application>, afin de
213     pouvoir restaurer les informations sur les rôles et les tablespaces.
214     Si les <foreignphrase>tablespaces</foreignphrase> sont utilisés, il faut
215     s'assurer que leurs chemins sauvegardés sont appropriés à la nouvelle
216     installation.
217    </para>
218
219    <para>
220     <application>pg_dumpall</application> fonctionne en émettant des
221     commandes pour re-créer des rôles, des tablespaces et des bases vides, puis
222     en invoquant <application>pg_dump</application> pour chaque base de
223     données. Cela signifie que, bien que chaque base de données est
224     cohérente en interne, les images des différentes bases de données peuvent
225     ne pas être tout à fait synchronisées.
226    </para>
227   </sect2>
228
229   <sect2 id="backup-dump-large">
230    <title>Gérer les grosses bases de données</title>
231
232    <para>
233     Comme <productname>PostgreSQL</productname> autorise des tables plus
234     volumineuses que la taille maximale d'un fichier sur le système de fichiers,
235     sauvegarder une telle table en fichier peut poser des problèmes.
236     Puisque <application>pg_dump</application> peut écrire sur la sortie
237     standard, les outils standard d'Unix peuvent être utilisés pour contourner
238     ce problème éventuel.
239     Il existe plusieurs façon de procéder&nbsp;:
240    </para>
241
242    <formalpara>
243     <title>Compresser le fichier de sauvegarde</title>
244     <para>
245      Tout programme de compression habituel est utilisable. Par exemple
246      <application>gzip</application>&nbsp;:
247
248 <programlisting>pg_dump <replaceable class="parameter">base_de_donnees</replaceable> | gzip &gt; <replaceable class="parameter">nom_fichier</replaceable>.gz</programlisting>
249
250      Pour restaurer&nbsp;:
251
252 <programlisting>gunzip -c <replaceable class="parameter">nom_fichier</replaceable>.gz | psql <replaceable class="parameter">base_de_donnees</replaceable></programlisting>
253
254      ou
255
256 <programlisting>cat <replaceable class="parameter">nom_fichier</replaceable>.gz | gunzip | psql <replaceable class="parameter">base_de_donnees</replaceable></programlisting>
257     </para>
258    </formalpara>
259
260    <formalpara>
261     <title>Couper le fichier avec <command>split</command></title>
262     <para>
263      La commande <command>split</command> permet de découper le fichier en
264      morceaux de taille acceptable par le système de fichiers sous-jacent.
265      Par exemple, pour faire des morceaux de 1&nbsp;Mo&nbsp;:
266  
267 <programlisting>pg_dump <replaceable class="parameter">base_de_donnees</replaceable> | split -b 1m - <replaceable class="parameter">nom_fichier</replaceable></programlisting>
268
269      Pour restaurer&nbsp;:
270
271 <programlisting>cat <replaceable class="parameter">nom_fichier</replaceable>* | psql <replaceable class="parameter">base_de_donnees</replaceable></programlisting>
272     </para>
273    </formalpara>
274
275    <formalpara>
276     <title>Utilisation du format de sauvegarde personnalisé de
277      <application>pg_dump</application></title>
278     <para>
279      Si <productname>PostgreSQL</productname> est installé sur un système où la
280      bibliothèque de compression <application>zlib</application> est
281      disponible, le format de sauvegarde personnalisé peut être utilisé pour
282      compresser les données à la volée. Pour les bases de données
283      volumineuses,
284      cela produit un fichier de sauvegarde d'une taille comparable à celle
285      du fichier produit par
286      <command>gzip</command>, avec l'avantage supplémentaire de permettre de
287      restaurer des tables sélectivement. La commande qui suit sauvegarde une
288      base de données en utilisant ce format de sauvegarde&nbsp;:
289  
290 <programlisting>pg_dump -Fc <replaceable class="parameter">base_de_donnees</replaceable> &gt; <replaceable class="parameter">nom_fichier</replaceable></programlisting>
291
292      Le format de sauvegarde personnalisé ne produit pas un script
293      utilisable par
294      <application>psql</application>. Ce script doit être restauré avec
295      <application>pg_restore</application>, par exemple&nbsp;:
296
297 <programlisting>
298 pg_restore -d <replaceable class="parameter">nom_base</replaceable> <replaceable class="parameter">nom_fichier</replaceable>
299 </programlisting>
300
301      Voir les pages de référence de
302      <xref linkend="app-pgdump"/> et <xref linkend="app-pgrestore"/> pour plus de
303      détails.
304     </para>
305    </formalpara>
306
307    <para>
308     Pour les très grosses bases de données, il peut être nécessaire de combiner
309     <command>split</command> avec une des deux autres approches.
310    </para>
311
312   </sect2>
313  </sect1>
314
315  <sect1 id="backup-file">
316   <title>Sauvegarde de niveau système de fichiers</title>
317
318   <para>
319    Une autre stratégie de sauvegarde consiste à copier les fichiers
320    utilisés par <productname>PostgreSQL</productname> pour le stockage des données.
321    Dans la <xref linkend="creating-cluster"/>, l'emplacement de ces
322    fichiers est précisé mais quiconque s'intéresse à cette méthode les a
323    probablement déjà localisés. N'importe quelle
324    méthode de sauvegarde peut être utilisée, par exemple&nbsp;:
325  
326 <programlisting>tar -cf sauvegarde.tar /usr/local/pgsql/data</programlisting>
327   </para>
328
329   <para>
330    Cependant, deux restrictions rendent cette méthode peu pratique
331    ou en tout cas inférieure à la méthode <application>pg_dump</application>.
332  
333    <orderedlist>
334     <listitem>
335      <para>
336       Le serveur de base de données <emphasis>doit</emphasis> être arrêté pour obtenir
337       une sauvegarde utilisable. Toutes les demi-mesures, comme la
338       suppression des connexions, ne fonctionnent <emphasis>pas</emphasis>
339       (principalement parce que <command>tar</command> et les outils similaires
340       ne font pas une image atomique de l'état du système de fichiers,
341       mais aussi à cause du tampon interne du serveur). Les informations concernant la façon d'arrêter
342       le serveur <productname>PostgreSQL</productname> se trouvent dans la
343       <xref linkend="server-shutdown"/>.
344     </para>
345
346      <para>
347       Le serveur doit également être arrêté avant de restaurer les données.
348       </para>
349     </listitem>
350
351     <listitem>
352      <para>
353       Quiconque s'est aventuré dans les détails de l'organisation de la
354       base de données peut être tenté de ne sauvegarder et
355       restaurer que certaines tables ou bases de données particulières.
356       Cela ne fonctionne <emphasis>pas</emphasis> parce que les informations
357       contenues dans ces fichiers ne représentent que la moitité de la
358       vérité. L'autre moitié est dans les fichiers journaux de validation
359       <filename>pg_clog/*</filename> qui
360       contiennent l'état de la validation de chaque transaction. Un fichier de
361       table n'est utilisable qu'avec cette information. Bien entendu, il est
362       impossible de ne restaurer qu'une table et les données <filename>pg_clog</filename>
363       associées car cela rendrait toutes les autres tables du serveur
364       inutilisables. Les sauvegardes du système de fichiers fonctionnent,
365       de ce fait, uniquement pour les sauvegardes et restaurations complètes d'un cluster
366       de bases de données.
367      </para>
368     </listitem>
369    </orderedlist>
370   </para>
371
372   <para>
373    Une autre approche à la sauvegarde du système de fichiers consiste à réaliser
374    une <quote>image cohérente</quote> (<foreignphrase>consistent
375    snapshot</foreignphrase>) du répertoire des données. Il faut
376    pour cela que le système
377    de fichiers supporte cette fonctionnalité (et qu'il puisse lui être fait
378    confiance). La procédure typique consiste à réaliser une
379    <quote>image gelée</quote> (<foreignphrase>frozen snapshot</foreignphrase>)
380    du volume contenant la base de données et
381    ensuite de copier entièrement le répertoire de données (pas seulement
382    quelques parties,
383    voir ci-dessus) de l'image sur un périphérique de sauvegarde, puis de
384    libérer l'image gelée. Ceci fonctionne même si le serveur de la base de
385    données est en cours d'exécution. Néanmoins, une telle sauvegarde
386    copie les fichiers de la base de données dans un état où le
387    serveur n'est pas correctement arrêté&nbsp;; du coup, au lancement du
388    serveur à partir des données sauvegardées, PostgreSQL peut penser que le
389    serveur s'est stoppé brutalement et rejouer les journaux WAL. Ce n'est
390    pas un problème, mais il faut en être conscient (et s'assurer d'inclure les
391    fichiers WAL dans la sauvegarde).
392   </para>
393
394   <para>
395    Si la base de données est répartie sur plusieurs systèmes de fichiers,
396    il n'est peut-être pas possible d'obtenir des images gelées
397    exactement simultanées de tous les disques. Si les fichiers
398    de données et les journaux WAL sont sur des disques différents, par
399    exemple, ou si les
400    tablespaces sont sur des systèmes de fichiers différents, une
401    sauvegarde par images n'est probablement pas utilisable parce que ces
402    dernières <emphasis>doivent</emphasis> être simultanées.
403    La documentation du système de fichiers doit être étudiée avec attention
404    avant de faire confiance à la technique d'images
405    cohérentes dans de telles situations. L'approche la plus sûre est d'arrêter
406    le serveur de bases de données assez longtemps pour créer toutes les images
407    gelées.
408   </para>
409
410   <para>
411    Une autre option consiste à utiliser <application>rsync</application> pour réaliser une
412    sauvegarde du système de fichiers. Ceci se fait tout d'abord en lançant
413    <application>rsync</application> alors que le serveur de bases de données est en cours
414    d'exécution, puis en arrêtant le serveur juste assez longtemps pour lancer
415    <application>rsync</application> une deuxième fois. Le deuxième
416    <application>rsync</application> est beaucoup plus rapide que le premier car il a
417    relativement peu de données à transférer et le résultat final est
418    cohérent, le serveur étant arrêté. Cette méthode permet de réaliser une
419    sauvegarde du système de fichiers avec un arrêt minimal.
420   </para>
421
422   <para>
423    Une sauvegarde des fichiers de données n'est pas forcément
424    moins volumineuse qu'une sauvegarde SQL. Au contraire, elle l'est très
425    certainement plus (<application>pg_dump</application> ne sauvegarde pas le
426    contenu des index, mais la commande pour les recréer). Cependant, une
427    sauvegarde des fichiers de données peut être plus rapide.
428   </para>
429
430  </sect1>
431
432  <sect1 id="continuous-archiving">
433   <title>Archivage continu et récupération d'un instantané (PITR)</title>
434
435   <indexterm zone="backup">
436    <primary>archivage en continue</primary>
437   </indexterm>
438
439   <indexterm zone="backup">
440    <primary>récupération d'un instantané</primary>
441   </indexterm>
442
443   <indexterm zone="backup">
444    <primary>PITR</primary>
445   </indexterm>
446
447   <para>
448    <productname>PostgreSQL</productname> maintient en permanence des journaux WAL
449    (<firstterm>write ahead log</firstterm>) dans le sous-répertoire
450    <filename>pg_xlog/</filename> du répertoire de données du cluster. Ces journaux
451    décrivent chaque modification effectuée sur les fichiers de données des
452    bases. Ils existent principalement pour se prémunir des suites d'un
453    arrêt brutal&nbsp;: si le système s'arrête brutalement, la base de données
454    peut être restaurée dans un état cohérent en
455    <quote>rejouant</quote> les entrées des journaux enregistrées depuis le dernier
456    point de vérification. Néanmoins, l'existence de ces journaux rend possible
457    l'utilisation d'une troisième stratégie pour la sauvegarde des bases de
458    données&nbsp;: la combinaison d'une sauvegarde de niveau système de
459    fichiers avec la sauvegarde des fichiers WAL. Si la récupération est
460    nécessaire, la sauvegarde est restaurée, puis les fichiers WAL sauvegardés
461    sont rejoués pour amener la sauvegarde jusqu'à la date
462    actuelle. Cette approche est plus complexe à administrer que toutes les
463    autres approches mais elle apporte des bénéfices significatifs&nbsp;:
464   <itemizedlist>
465    <listitem>
466     <para>
467      Il n'est pas nécessaire de disposer d'une sauvegarde parfaitement cohérente
468      comme point de départ. Toute incohérence dans la sauvegarde est corrigée
469      par la ré-exécution des journaux (ceci n'est pas significativement
470      différent de ce qu'il se passe lors d'une récupération après un arrêt
471      brutal). La fonctionnalité d'image du système de fichiers n'est alors
472      pas nécessaire, <application>tar</application> ou tout
473      autre outil d'archivage est suffisant.
474     </para>
475    </listitem>
476    <listitem>
477     <para>
478      Puisqu'une longue séquence de fichiers WAL peut être assemblée pour
479      être rejouée, une sauvegarde continue est obtenue en continuant
480      simplement à archiver les fichiers WAL. C'est particulièrement
481      intéressant pour les grosses bases de données dont une sauvegarde
482      complète fréquente est difficilement réalisable.
483     </para>
484    </listitem>
485    <listitem>
486     <para>
487      Les entrées WAL ne doivent pas obligatoirement être rejouées
488      intégralement. La ré-exécution peut être stoppée en tout point, tout en
489      garantissant une image cohérente de la base de données telle qu'elle
490      était à ce moment-là. Ainsi, cette technique autorise la
491      <firstterm>récupération d'un instantané</firstterm> (PITR)&nbsp;: il est
492      possible de restaurer l'état de la base de données telle qu'elle était
493      en tout point dans le temps depuis la dernière sauvegarde de base.
494     </para>
495    </listitem>
496    <listitem>
497     <para>
498      Si la série de fichiers WAL est fournie en continu à une autre
499      machine chargée avec le même fichier de sauvegarde de base,
500      on obtient un système <quote>de reprise intermédiaire</quote>
501      (<foreignphrase>warm standby</foreignphrase>)&nbsp;: à tout
502      moment, la deuxième machine peut être montée et disposer d'une copie
503      quasi-complète de la base de données.
504     </para>
505    </listitem>
506   </itemizedlist>
507   </para>
508
509   <para>
510    Tout comme la technique de sauvegarde standard du système de fichiers,
511    cette méthode ne supporte que la restauration d'un cluster de bases de données
512    complet, pas d'un sous-ensemble. De plus, un espace d'archivage important
513    est requis&nbsp;: la sauvegarde de la base peut être volumineuse et un
514    système très utilisé engendre un trafic WAL à archiver de plusieurs Mo.
515    Malgré tout, c'est la technique de sauvegarde préférée dans de nombreuses
516    situations où une haute fiabilité est requise.
517   </para>
518
519   <para>
520    Une récupération fructueuse à partir de l'archivage continu
521    (aussi appelé <quote>sauvegarde à chaud</quote> par certains vendeurs de SGBD) nécessite
522    une séquence ininterrompue de fichiers WAL archivés qui
523    s'étend au moins jusqu'au point de départ de la sauvegarde. Pour
524    commencer, il faut configurer et tester la procédure d'archivage
525    des journaux WAL <emphasis>avant</emphasis> d'effectuer la première sauvegarde de
526    base. C'est pourquoi la suite du document commence par présenter les mécanismes
527    d'archivage des fichiers WAL.
528   </para>
529
530   <sect2 id="backup-archiving-wal">
531    <title>Configurer l'archivage WAL</title>
532
533    <para>
534     Au sens abstrait, un système <productname>PostgreSQL</productname> fonctionnel
535     produit une séquence infinie d'enregistrements WAL. Le système
536     divise physiquement cette séquence en <firstterm>fichiers de segment</firstterm>
537     WAL de 16&nbsp;Mo chacun (en général, mais cette taille peut
538     être modifiée lors de la construction de <productname>PostgreSQL</productname>). Les
539     fichiers segment reçoivent des noms numériques pour refléter leur
540     position dans la séquence abstraite des WAL. Lorsque le système n'utilise
541     pas l'archivage des WAL, il ne crée que quelques fichiers segment,
542     qu'il <quote>recycle</quote> en renommant les fichiers devenus inutiles.
543     Un fichier segment dont le contenu précède le
544     dernier point de vérification est supposé inutile et peut être recyclé.
545    </para>
546
547    <para>
548     Lors de l'archivage des données WAL, le contenu de
549     chaque fichier de segment doit être capturé dès qu'il est rempli pour
550     sauvegarder les données ailleurs avant son recyclage.
551     En fonction de l'application et du matériel disponible,
552     <quote>sauvegarder les données ailleurs</quote> peut se faire de plusieurs
553     façons&nbsp;: les fichiers segment peuvent être copiés dans un répertoire
554     NFS monté sur une autre machine, être écrits sur une cartouche (après
555     s'être assuré qu'il existe un moyen d'identifier le nom d'origine de chaque
556     fichier) ou être groupés pour gravage sur un CD, ou toute autre chose.
557     Pour fournir autant de flexibilité que possible à l'administrateur de la
558     base de données, <productname>PostgreSQL</productname> essaie de ne faire aucune
559     supposition sur la façon dont l'archivage est réalisé. À la place,
560     <productname>PostgreSQL</productname> permet de préciser la commande
561     shell à exécuter pour copier le fichier de segment complet à l'endroit
562     désiré. La commande peut être aussi simple qu'un
563     <literal>cp</literal> ou impliquer un shell complexe &mdash;
564     c'est l'utilisateur qui décide.
565    </para>
566
567    <para>
568     Pour activer l'archivage des journaux de transaction, on positionne le
569     paramètre <xref linkend="guc-archive-mode"/> à <literal>on</literal>,
570     et on précise la commande shell à utiliser dans le paramètre
571     <xref linkend="guc-archive-command"/> de la configuration. En fait, ces
572     paramètres seront toujours placés dans le fichier
573     <filename>postgresql.conf</filename>. Dans cette chaîne, un
574     <literal>%p</literal> est remplacé par le chemin absolu de
575     l'archive alors qu'un <literal>%f</literal> n'est remplacé que par le
576     nom du fichier. (Le nom du chemin est relatif au répertoire de travail du
577     serveur, c'est-à-dire le répertoire des données du cluster.)
578     <literal>%%</literal> est utilisé pour écrire le
579     caractère <literal>%</literal> dans la commande. La commande la plus
580     simple ressemble à&nbsp;:
581 <programlisting>archive_command = 'cp -i %p /mnt/serveur/repertoire_archive/%f &lt;/dev/null'</programlisting>
582     qui copie les segments WAL archivables dans le répertoire
583     <filename>/mnt/serveur/repertoire_archive</filename>. (Ceci est un exemple, pas
584     une recommandation, et peut ne pas fonctionner sur toutes les
585     plateformes.) Après le remplacement des paramètres <literal>%p</literal>
586     et <literal>%f</literal>, la commande réellement exécutée peut ressembler
587     à&nbsp;:
588 <programlisting>cp -i pg_xlog/00000001000000A900000065 /mnt/server/archivedir/00000001000000A900000065 &lt;/dev/null
589 </programlisting>
590     Une commande similaire est produite pour chaque nouveau fichier à archiver.
591    </para>
592
593    <para>
594     La commande d'archivage est exécutée sous l'identité de l'utilisateur
595     propriétaire du serveur <productname>PostgreSQL</productname>. La série de
596     fichiers WAL en cours d'archivage contient absolument tout ce qui se
597     trouve dans la base de données, il convient donc de s'assurer que les
598     données archivées sont protégées des autres utilisateurs&nbsp;; on peut,
599     par exemple, archiver dans un répertoire sur lequel les droits de lecture
600     ne sont positionnés ni pour le groupe ni pour le reste du monde.
601    </para>
602
603    <para>
604     Il est important que la commande d'archivage ne renvoie le code de sortie
605     zéro que si, et seulement si, l'exécution a réussi. En obtenant un résultat
606     zéro, <productname>PostgreSQL</productname> suppose que le fichier segment WAL a
607     été archivé avec succès et qu'il peut le supprimer ou le recycler.
608     Un statut différent de zéro indique à 
609     <productname>PostgreSQL</productname> que le fichier n'a pas été archivé&nbsp;; il
610     essaie alors périodiquement jusqu'à la réussite de l'archivage.
611    </para>
612
613    <para>
614     La commande d'archivage doit en général être conçue pour refuser
615     d'écraser tout fichier archive qui existe déjà. C'est une fonctionnalité
616     de sécurité importante pour préserver l'intégrité de l'archive dans le
617     cas d'une erreur de l'administrateur (comme l'envoi de la sortie de deux
618     serveurs différents dans le même répertoire d'archivage). Il est
619     conseillé de tester la commande d'archivage proposée pour
620     s'assurer qu'en effet elle n'écrase pas un fichier existant <emphasis>et
621     qu'elle retourne un statut différent de zéro dans ce cas</emphasis>.
622     Il a été découvert
623     que <literal>cp -i</literal> travaille correctement sur certaines plateformes,
624     mais pas sur toutes. Si la commande choisie ne gère pas elle-même ce
625     cas, il convient d'ajouter une commande pour tester l'existence du fichier
626     d'archivage. Par exemple, quelque chose comme&nbsp;:
627 <programlisting>archive_command = 'test ! -f .../%f &amp;&amp; cp %p .../%f'</programlisting>
628     fonctionne correctement sur la plupart des variantes Unix.
629    </para>
630
631    <para>
632     Lors de la conception de la configuration d'archivage, il faut
633     considérer ce qui arrive si la commande d'archivage échoue de façon
634     répétée, parce
635     que certains aspects demandent une intervention de l'opérateur ou
636     par manque d'espace dans le répertoire d'archivage.
637     Ceci peut arriver, par exemple, lors de l'écriture sur une cartouche sans changeur
638     automatique&nbsp;; quand la cartouche est pleine, rien ne peut être
639     archivé tant que la cassette n'est pas changée.
640     Toute erreur ou requête à un opérateur humain doit être rapportée de façon
641     appropriée pour que la situation puisse être résolue
642     rapidement. Le répertoire <filename>pg_xlog/</filename> continue à se remplir
643     de fichiers de segment WAL jusqu'à la résolution de la situation.
644     (Si le système de fichiers contenant <filename>pg_xlog/</filename> se
645     remplit, <productname>PostgreSQL</productname> s'arrête en mode PANIC.
646     Aucune transaction antérieure n'est perdue mais la base de données est
647     indisponible le temps pour l'utilisateur de retrouver de l'espace.)
648    </para>
649
650    <para>
651     La vitesse de la commande d'archivage n'est pas importante, tant qu'elle
652     suit le rythme que la génération de données WAL du serveur. Les
653     opérations normales continuent même si le processus d'archivage est un peu
654     plus lent. Si l'archivage est significativement plus lent, alors la
655     quantité de données qui peut être perdue croît. Cela signifie
656     aussi que le répertoire <filename>pg_xlog/</filename> contient un grand nombre
657     de fichiers segment non archivés, qui peuvent finir par
658     dépasser l'espace disque disponible. Il est conseillé de surveiller
659     le processus d'archivage pour s'assurer que tout fonctionne
660     normalement.
661    </para>
662
663    <para>
664     Lors de l'écriture de la commande d'archivage, il faut garder à l'esprit que les
665     noms de fichier à archiver peuvent contenir jusqu'à 64 caractères et
666     être composés de toute combinaison de lettres ASCII, de chiffres et de points.
667     Il n'est pas nécessaire de retenir le chemin relatif original
668     (<literal>%p</literal>) mais il est nécessaire de rappeler le nom du fichier
669     (<literal>%f</literal>).
670    </para>
671
672    <para>
673     Bien que l'archivage WAL autorise à restaurer toute
674     modification réalisée sur les données de la base
675     <productname>PostgreSQL</productname>, il ne restaure pas les modifications
676     effectuées sur les fichiers de configuration (c'est-à-dire
677     <filename>postgresql.conf</filename>, <filename>pg_hba.conf</filename> et
678     <filename>pg_ident.conf</filename>) car ceux-ci sont édités manuellement
679     et non au travers d'opérations SQL. Il est souhaitable de conserver les
680     fichiers de configuration à un endroit où ils sont sauvegardés par les
681     procédures standard de sauvegarde du système de fichiers. Voir la
682     <xref linkend="runtime-config-file-locations"/> pour savoir comment
683     modifier l'emplacement des fichiers de configuration.
684    </para>
685
686    <para>
687     La commande d'archivage n'est appelée que sur les segments WAL complets.
688     Du coup, si le serveur engendre peu de trafic WAL (ou qu'il y a des périodes
689     de calme où le trafic WAL est léger), il peut y avoir une longue période
690     entre la fin d'une transaction et son enregistrement sûr dans le stockage
691     d'archive. Pour placer une limite sur l'ancienneté des données archivées,
692     on configure <xref linkend="guc-archive-timeout"/> qui force le
693     serveur à changer de fichier segment WAL passé ce délai. Les
694     fichiers archivés lors d'un tel forçage ont toujours
695     la même taille que les fichiers complets. Il est donc déconseillé de configurer
696     un délai <varname>archive_timeout</varname> trop court &mdash; cela fait
697     grossir anormalement le stockage. Une minute pour <varname>archive_timeout</varname>
698     est généralement raisonnable.
699    </para>
700
701    <para>
702     De plus, le changement d'un segment peut être forcé manuellement avec
703     <function>pg_switch_xlog</function>. Cela permet de s'assurer qu'une
704     transaction tout juste terminée est archivée aussi vite que possible.
705     D'autres fonctions utilitaires relatives à la gestion des WAL sont
706     disponibles dans <xref linkend="functions-admin-backup-table"/>.
707    </para>
708
709    <para>
710     Quand <varname>archive_mode</varname> est désactivé
711     (<literal>off</literal>), certaines commandes SQL sont optimisées pour
712     éviter la journalisation des transactions, de la façon décrite dans
713     <xref linkend="populate-pitr"/>. Si l'archivage est activé lors de
714     l'exécution d'une de ces instructions, les journaux de transaction ne
715     contiennent pas d'informations suffisantes pour une récupération via les
716     archives mais la récupération après un arrêt brutal n'est pas affectée.
717     Pour cette raison, <varname>archive_mode</varname> ne peut être
718     modifié qu'au lancement du serveur. Néanmoins,
719     <varname>archive_command</varname> peut être modifié avec un
720     rechargement du fichier de configuration. Pour arrêter
721     temporairement l'archivage, on peut placer une
722     chaîne vide (<literal>''</literal>) pour
723     <varname>archive_command</varname>. Les journaux de transaction sont alors
724     accumulés dans <filename>pg_xlog/</filename> jusqu'au rétablissement
725     d'un paramètre <varname>archive_command</varname> fonctionnel.
726    </para>
727   </sect2>
728
729   <sect2 id="backup-base-backup">
730    <title>Réaliser une sauvegarde de base</title>
731
732    <para>
733     La procédure pour réaliser une sauvegarde de base est relativement
734     simple&nbsp;:
735   <orderedlist>
736    <listitem>
737     <para>
738      S'assurer que l'archivage WAL est activé et fonctionnel.
739     </para>
740    </listitem>
741    <listitem>
742     <para>
743      Se connecter à la base de données en tant que superutilisateur et
744      lancer la commande&nbsp;:
745 <programlisting>SELECT pg_start_backup('label');</programlisting>
746      où <literal>label</literal> est une chaîne utilisée pour
747      identifier de façon unique l'opération de sauvegarde (une bonne pratique
748      est d'utiliser le chemin complet du
749      fichier de sauvegarde). <function>pg_start_backup</function> crée un fichier
750      <firstterm>de label de sauvegarde</firstterm> nommé
751      <filename>backup_label</filename> dans
752      le répertoire du cluster. Ce fichier contient les informations de la sauvegarde.
753     </para>
754
755     <para>
756      La base de données de connexion utilisée pour lancer
757      cette commande n'a aucune importance. Le résultat de la fonction peut
758      être ignoré, mais il faut gérer l'erreur éventuelle avant
759      de continuer.
760     </para>
761
762     <para>
763      <function>pg_start_backup</function> peut prendre beaucoup de temps
764      pour arriver à son terme. Ceci est dû au fait qu'il réalise un
765      point de retournement, et que les entrées/sorties pour l'établissement
766      de ce point de retournement seront réparties sur une grande période
767      de temps, par défaut la moitié de l'intervalle d'un point de
768      retournement (voir le paramètre de configuration
769      <xref linkend="guc-checkpoint-completion-target"/>). Habituellement,
770      ce comportement est appréciable car il minimise l'impact du traitement
771      des requêtes. Pour commencer la sauvegarde aussi rapidement
772      que possible, on exécute la commande <command>CHECKPOINT</command> (qui
773      déclenche un point de vérification dès que possible), puis
774      on exécute immédiatement <function>pg_start_backup</function>. Le point
775      de vérification de <function>pg_start_backup</function> n'a alors plus
776      grand chose à faire, et s'exécute donc rapidement.
777     </para>
778    </listitem>
779    <listitem>
780     <para>
781      Effectuer la sauvegarde à l'aide de tout outil de sauvegarde du
782      système de fichiers, tel <application>tar</application> ou
783      <application>cpio</application>. Il
784      n'est ni nécessaire ni désirable de stopper les opérations normales de
785      la base de données pour cela.
786     </para>
787    </listitem>
788    <listitem>
789     <para>
790      Se connecter à nouveau à la base de données en tant que
791      superutilisateur et lancer la commande&nbsp;:
792 <programlisting>SELECT pg_stop_backup();</programlisting>
793      Cela met fin au processus de sauvegarde et réalise un basculement
794      automatique vers le prochain segment WAL. Ce basculement est nécessaire
795      pour permettre au dernier fichier de segment WAL écrit pendant la
796      sauvegarde d'être immédiatement archivable.
797     </para>
798    </listitem>
799    <listitem>
800     <para>
801      Une fois que les fichiers des segments WAL utilisés lors de la sauvegarde
802      sont archivés, c'est terminé. Le fichier identifié par le résultat de
803      <function>pg_stop_backup</function> est le dernier segment à archiver pour
804      terminer la sauvegarde. L'archivage de ces fichiers intervient automatiquement
805      car <varname>archive_command</varname> est déjà configuré. Dans de
806      nombreux cas, c'est assez rapide mais il est conseillé de
807      surveiller le système d'archivage pour s'assurer que celui-ci s'effectue
808      correctement et que la sauvegarde est complète.
809     </para>
810    </listitem>
811   </orderedlist>
812    </para>
813
814    <para>
815     Certains outils de sauvegarde émettent des
816     messages d'avertissements ou d'erreurs si les fichiers qu'ils essaient de
817     copier sont modifiés au cours de la copie. Cette situation, normale lors
818     de la sauvegarde d'une base active, ne doit pas être considérée comme
819     une erreur&nbsp;; il suffit de s'assurer que ces messages peuvent être
820     distingués des autres messages. Certaines versions de
821     <application>rsync</application>, par exemple, renvoient un code de sortie
822     distinct en cas de <quote>disparition de fichiers source</quote>. Il est
823     possible d'écrire un script qui considère ce code de sortie comme normal.
824    </para>
825
826    <para>
827     De plus, certaines versions de GNU <application>tar</application>
828     retournent un code d'erreur qu'on peut confondre avec une erreur fatale si
829     le fichier a été tronqué pendant sa copie par
830     <application>tar</application>. Heureusement, les versions 1.16 et
831     suivantes de GNU <application>tar</application> retournent
832     <literal>1</literal> si le fichier a été modifié pendant la sauvegarde et
833     <literal>2</literal> pour les autres erreurs.
834    </para>
835
836    <para>
837     Il n'est pas utile d'accorder de l'importance au temps passé entre
838     <function>pg_start_backup</function> et le début réel de la sauvegarde, pas
839     plus qu'entre la fin de la sauvegarde et
840     <function>pg_stop_backup</function>&nbsp;; un délai de quelques minutes ne
841     pose pas de problème. (Néanmoins, si le serveur est normalement utilisé
842     alors que <varname>full_page_writes</varname> est désactivé, une perte de
843     performances entre <function>pg_start_backup</function> et
844     <function>pg_stop_backup</function> peut être constatée car l'activation du
845     paramètre <varname>full_page_writes</varname> est forcée lors du mode de
846     sauvegarde.) Il convient toutefois de s'assurer que ces étapes sont
847     effectuées séquentiellement, sans chevauchement. Dans le cas contraire, la
848     sauvegarde est invalidée.
849    </para>
850
851    <para>
852     La sauvegarde doit inclure tous les fichiers du répertoire
853     du groupe de bases de données
854     (<filename>/usr/local/pgsql/data</filename>, par exemple). Si des
855     <foreignphrase>tablespace</foreignphrase>
856     qui ne se trouvent pas dans ce répertoire sont utilisés, il ne faut pas
857     oublier de les inclure (et s'assurer également que la sauvegarde archive les liens
858     symboliques comme des liens, sans quoi la restauration des
859     <foreignphrase>tablespace</foreignphrase> sera problématique).
860    </para>
861
862    <para>
863     Néanmoins, les fichiers du sous-répertoire
864     <filename>pg_xlog/</filename>,
865     contenu dans le répertoire du cluster, peuvent être omis. Cette petite
866     complication permet de réduire le risque d'erreurs lors de la restauration.
867     C'est facile à réaliser si <filename>pg_xlog/</filename> est un lien
868     symbolique vers quelque endroit extérieur au répertoire du cluster,
869     ce qui est toutefois une configuration courante, pour des raisons de performance.
870    </para>
871
872    <para>
873     La sauvegarde n'est utilisable que si les fichiers de segment WAL
874     engendrés pendant ou après cette sauvegarde sont préservés.
875     Pour faciliter cela, la fonction
876     <function>pg_stop_backup</function> crée un <firstterm>fichier d'historique de la
877     sauvegarde</firstterm> immédiatement stocké dans la zone d'archivage des WAL.
878     Ce fichier est nommé d'après le nom du premier fichier segment WAL
879     nécessaire à l'utilisation de la sauvegarde. Ainsi, si le fichier
880     WAL de démarrage est <literal>0000000100001234000055CD</literal>, le nom
881     du fichier d'historique ressemble à
882     <literal>0000000100001234000055CD.007C9330.backup</literal> (le deuxième nombre
883     dans le nom de ce fichier contient la position exacte à l'intérieur du fichier
884     WAL et peut en général être ignoré). Une fois que la sauvegarde du
885     système de fichiers et des segments WAL utilisés
886     pendant celle-ci (comme précisé dans le fichier d'historique des sauvegardes)
887     est archivée de façon sûre,   
888     tous les segments WAL archivés de noms numériquement plus
889     petits ne sont plus nécessaires à la récupération de la sauvegarde du
890     système de fichiers et peuvent être supprimés. Toutefois, il est
891     préférable de conserver plusieurs jeux de sauvegarde pour être absolument
892     certain de pouvoir récupérer les données.
893    </para>
894
895    <para>
896     Le fichier d'historique de la sauvegarde est un simple fichier texte. Il
897     contient le label passé à <function>pg_start_backup</function>,
898     l'heure et les segments WAL de début et de fin de la sauvegarde.
899     Si le label est utilisé pour identifier l'endroit où le fichier de sauvegarde associé
900     est conservé, alors le fichier d'historique archivé est suffisant pour
901     savoir quel fichier de sauvegarde restaurer, en cas de besoin.
902    </para>
903
904    <para>
905     Puisqu'il faut conserver tous les fichiers WAL archivés depuis la
906     dernière sauvegarde de base, l'intervalle entre les sauvegardes de base
907     est habituellement choisi en fonction de l'espace de stockage qu'on
908     accepte de consommer en fichiers d'archives WAL. Il faut également
909     considérer le temps à dépenser pour la
910     récupération, si celle-ci s'avère nécessaire &mdash; le système doit rejouer
911     tous les segments WAL et ceci peut prendre beaucoup de temps si la
912     dernière sauvegarde de base est ancienne.
913    </para>
914
915    <para>
916     La fonction
917     <function>pg_start_backup</function> crée un fichier nommé
918     <filename>backup_label</filename> dans le répertoire du cluster de bases
919     de données. Ce fichier est ensuite supprimé par
920     <function>pg_stop_backup</function>. Ce fichier est bien sûr archivé
921     comme faisant parti du fichier de
922     sauvegarde. Le fichier de label de la sauvegarde inclut la chaîne de label
923     passée à <function>pg_start_backup</function>, l'heure à
924     laquelle <function>pg_start_backup</function> a été exécuté et le nom du fichier
925     WAL initial. En cas de confusion, il est ainsi possible de regarder
926     dans le fichier sauvegarde et de déterminer avec précision de quelle session
927     de sauvegarde provient ce fichier.
928    </para>
929
930    <para>
931     Il est aussi possible de faire une sauvegarde alors que le serveur est
932     arrêté. Dans ce cas, <function>pg_start_backup</function> et
933     <function>pg_stop_backup</function> ne peuvent évidemment pas être
934     utilisés. L'utilisateur doit alors se débrouiller pour identifier les
935     fichiers de sauvegarde et déterminer jusqu'où remonter avec les fichiers
936     WAL associés. Il est généralement préférable de
937     suivre la procédure d'archivage en ligne décrite ci-dessus.
938    </para>
939   </sect2>
940
941   <sect2 id="backup-pitr-recovery">
942    <title>Récupération d'une sauvegarde en ligne</title>
943
944    <para>
945     Le pire est arrivé et il faut maintenant repartir d'une sauvegarde.
946     Voici la procédure&nbsp;:
947   <orderedlist>
948    <listitem>
949     <para>
950      Arrêter le serveur s'il est en cours d'exécution.
951     </para>
952    </listitem>
953    <listitem>
954     <para>
955      Si la place nécessaire est disponible, copier le répertoire complet de
956      données du cluster et tous les <foreignphrase>tablespaces</foreignphrase>
957      dans un emplacement temporaire en prévision d'un éventuel besoin
958      ultérieur. Cette précaution nécessite qu'un espace suffisant sur le
959      système soit disponible pour contenir deux copies de la base de données
960      existante. S'il n'y a pas assez de place disponible, il faut au minimum
961      copier le contenu du sous-répertoire <filename>pg_xlog</filename> du
962      répertoire des données du cluster car il peut contenir des journaux
963      qui n'ont pas été archivés avant l'arrêt du serveur.
964     </para>
965    </listitem>
966    <listitem>
967     <para>
968      Effacer tous les fichiers et sous-répertoires existant sous le
969      répertoire des données du cluster et sous les répertoires racines des
970      <foreignphrase>tablespaces</foreignphrase>.
971     </para>
972    </listitem>
973    <listitem>
974     <para>
975      Restaurer les fichiers de la base de données à partir de la
976      sauvegarde. Il faut veiller à ce qu'ils soient restaurés avec le bon
977      propriétaire (l'utilisateur système de la base de données, et non pas
978      <literal>root</literal>&nbsp;!) et avec les bons droits. Si des
979      <foreignphrase>tablespaces</foreignphrase> sont utilisés, il faut
980      s'assurer que les liens symboliques dans
981      <filename>pg_tblspc/</filename> ont été correctement restaurés.
982     </para>
983    </listitem>
984    <listitem>
985     <para>
986      Supprimer tout fichier présent dans <filename>pg_xlog/</filename>&nbsp;;
987      ils proviennent de la sauvegarde et sont du coup probablement obsolètes.
988      Si <filename>pg_xlog/</filename> n'a pas été archivé, il suffit de
989      recréer ce répertoire en faisant attention à le créer en tant que
990      lien symbolique si c'était le cas auparavant.
991      Le sous-répertoire
992      <filename>pg_xlog/archive_status/</filename> doit aussi être créé.
993     </para>
994    </listitem>
995    &l