Partager via


Maintenance des bases de données [SQL Server Compact Edition]

La structure interne d'une base de données Microsoft SQL Server 2005 Compact Edition (SQL Server Compact Edition) 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 Edition à 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 Objets de l'espace de noms 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 Edition 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é.

Remarque :
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. Ceci est vrai même si des enregistrements contenant des valeurs supérieures à 50 ont été précédemment ajoutées, mais ont été supprimées avant le compactage. La valeur de pas peut également être négative, par exemple –5, et la valeur minimale est 15. Le compactage de la base de données définit la valeur du prochain enregistrement sur 10.
    Remarque :
    Ceci se produit si vous utilisez la version commerciale d'origine de Microsoft Visual Studio 2005. Le compactage d'une base de données ne modifie pas les informations d'identité dans Visual Studio 2005 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.

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

Méthode de vérification

Les fichiers de base de données SQL Server Compact Edition 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 Edition calcule et enregistre une somme de contrôle pour la page. Si la page est modifiée ou corrompue après son écriture dans le fichier, elle ne correspond plus à la somme de contrôle attendue. Lorsque SQL Server Compact Edition 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é corrompu. Si elle renvoie false, le fichier de base de données est corrompu et l'application doit appeler la méthode Repair.

Méthode de réparation

En cas de corruption d'un fichier de base de données, 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 Objet Engine de SQL Server Compact Edition. 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 corrompue. Si la méthode Repair est invoquée avec la valeur RepairOption.DeleteCorruptedRows, toutes les pages corrompues sont ignorées. Si la page corrompue contient un schéma de base de données, la perte de données peut s'avérer importante. Les données récupérées à l'aide de la méthode Repair ne doivent toutefois pas être corrompues. Si la méthode Repair est invoquée avec la valeur RepairOption.RecoverCorruptedRows, la base de données tente de lire les données dans les pages corrompues. Cette opération peut permettre de récupérer davantage de données. L'utilisation de cette option ne garantit cependant pas que les données récupérées seront exemptes de corruption logique.

Remarque :
La méthode Repair est utile uniquement si SQL Server Compact Edition 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 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 tampons sont écrites dans la base de données ou vidées à des intervalles 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.

Remarque :
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 Edition é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 restaurer une base de données, copiez à nouveau le fichier .sdf à son emplacement habituel. Ces opérations fonctionnent même si la base de données est configurée pour la réplication.
  • Pour supprimer une base de données, supprimez le fichier de base de données .sdf.

Voir aussi

Autres ressources

Méthode CompactDatabase (SQL Server Compact Edition)
Méthode Repair (SQL Server Compact Edition)

Aide et information

Assistance sur SQL Server Compact Edition