> Tech > Les instructions SQL Commit et Rollback

Les instructions SQL Commit et Rollback

Tech - Par Renaud ROSSET - Publié le 24 juin 2010
email

Dans un environnement de contrôle de commitment, on fait suivre les instructions de mise à jour individuelles ou les groupes d’instructions de mise à jour par une instruction Commit ou Rollback. Comme DB2 retire automatiquement les mises à jour partiellement effectuées quand votre job se termine, vous devez indiquer explicitement

quand toutes les mises à jour associées sont prêtes à être « committed » (c’està- dire rendues permanentes). Dans l’exemple précédent, l’instruction Commit suivrait immédiatement l’instruction Update, comme dans la séquence suivante :

Update Customer Set Discount = Discount + 0.001 Where Discount Is Not Null Commit

Si l’instruction Update s’exécute bien, dès que l’instruction Commit se termine, les changements apportés à la table Customer sont permanents. En substance, DB2 ajoute au journal une entrée disant que les mises à jour des lignes dont les images avant étaient précédemment sauvegardées, ont maintenant été terminées et « committed ».

On l’a vu, vous pouvez utiliser le contrôle de commitment pour grouper plusieurs instructions de mise à jour dans une seule transaction (aussi appelée une unité logique de travail). Tous les changements de base de données pour des instructions Update, Insert et Delete dans une transaction peuvent être désormais garantis pour une exécution en mode « tout ou rien » : c’est-à-dire que les changements se feront tous, ou pas du tout. Revenons à notre transaction de banque classique. Avec le contrôle de commitment, la séquence d’instructions de base (en ignorant le traitement des erreurs) serait :

Update Saving Set Balance = Balance – 100.00 Where AccID = 123987
Update Checking Set Balance = Balance + 100.00 Where AccID = 12387
Commit

Si vous décidez d’écarter les mises à jour qui n’ont pas encore été « committed », vous pouvez exécuter une instruction Rollback qui, en SQL, est tout simplement

Rollback

Si vous le souhaitez, vous pouvez ajouter le mot-clé Hold à Commit ou Rollback, comme dans l’exemple suivant :

Commit Hold

Avec Hold, toutes les instructions SQL préparées sont gardées (sans Hold, elles disparaissent quand on exécute une instruction Commit ou Rollback). De plus, le mot-clé Hold évite de libérer des verrous de table. Vous pouvez aussi ajouter le mot-clé Hold pour éviter de fermer des curseurs SQL imbriqués. Mais, le plus souvent, il existe une meilleure solution pour garder les curseurs ouverts : coder l’option With Hold sur l’instruction Declare Cursor elle-même.

À noter qu’il n’existe pas d’instruction SQL « begin transaction ». En effet, DB2 commence toujours une transaction de manière implicite – soit quand vous démarrez un environnement de contrôle de commitment, soit quand vous terminez la transaction précédente par une instruction Commit ou Rollback.

Lorsque des instructions Commit et Rollback sont imbriquées dans des programmes SQL, les points principaux à considérer sont les suivants : où placer ces instructions dans la logique du programme et quel est l’impact d’un commit ou rollback sur les autres ressources, telles que des curseurs ouverts. On l’a vu, vous devez vous efforcer de coder Commit et Rollback au(x) point(s) de l’application où vous avez terminé (avec ou sans succès) toutes les instructions SQL impliquées dans une transaction.

Téléchargez cette ressource

Les mégatendances cybersécurité et cyber protection 2024

Les mégatendances cybersécurité et cyber protection 2024

L'évolution du paysage des menaces et les conséquences sur votre infrastructure, vos outils de contrôles de sécurité IT existants. EPP, XDR, EDR, IA, découvrez la synthèse des conseils et recommandations à appliquer dans votre organisation.

Tech - Par Renaud ROSSET - Publié le 24 juin 2010