Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
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 15/12/2010, 13h42   #1
Membre habitué
 
Inscription : décembre 2004
Messages : 643
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 643
Points : 104
Points : 104
Par défaut Accès concurrent / lock

Bonjour,

J'ai une procédure qui est appelée plusieurs fois pour importer plusieurs lignes d'un fichier.

Elle fait juste un insert dans une table qui a un identifiant qui s'incrémente (séquence) et des champs qui ont de foreign keys vers d'autres tables.

Ce qui se passe : une première insertion doit poser un lock sur la table et quand on appelle la procédure par la suite, ça ne répond plus.

A part faire un commit à chaque fois (ce qui n'est pas ce qu'on veut faire), comment peut-on résoudre ce problème?
stof est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2010, 14h41   #2
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 638
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 638
Points : 2 630
Points : 2 630
Bonjour,

Est-ce la même transaction qui gère votre insert et votre appel de procédure ?

Pourquoi ne voulez-vous pas faire un commit après votre insert ?
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2010, 14h57   #3
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 311
Points : 5 808
Points : 5 808
C’est très vague comme explication. Avez-vous un exemple ? Sinon le type lock qui est posé sur la table en insertion ne confirme pas votre hypothèse.
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 15/12/2010, 16h12   #4
Membre habitué
 
Inscription : décembre 2004
Messages : 643
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 643
Points : 104
Points : 104
Citation:
Envoyé par punkoff Voir le message
Bonjour,

Est-ce la même transaction qui gère votre insert et votre appel de procédure ?

Pourquoi ne voulez-vous pas faire un commit après votre insert ?
La personne qui s'occupe de Tibco (pour ceux qui connaissent, c'est le logiciel qui parcourt le fichier et qui appelle à chaque ligne la procédure d'import) me dit que c'est bien la même transaction (c'est justement ce qui nous perturbe sur le problème).
On ne fait pas de commit car c'est tout ou rien : on ne veut pas importer qu'une partie du fichier avant d'éventuellement tomber sur une erreur.
stof est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2010, 16h25   #5
Membre habitué
 
Inscription : décembre 2004
Messages : 643
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 643
Points : 104
Points : 104
Peut-on faire un commit que sur une opération particulière (et non pas sur toutes les modifs en cours)?
stof est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2010, 16h53   #6
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 311
Points : 5 808
Points : 5 808
Oui, dans une transaction autonome.
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 15/12/2010, 23h05   #7
Membre Expert
 
Avatar de pachot
 
Homme Franck Pachot
DBA Oracle
Inscription : novembre 2007
Messages : 703
Détails du profil
Informations personnelles :
Nom : Homme Franck Pachot
Âge : 41
Localisation : Suisse

Informations professionnelles :
Activité : DBA Oracle
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2007
Messages : 703
Points : 1 630
Points : 1 630
Bonjour,
Il faudrait comprendre quel type de verrou bloque.
La réponse est dans V$LOCKED_OBJECT, et dans V$SESSION
En soi, ce que tu décris ne doit pas poser de verrou bloquant.
Est-ce qu'il y a des contraintes d'unicité autres que la PK sur la sequence ? est-ce qu'il y a des triggers ? Est-ce qu'une seule transaction fait les inserts, ou y a-t-il plusieurs sessions en parallèle ?
Cordialement,
Franck
__________________
A lire sur mon blog Oracle - Articles d'Experts des articles traduits en français de Jonathan Lewis, Tom Kyte, Doug Burns, Cary Millsap, Greg Rahn ...
pachot est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 16/12/2010, 10h14   #8
Membre habitué
 
Inscription : décembre 2004
Messages : 643
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 643
Points : 104
Points : 104
On a trouvé : il y avait un select beaucoup trop long dans la façon de l'écrire et qui monopolisait plusieurs tables et peut-être que ça se croisait avec une insertion... bref, en écrivant le select autrement, le problème a disparu...
stof est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2010, 10h49   #9
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 311
Points : 5 808
Points : 5 808
Citation:
Envoyé par stof Voir le message
On a trouvé : il y avait un select beaucoup trop long dans la façon de l'écrire et qui monopolisait plusieurs tables et peut-être que ça se croisait avec une insertion... bref, en écrivant le select autrement, le problème a disparu...
C’est très bien. Comme on vous l’a dit au départ ce n’était pas un problème de lock à l’insertion.
mnitu 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 04h28.


 
 
 
 
Partenaires

Hébergement Web