Maintenance des bases de données (SQL Server Compact)

La structure interne d'une base de données Microsoft SQL Server Compact peut se fragmenter au fil du temps et entraîner une augmentation de l'espace disque inutilisé. Si la fragmentation est excessive, les performances peuvent être altérées. Pour éviter la fragmentation, effectuez la maintenance de la base de données SQL Server Compact à l'aide des fonctionnalités ci-dessous.

Pour plus d'informations sur l'utilisation des méthodes et des propriétés décrites dans cette rubrique, consultez System.Data.SqlServerCe.

Méthode de compactage

La méthode Compact (la méthode CompactDatabase en programmation native) permet de récupérer de l'espace dans le fichier de base de données. Elle permet également de modifier des paramètres de base de données tels que le mot de passe et l'ID de paramètres régionaux.

Les fichiers de base de données SQL Server Compact sont répartis en unités logiques de 4 Ko appelées pages. Une base de données étant constamment modifiée, certaines pages peuvent être inutilisées ou contenir de l'espace inutilisé. Ces pages inutilisées sont finalement récupérées par le mécanisme AutoShrink. Pour plus d'informations, consultez la section « Méthode de réduction automatique », plus loin dans cette rubrique.

Seule la méthode Compact permet de récupérer l'espace vide des pages. La méthode Compact lit des lignes dans la base de données source, qu'elle écrit ensuite dans la base de données de destination en lui donnant un minimum d'espace inutilisé.

Notes

Si la propriété Data Source n'est pas spécifiée pour la base de données de destination, la méthode Compact remplace la base de données source par la nouvelle base de données compactée et lui donne le même nom.

Lorsque vous compactez une base de données :

  • Une nouvelle base de données est recréée et de nouveaux index sont créés.

  • Les pages de la table sont réorganisées de manière à être adjacentes. Ceci permet d'améliorer l'allocation d'espace tout en réduisant la fragmentation des tables dans la base de données.

  • L'espace inutilisé engendré par la suppression d'objets et d'enregistrements est récupéré en réécrivant toutes les données de la base de données dans de nouvelles pages de données. Lorsque des objets ou des enregistrements sont supprimés de la base de données, l'espace qu'ils occupent est marqué comme disponible pour de nouveaux ajouts à la base de données. À moins que l'intégralité de la page de données ait été supprimée, la page reste partiellement remplie. La base de données n'est pas réduite tant que les dernières données ne sont pas supprimées de la page ou que la base de données n'est pas compactée. Pour les bases de données dans lesquelles l'ajout, la suppression et la mise à niveau d'objets et d'enregistrements sont fréquentes, nous vous recommandons d'effectuer régulièrement un compactage.

  • Les colonnes d'identité à incrémentation sont réinitialisées de telle sorte que la prochaine valeur allouée est une valeur de pas supérieure à la valeur la plus élevée des enregistrements restants. Par exemple, si tous les enregistrements de la base de données ont été supprimés, le compactage de la base de données définit la valeur de la colonne d'identité de l'enregistrement suivant sur la valeur d'amorçage. Si la valeur d'identité restante la plus élevée de la base de données est 50 et que la valeur de pas est 5, le compactage de la base de données définit la valeur du prochain enregistrement sur 55. C'est vrai même si des enregistrements qui contiennent des valeurs supérieures à 50 ont été ajoutés précédemment, mais ont été supprimés avant le compactage. La valeur de pas peut également être négative, par exemple -5, et la valeur minimale est 15. Le fait de compacter la base de données définit la valeur de l'enregistrement suivant sur 10.

    Notes

    Ceci se produit si vous utilisez la version commerciale d'origine de Visual Studio 2008. Le compactage d'une base de données ne modifie pas les informations d'identité dans Visual Studio 2008 SP1.

  • Si des valeurs sont spécifiées pour l'identificateur de paramètres régionaux ou le mot de passe dans la chaîne de connexion de la base de données de destination, elles seront utilisées lors de la création de la base de données de destination.

Avant de compacter une base de données, vérifiez que les conditions suivantes sont vraies :

  • La base de données doit être fermée.

  • La base de données de destination ne doit pas exister lorsque la méthode Compact est appelée. Une erreur se produit si la base de données spécifiée par DestConnection existe déjà ou s'il existe un autre fichier du même nom.

  • L'espace de stockage doit être suffisant pour les versions d'origine et compactée de la base de données, en plus des données mises en cache et des données stockées dans la base de données temporaire.

Important

Pour utiliser la méthode Compact, l'espace disque disponible sur votre appareil doit être au moins égal au double de la taille de la base de données source.

Méthode de réduction automatique

Pour compacter une base de données, vous créez une nouvelle base de données et vous copiez ensuite tous les objets de la base de données source dans la nouvelle base de données. En principe, le compactage ne démarre pas automatiquement. L'ajustement automatique de la taille du fichier de base de données est appelé AutoShrink. Étant donné que cette technique n'utilise pratiquement pas de temps processeur et de mémoire, elle est particulièrement adaptées pour les appareils de poche et les produits de base de données mobiles. La technique Autoshrink déplace les pages d'un fichier de sorte que toutes les pages vides ou non allouées sont positionnées de manière contiguë à la fin du fichier. Les pages vides sont ensuite tronquées. Les pages tronquées sont alors disponibles pour le système de fichiers de base de données à utiliser. La réintégration des pages tronquées dans le système de fichiers de base de données augmente l'espace du système de fichiers.

