JetDefragment2, fonction

S’applique à : Windows | serveur Windows

JetDefragment2, fonction

La fonction JetDefragment2 démarre et arrête les tâches de défragmentation de base de données qui améliorent l’organisation des données au sein d’une base de données, avec un paramètre de rappel disponible pour signaler la progression de la défragmentation. Cela permet de limiter la croissance de la base de données à l’aide de l’allocation de disque existante plus efficacement dans la base de données. Il peut également réduire le jeu de travail en garantissant que les données sont plus étroitement empaquetées. Enfin, elle peut améliorer les performances des applications en accélérant les opérations courantes via une meilleure organisation des données.

Windows XP:JetDefragment2 est introduit dans Windows XP.

JetDefragment2 contient également un paramètre de fonction de rappel utilisé pour signaler la progression du processus de défragmentation.

La défragmentation de base de données est une opération en ligne et n’interrompt pas l’activité régulière de base de données, comme les opérations de requête ou les mises à jour des données. JetDefragment2 ne fait pas également une copie de toutes les données existantes. Au lieu de cela, il défragmente une base de données en place. Enfin, JetDefragment2 récupère l’espace de base de données interne pour une réutilisation, mais ne libère pas d’espace excédentaire sur le système de fichiers du système d’exploitation.

Le format résultant des données peut être beaucoup plus efficace, mais n’est généralement pas optimal. La défragmentation est limitée à la publication de pages de base de données pour une réutilisation qui contient des données qui ont déjà été supprimées logiquement. La défragmentation rend également les pages de base de données disponibles pour une réutilisation dans certains cas en combinant des données de deux pages lorsqu’elles peuvent s’adapter à une seule page.

Cette opération est différente de JetCompact qui rend une copie d’une base de données en lecture seule dans un formulaire hautement optimal.

JET_ERR JET_API JetDefragment2(
  __in          JET_SESID sesid,
  __in          JET_DBID dbid,
  __in          JET_PCSTR szTableName,
  __out_opt     unsigned long* pcPasses,
  __out_opt     unsigned long* pcSeconds,
  __in          JET_CALLBACK callback,
  __in          JET_GRBIT grbit
);

Paramètres

sesid

Session à utiliser pour cet appel.

dbid

Base de données à défragmenter.

szTableName

Parfois szTableName est requis, et parfois il est interdit :

grbit szTableName
JET_bitDefragmentBTreeBatch Doit être NULL.
JET_bitDefragmentBTree Spécifie le nom de la table/BTree à défragmenter.
Autres Doit être NULL.

La défragmentation est effectuée pour la base de données entière décrite par l’ID de base de données donné.

pcPasses

Lors du démarrage d’une tâche de défragmentation en ligne, ce paramètre d’entrée facultatif définit le nombre maximal de dépassements de défragmentation. Lors de l’arrêt d’une tâche de défragmentation en ligne, cette mémoire tampon de sortie facultative est définie sur le nombre de passes effectuées.

Lorsque ce paramètre est défini sur NULL, le nombre de passes de défragmentation en ligne est illimité.

pcSeconds

Lors du démarrage d’une tâche de défragmentation en ligne, ce paramètre d’entrée facultatif définit la durée maximale de défragmentation. Lors de l’arrêt d’une tâche de défragmentation en ligne, cette mémoire tampon de sortie facultative est définie sur la durée utilisée pour la défragmentation.

Lorsque ce paramètre est défini sur NULL ou si pcSeconds pointe vers une valeur négative, la durée maximale de défragmentation est illimitée.

rappel

Fonction de rappel qui défragmentation appelle régulièrement pour signaler la progression.

grbit szTableName
JET_bitDefragmentBTreeBatch Doit être NULL.
JET_bitDefragmentBTree Doit être NULL.
Autres facultatif.

grbit

Groupe de bits spécifiant zéro ou plusieurs des options suivantes.

Valeur

Signification

JET_bitDefragmentAvailSpaceTreesOnly

Cette option est utilisée pour défragmenter la partie d’espace disponible de l’allocation d’espace de base de données ESE. L’espace de base de données est divisé en deux types, un espace détenu et un espace disponible. L’espace détenu est alloué à une table ou à un index pendant que l’espace disponible est prêt à être utilisé dans la table ou l’index, respectivement. L’espace disponible est beaucoup plus dynamique dans le comportement et nécessite la défragmentation en ligne plus que les données d’espace ou de table ou d’index appartenant.

JET_bitDefragmentBatchStart

Cette option est utilisée pour démarrer une nouvelle tâche de défragmentation.

JET_bitDefragmentBatchStop

Cette option est utilisée pour arrêter une tâche de défragmentation démarrée existante.

JET_bitDefragmentBTree

Cette option est utilisée pour défragmenter une arborescence B, spécifiée par szTableName.

JET_bitDefragmentBTreeBatch

