<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
<?xml-stylesheet href="http://radbase.riff.org/pub/docbook-css-0.1.0/driver.css" type="text/css"?>
<book lang="fr">
  <title>Sauvegardes et restaurations avec Firebird</title>

  <chapter>
    <chapterinfo>
      <date>06/06/2004</date>
    </chapterinfo>

    <title>les formats de sauvegarde de Firebird</title>

    <remark>En l'absence de documentation formelle du format des archives
    gbak, les informations rassemblées dans cette documentation sont dérivées
    par ingénierie inverse du code source de Firebird 1.5.0.4290, et sont donc
    uniquement conçues pour décrire la situation des sauvegardes Firebird pour
    cette version, telles qu'elles ont été comprises. En l'attente d'une
    validation par les développeurs Firebird, elles ne constituent pas à leur
    date d'écriture une spécification opposable au code, mais sont au
    contraire conçues comme une explication de celui-ci. Les types de données
    utilisés dans cette documentation sont ceux figurant dans les sources
    Firebird, et sont pour la plupart définis dans <filename
    class="headerfile">&lt;sources&gt;/burp/burp.h</filename> . </remark>

    <para>Les sauvegardes de Firebird telles que produites par
    <command>gbak</command> existent en deux versions:
    <emphasis>transportables</emphasis> ou non, selon que l'option
    <parameter>-T(RANSPORTABLE)</parameter> a été utilisée ou non. </para>

    <sect1>
      <title>Le format transportable</title>

      <para>L'utilisation du paramètre <parameter>-T(RANSPORTABLE)</parameter>
      modifie les données sauvegardées en les passant à travers un
      convertisseur <ulink
      url="http://www.faqs.org/rfcs/rfc1014.html">XDR</ulink> afin que les
      types de données soient portables entre architectures de machines.
      </para>

      <para>Il n'assure pas à lui seul la portabilité des archives entre les
      diverses versions de Firebird et d'Interbase: celle-ci est une
      fonctionnalité intrinsèque de <command>gbak</command>, qui sait en
      principe traiter à la version <emphasis>n</emphasis> les versions
      <emphasis>n</emphasis> et <emphasis>n-1</emphasis>.</para>

      <para>Dans le format transportable, seules les données provenant du
      contenu de la base sauvegardée sont affectées par la transformation XDR
      : les éléments structurels du format de fichier (en-têtes) sont toujours
      codés au format natif du fichier.</para>
    </sect1>

    <sect1>
      <title>Le format natif</title>

      <para>Le format intrinsèque des archives produites par gbak est un arbre
      à deux niveaux:<itemizedlist>
          <listitem>
            <para>Une liste d'enregistrements (<type>record</type>), terminée
            par un élément nul, <constant>rec_end</constant>.</para>
          </listitem>

          <listitem>
            <para>Une liste d'attributs (<type>attribute</type>), terminée par
            un élément nul, <constant>att_end</constant>.</para>
          </listitem>
        </itemizedlist>L'ordre des éléments dans ces listes n'est pas imposé
      structurellement par le format, mais gbak dépend pour les restaurations
      d'un ordre des groupes d'enregistrements prédéfini, documenté dans
      <filename>burp.h</filename>:<orderedlist>
          <listitem>
            <para>Base de données physique. Bien que décrit comme optionnel,
            cet enregistrement semble être toujours inséré par
            <command>gbak</command> lors des sauvegardes, mais
            <command>gbak</command> peut restaurer une archive où il ne figure
            pas.</para>
          </listitem>

          <listitem>
            <para>Base de données logique.</para>
          </listitem>

          <listitem>
            <para>Champs globaux</para>
          </listitem>

          <listitem>
            <para>Dimensions des champs</para>
          </listitem>

          <listitem>
            <para>Relations</para>
          </listitem>

          <listitem>
            <para>Fonctions</para>
          </listitem>

          <listitem>
            <para>Types</para>
          </listitem>

          <listitem>
            <para>Filtres</para>
          </listitem>

          <listitem>
            <para>Données des relations</para>
          </listitem>

          <listitem>
            <para>Déclencheurs (nouveaux)</para>
          </listitem>

          <listitem>
            <para>Messages des déclencheurs</para>
          </listitem>

          <listitem>
            <para>Privilèges des utilisateurs</para>
          </listitem>

          <listitem>
            <para>Sécurité</para>
          </listitem>

          <listitem>
            <para>Enregistrement terminal</para>
          </listitem>
        </orderedlist></para>

      <para>Chacun de ces groupes d'enregistrements se compose d'un ou
      plusieurs enregistrements logiquement reliés, par exemple, le groupe
      "données des relations" se compose d'une sous-liste de
      <constant>rec_relation_data</constant> terminée par un
      <constant>rec_relation_end</constant>, chacune de ces sous-listes
      comportants sa propre iste imbriquée d'attributs.</para>
    </sect1>
  </chapter>
</book>