Pour définir Autoshrink, pour le code managé, utilisez la propriété de chaîne de connexion AutoShrink Threshold. Pour le code natif, utilisez la propriété DBPROP_SSCE_AUTO_SHRINK_THRESHOLD. Cette propriété spécifie le pourcentage d'espace libre dans le fichier avant le démarrage d'Autoshrink.

Notes

Vous pouvez également réduire une base de données en appelant la méthode Shrink. Pour plus d'informations, consultez System.Data.SqlServerCe.

Méthode de vérification

Les fichiers de base de données SQL Server Compact sont répartis en unités logiques de 4 Ko appelées pages. Chaque page étant écrite dans le fichier de base de données, SQL Server Compact calcule et enregistre une somme de contrôle pour la page. Si la page est modifiée ou altérée après son écriture dans le fichier, elle ne correspond plus à la somme de contrôle attendue. Lorsque SQL Server Compact lit cette page, il renvoie l'erreur native SSCE_M_DATABASECORRUPTED (25017).

Appelez la méthode Verify de la classe SqlCeEngine pour recalculer les sommes de contrôle de chaque page du fichier de base de données et vérifier que les sommes de contrôle correspondent aux valeurs attendues. Si cette méthode renvoie true, le fichier de base de données n'a pas été endommagé. Si elle renvoie false, le fichier de base de données a été endommagé et l'application doit appeler la méthode Repair.

Méthode de réparation

Si un fichier de base de données est endommagé, vous pouvez essayer de le récupérer à l'aide de la méthode Repair(System.String,System.Data.SqlServerCe.RepairOption) de l'objet SqlCeEngine ou de la méthode Repair de l'objet natif Programmation de l'objet Engine (SQL Server Compact). La méthode Repair analyse la base de données et calcule les sommes de contrôle des pages. Si une somme de contrôle ne correspond pas à la somme de contrôle qui avait été calculée lors de l'écriture de la page dans la base de données, la page est considérée comme altérée. Quatre RepairOptions sont disponibles. Pour plus d'informations sur le fonctionnement de ces options, consultez Procédure : vérifier et réparer une base de données (par programme).

Notes

La méthode Repair est utile uniquement si SQL Server Compact renvoie l'erreur native SSCE_M_DATABASECORRUPTED (25017), ou si un appel de la méthode Verify de l'objet SqlCeEngine renvoie la valeur false.

Méthode de vidage automatique

Lorsque des modifications sont apportées dans la base de données en raison de transactions, elles sont conservées dans le pool de mémoires tampons jusqu'à ce que la transaction soit validée ou abandonnée. Si une transaction est abandonnée, les modifications sont ignorées. Si une transaction est validée, ses modifications sont visibles par les autres utilisateurs et transactions, mais elles peuvent ne pas être écrites immédiatement dans la base de données. En cas d'arrêt anormal du programme, suite à la réinitialisation d'un appareil, par exemple, les transactions qui ont été validées mais dont les modifications n'ont pas été écrites dans la base de données sont ignorées.

Notez que les transactions sont toujours écrites dans la base de données dans l'ordre dans lequel elles ont été validées. Cela signifie que malgré la perte possible de certaines transactions, la base de données est toujours cohérente. Imaginons, par exemple, une situation dans laquelle une application a validé la transaction A, puis la transaction B. Si l'application se bloque ou que l'appareil est réinitialisé, la base de données est dans un des trois états suivants :

  • Non modifiée

  • Modifiée par la transaction A

  • Modifiée par A et B

L'écriture de transactions dans la base de données suivant l'ordre dans lequel elles ont été validées améliore les performances en réduisant le nombre d'écritures dans la base de données. L'amélioration des performances est particulièrement sensible lorsqu'un grand nombre de petites transactions sont validées dans un lapse de temps restreint. Dans ce cas, toutes les transactions sont écrites simultanément dans le fichier de base de données au lieu d'être écrites individuellement.

Les modifications en attente dans le pool de mémoires tampons sont écrites dans la base de données ou vidées à des intervalles de temp spécifiés par la propriété de chaîne de connexion Flush Interval dans ADO.NET (propriété DPROP_SSCE_FLUSH_INTERVAL dans OLE DB). Ces propriétés définissent le nombre maximal de secondes avant le vidage des transactions validées du disque.

Notes

Pour les transactions qui doivent être conservées dans la base de données une fois validées, l'application peut utiliser l'énumération CommitMode (ou la propriété DBPROP_SSCE_TRANSACTION_COMMIT_MODE dans OLE DB) pour remplacer l'opération de vidage par défaut lors de la validation. Grâce à ces propriétés, une application peut garantir la conservation de toutes les transactions survenues dans une base de données.

Sauvegarde/Restauration/Suppression

SQL Server Compact étant un système de base de données qui repose sur des fichiers, vous pouvez effectuer de nombreuses tâches de base de données courantes telles que la sauvegarde, la restauration et la suppression d'une base de données à l'aide des API du système de fichiers.

  • Pour sauvegarder une base de données, fermez toutes les connexions à la base de données et copiez ensuite le fichier .sdf.

  • Pour supprimer une base de données, supprimez le fichier de base de données .sdf.

Voir aussi

Référence

Méthode CompactDatabase (SQL Server Compact)

Méthode Repair (SQL Server Compact)