Cette option est utilisée pour appeler OLD2 sur l’ensemble de la base de données.

Valeur de retour

Cette fonction retourne le type de données JET_ERR avec l’un des codes de retour suivants. Pour plus d’informations sur les erreurs ESE possibles, consultez Erreurs du moteur extensible Stockage s etparamètres de gestion des erreurs.

Code de retour

Description

JET_errSuccess

L’opération s’est terminée avec succès.

JET_errClientRequestToStopJetService

Il n’est pas possible de terminer l’opération, car toute activité sur l’instance associée à la session a cessé en raison d’un appel à JetStopService.

JET_errDatabaseFileReadOnly

La base de données choisie pour la défragmentation est en lecture seule et ne peut pas être mise à jour de toute façon, y compris la défragmentation.

JET_errDistributedTransactionAlreadyPreparedToCommit

La session donnée est prête à valider l’état et ne peut pas commencer de nouvelles mises à jour tant que la transaction actuelle n’est pas validée ou annulée.

JET_errInstanceUnavailable

Il n’est pas possible d’effectuer l’opération, car l’instance associée à la session a rencontré une erreur irrécupérable qui nécessite que l’accès à toutes les données soit révoqué pour protéger l’intégrité de ces données. Cette erreur ne sera retournée que par Windows XP et versions ultérieures.

JET_errInvalidDatabaseId

L’ID de base de données donné ne correspond pas à une base de données connue dans l’instance.

JET_errNotInitialized

Il n’est pas possible de terminer l’opération, car l’instance associée à la session n’a pas encore été initialisée.

JET_errRestoreInProgress

Il n’est pas possible de terminer l’opération, car une opération de restauration est en cours sur l’instance associée à la session.

JET_errSessionSharingViolation

La même session ne peut pas être utilisée pour plusieurs threads en même temps. Cette erreur ne sera retournée que par Windows XP et versions ultérieures.

JET_errTermInProgress

Il n’est pas possible d’effectuer l’opération, car l’instance associée à la session est arrêtée.

JET_errTransReadOnly

La session donnée dispose de privilèges en lecture seule et ne peut pas démarrer une tâche qui peut effectuer une mise à jour, y compris la défragmentation.

JET_errVersionStoreOutOfMemory

Cette erreur se produit lorsque la taille configurée du magasin de versions est insuffisante pour contenir toutes les mises à jour en attente.

JET_wrnDefragAlreadyRunning

L’option JET_bitDefragmentBatchStart a été passée, mais une tâche de défragmentation est déjà en cours d’exécution sur la base de données donnée.

JET_wrnDefragNotRunning

L’option JET_bitDefragmentBatchStop a été passée, mais aucune tâche de défragmentation n’est en cours d’exécution.

Lors de la réussite, l’action demandée de démarrer une tâche de défragmentation pour une donnée avec des options données est effectuée ou l’action d’arrêt d’une tâche de défragmentation existante est effectuée.

En cas d’échec, l’action demandée de démarrage ou d’arrêt d’un travail de défragmentation en ligne n’est pas effectuée. Aucun autre effet secondaire ne se produit.

Remarques

La défragmentation en ligne est contrôlée à la fois par un paramètre, ainsi que par cette API. La valeur de paramètre système par défaut est JET_OnlineDefragAll, ce qui signifie que la défragmentation est activée pour toutes les structures de données prises en charge. Toutefois, à l’aide de JetSetSystemParameter, il est possible de désactiver la défragmentation en ligne ou de l’activer sélectivement pour les arborescences d’espaces de base de données uniquement, les bases de données uniquement, les fichiers de streaming uniquement ou toute combinaison de ces options. Si le paramètre système pour la défragmentation en ligne est un paramètre obsolète, JetDefragment2 traite le paramètre comme JET_OnlineDefragAll.

Il peut y avoir au plus une tâche en cours d’exécution pour chaque base de données. La tâche s’exécute en tant que thread dans le processus hébergeant ESE.

La session utilisée pour démarrer la tâche de défragmentation en ligne peut ensuite être utilisée pour les opérations de base de données pendant que la tâche de défragmentation continue, car la tâche de défragmentation alloue sa propre session. La session donnée est utilisée uniquement pour vérifier les autorisations associées à la session de démarrage de la tâche et n’est pas réellement utilisée pour les opérations de défragmentation elles-mêmes.

Spécifications

Condition requise Valeur

Client

Nécessite Windows Vista ou Windows XP.

Serveur

Nécessite Windows Server 2008 ou Windows Server 2003.

En-tête

Déclaré dans Esent.h.

Bibliothèque

Utilisez ESENT.lib.

DLL

Nécessite ESENT.dll.

Unicode

Implémenté en tant que JetDefragment2W (Unicode) et JetDefragment2A (ANSI).

Voir aussi

JET_ERR
JET_SESID
JetCompact
JetDefragment
JetSetSystemParameter
JetStopService