Fonction JetBeginTransaction

S’applique à : Windows | Windows Server

Fonction JetBeginTransaction

La fonction JetBeginTransaction permet à une session d’entrer une transaction et de créer un point d’enregistrement. Cette fonction peut être appelée plusieurs fois sur une seule session pour provoquer la création de points d’enregistrement supplémentaires. Ces points d’enregistrement peuvent être utilisés pour conserver ou ignorer de manière sélective les modifications apportées à l’état de la base de données.

    JET_ERR JET_API JetBeginTransaction(
      __in          JET_SESID sesid
    );

Paramètres

sesid

Session à utiliser pour cet appel.

Valeur renvoyée

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 de stockage extensible et Paramè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 d’effectuer l’opération, car toutes les activités sur le instance associées à la session ont cessé à la suite d’un appel à JetStopService.

JET_errInstanceUnavailable

Il n’est pas possible d’effectuer l’opération, car le instance associé à la session a rencontré une erreur irrécupérable qui exige que l’accès à toutes les données soit révoqué pour protéger l’intégrité de ces données.

Cette erreur sera retournée uniquement par Windows XP et les versions ultérieures.

JET_errNotInitialized

Il n’est pas possible d’effectuer l’opération, car le instance associé à la session n’a pas encore été initialisé.

JET_errRestoreInProgress

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

JET_errSessionSharingViolation

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

JET_errTermInProgress

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

JET_errTransTooDeep

Impossible de démarrer une nouvelle transaction, car la session se trouve déjà à la profondeur maximale du point d’enregistrement autorisée par le moteur de base de données.

En cas de réussite, la session fournie se trouve à l’intérieur d’une transaction. Si la session se trouvait précédemment à l’intérieur d’une transaction, un nouveau point d’enregistrement est créé.

En cas d’échec, l’état transactionnel de la session reste inchangé. Aucune modification de l’état de la base de données ne se produira.

Notes

Le moteur de base de données fournit un modèle d’isolation instantané pour ses transactions. Cela signifie que, lorsqu’une session entre pour la première fois dans un état transactionnel, la session voit la base de données entière figée dans le temps au début de la transaction. Une session n’a pas besoin de lire les données, car elle peut toujours accéder à la version appropriée de ces données. Cela signifie qu’une session qui met à jour des données n’empêchera jamais une autre session de lire ces données.

Une autre implication de l’utilisation de instantané isolation est le modèle de verrouillage utilisé pour les mises à jour. Le moteur de base de données attribue un verrou d’écriture sur un élément de données donné à la première session qui la demande. Ce verrou d’écriture est libéré lorsque la transaction est validée ou abandonnée complètement, de sorte que la session ne se trouve plus dans une transaction. Lorsqu’une session contient un verrou d’écriture, toute autre session qui demande le même verrou d’écriture ne bloque pas tant que le verrou d’écriture n’est pas disponible. Au lieu de cela, cette deuxième session échouera immédiatement avec JET_errWriteConflict. Pour résoudre ce conflit, la deuxième session doit abandonner (ou valider) complètement sa transaction, attendre un petit laps de temps que la première session valide ou abandonner sa transaction, puis tout recommencer.

Pour prendre en charge l’isolation de instantané, le moteur de base de données stocke toutes les versions de toutes les données modifiées en mémoire depuis le démarrage de la plus ancienne transaction active sur une session. Cela a des implications importantes pour votre application. Tout comportement qui entraîne l’accumulation d’un grand nombre de versions en mémoire peut entraîner l’épuisement de la taille maximale du magasin de versions du instance (pour plus d’informations, voir JET_paramMaxVerPages dans Paramètres système). Ce comportement inclut, mais ne s’y limite pas, les mises à jour très volumineuses dans une seule transaction et les transactions de très longue durée. Par conséquent, il est très important de configurer correctement la taille du magasin de versions pour la charge transactionnelle attendue de l’application. Il est également important de veiller à limiter le nombre de mises à jour effectuées dans une transaction unique. En outre, il est important d’effectuer des transactions aussi courtes que possible dans des scénarios de charge élevée.

Il est vivement recommandé que l’application se trouve toujours dans le contexte d’une transaction lors de l’appel d’API ESE qui récupèrent ou mettent à jour des données. Si ce n’est pas le cas, le moteur de base de données encapsule automatiquement chaque appel d’API ESE de ce type dans une transaction au nom de l’application. Le coût de ces transactions très courtes peut s’additionner rapidement dans certains cas.

Le comportement par défaut du moteur consiste à limiter l’utilisation d’une session au même thread à partir du moment où le premier appel à JetBeginTransaction est effectué jusqu’à l’heure à laquelle l’appel correspondant à JetCommitTransaction ou JetRollback est effectué. Ce comportement peut être modifié pour supprimer cette restriction en définissant un contexte de session personnalisé à l’aide de JetSetSessionContext et JetResetSessionContext.

Le moteur de base de données prend également en charge les modifications de schéma transactionnel. Par exemple, il est possible de commencer une nouvelle transaction, de créer une table, d’ajouter quelques colonnes, de créer un index ou deux, puis d’abandonner la transaction. Les éléments de schéma qui viennent d’être ajoutés seront supprimés de la base de données. Il est également possible de combiner des modifications de schéma et des mises à jour de base de données ordinaires dans la même transaction.

Spécifications

Condition requise Valeur

Client

Nécessite Windows Vista, Windows XP ou Windows 2000 Professionnel.

Serveur

Nécessite Windows Server 2008, Windows Server 2003 ou Windows 2000 Server.

En-tête

Déclaré dans Esent.h.

Bibliothèque

Utilisez ESENT.lib.

DLL

Nécessite ESENT.dll.

Voir aussi

JET_ERR
JET_GRBIT
JET_SESID
JetCommitTransaction
JetGetSystemParameter
JetResetSessionContext
JetRollback
JetSetSessionContext
JetStopService
Paramètres système