Précédent   Forum des professionnels en informatique > Bases de données > DB2
DB2 Forum d'entraide technique sur la base de données DB2. Voir aussi -> Rubrique DB2
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/11/2007, 10h25   #1
Membre du Club
 
Inscription : mars 2007
Messages : 76
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 76
Points : 55
Points : 55
Par défaut Lock table DB2

Bonjour,

Je suis un débutant en DB2 et je me pose des questions sur la gestion des verrous de table sur DB2 :
si une application 1 insére un enregistrement dans la table A mais ne fait pas le commit instantanément.
si une application 2 insére un enregistrement dans la table A avant que l'application 1 ait fait le commit, l'insertion ne se fait pas ?

Merci d'avance.

Raphaël
rapha51 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2007, 11h42   #2
Membre habitué
 
Inscription : septembre 2004
Messages : 123
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 123
Points : 127
Points : 127
Bonjour,

Cela dépend. Lorsque tu fais une mise à jour, tu prends un lock sur une ressource qui en fonction du paramétrage (granularité) peut être la table, la page ou la ligne. Ce verrou ne sera libéré qu'au commit (explicite si codé, implicite si fin de la tâche ou autocommit). En général, le niveau page est un bon compromis. Donc dans ton cas et avec un verrouillage page, si tu inséres concuramment dans la même page, l'application 2 sera en attente que l'application 1 commite. Si la 1 ne commite pas et ne libére donc pas son verrou et incidemment la page, la 2 "timeoutera" au delà d'un temps prédéfini au paramétrage de ta base. Si les 2 applications insérent dans des pages différentes, pas de problème.

Alex.
alex. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2007, 11h52   #3
Membre du Club
 
Inscription : mars 2007
Messages : 76
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 76
Points : 55
Points : 55
Merci pour ta réponse.
J'ai encore deux question :
- c'est quoi le niveau page ?
- comment changer le paramétrage 'granularité' ?

Merci d'avance et bonne journée.

Raphaël
rapha51 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2007, 15h25   #4
Membre habitué
 
Inscription : septembre 2004
Messages : 123
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 123
Points : 127
Points : 127
Les données sont stockées logiquement dans des tables et des lignes/colonnes. Physiquement, elles sont dans des tablespaces découpés en extents/segments puis en pages et enfin les enregistrements/lignes de la tables. La granularité et le type dépend de la plateforme. Pour z/OS, elle se définit dans le create tablespace, pour LUW, dans le create table et le niveau page n'existe pas (row ou table). On peut modifier la granularité avec un alter.

Alex.

PS : sur ce forum, il faut toujours préciser la plateforme sur laquelle on travaille (LUW, zOS ou AS400).
alex. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2007, 16h24   #5
Membre du Club
 
Inscription : mars 2007
Messages : 76
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 76
Points : 55
Points : 55
En fait je travaille sous windows.

Je viens de vérifier et ma table est en granularité 'ligne', donc si j'ai bien compris mon 2e insert ne devrait pas attendre le commit du premier insert car tous les 2 travaillent sur la même table mais pas sur la même row ?

PS : ce n'est pas le cas, je suis bloqué

Merci pour tout.

Raphaël
rapha51 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2007, 21h39   #6
Membre Expert

 
Homme François Durand
Spécialiste Delivery Mainframe IBM
Inscription : octobre 2005
Messages : 1 098
Détails du profil
Informations personnelles :
Nom : Homme François Durand
Âge : 53
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Spécialiste Delivery Mainframe IBM
Secteur : Finance

Informations forums :
Inscription : octobre 2005
Messages : 1 098
Points : 1 707
Points : 1 707
Citation:
Envoyé par alex. Voir le message
... Donc dans ton cas et avec un verrouillage page, si tu inséres concuramment dans la même page, l'application 2 sera en attente que l'application 1 commite. Si la 1 ne commite pas et ne libére donc pas son verrou et incidemment la page, la 2 "timeoutera" au delà d'un temps prédéfini au paramétrage de ta base. Si les 2 applications insérent dans des pages différentes, pas de problème.
Moi j'aurais dit (en DB2 z/OS au moins ...) que si un processus a déjà inséré (l'instruction INSERT) dans une page donnée sans avoir encore fait un commit et qu'un second processus veut insérer dans la même table alors DB2 ne choisira pas la page verrouillée et, sans attendre que cette dernière se libère, ira insérer dans une autre page ...
Luc Orient est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2007, 06h41   #7
Membre habitué
 
Inscription : septembre 2004
Messages : 123
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 123
Points : 127
Points : 127
Effectivement, merci pour cette précision. En LUW, le niveau page pour le locking n'existant pas, le problème ne se pose pas.
alex. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2007, 09h27   #8
Membre du Club
 
Inscription : mars 2007
Messages : 76
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 76
Points : 55
Points : 55
donc c'est normal ou pas que mon 2e insert soit bloqué ?

Merci pour toutes vos réponses.

Raphaël
rapha51 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2007, 11h38   #9
Membre habitué
 
Inscription : septembre 2004
Messages : 123
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 123
Points : 127
Points : 127
Non, ce n'est pas normal. Tu devrais passer sans problème, si tu n'inséres qu'une ligne dans chaque application. Ton appli ne fait que ça ?

Alex.
alex. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2007, 11h52   #10
Membre du Club
 
Inscription : mars 2007
Messages : 76
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 76
Points : 55
Points : 55
Oui en fait pour mes tests :
- j'insére une ligne dans la table A depuis un éditeur SQL (Toad) et je ne fais pas de Commit
- j'insére une ligne dans la table B depuis une application PHP et là tant que je fais pas de commit sous Toad ma page reste bloquée.

Merci d'avance.

Raphaël
rapha51 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h19.


 
 
 
 
Partenaires

Hébergement Web