IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration Oracle Discussion :

Durée d'un timeout sur un lock


Sujet :

Administration Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de 13thFloor
    Homme Profil pro
    DBA Oracle freelance
    Inscrit en
    Janvier 2005
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France

    Informations professionnelles :
    Activité : DBA Oracle freelance

    Informations forums :
    Inscription : Janvier 2005
    Messages : 670
    Par défaut Durée d'un timeout sur un lock
    Hello everybody.
    Quelle est la durée d'un lock pour un verrou en exclusive mode sur une table ?
    Est-il possible de le modifier ? si oui comment.

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    En général un verrou sur une ligne ou une table est détenu jusqu'à la fin de la transaction qui l'a demandé (sauf cas particulier). On peut cependant demander une verrou avec l'option NOWAIT qui retourne immédiatement une erreur si le verrou est déjà pris.

  3. #3
    Membre éclairé Avatar de lmartin
    Inscrit en
    Avril 2008
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 61
    Par défaut
    S'agit-il d'un lock provenant d'une modification faite par DB_LINK ?
    Si oui tu as eu l'erreur ORA-02049 et une façon de faire est de modifier la valeur du paramètre _distributed_lock_timeout

    Cependant ce n'est pas la meilleur des évolutions possible, le mieux étant de traiter ce type de timeout au niveau applicatif.

  4. #4
    Membre émérite Avatar de 13thFloor
    Homme Profil pro
    DBA Oracle freelance
    Inscrit en
    Janvier 2005
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France

    Informations professionnelles :
    Activité : DBA Oracle freelance

    Informations forums :
    Inscription : Janvier 2005
    Messages : 670
    Par défaut
    C'est un simple lock table xxx in exclusive mode, pas de dblink.

  5. #5
    Membre éclairé Avatar de lmartin
    Inscrit en
    Avril 2008
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 61
    Par défaut
    Dans ce cas tu fais choisis le mode NOWAIT et tu catch le ORA qui va bien si la ressource est utilisée avec un retry.

  6. #6
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select empno from emp where ename='SCOTT' for update wait 5;
    le lock est créé pour la durée de la transaction.
    le lock est levé.

    le paramètre wait/nowait n'influence pas la durée du lock, mais permets d'attendre 5 secondes au cas où un lock serait déjà existant dans une autre session. Si après 5 secondes le lock ne peut être obtenu, l'erreur ORA-30006: resource busy;acquire with WAIT timeout expired est retournée

    N'oublie pas de mentionner la version

  7. #7
    Membre émérite Avatar de 13thFloor
    Homme Profil pro
    DBA Oracle freelance
    Inscrit en
    Janvier 2005
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France

    Informations professionnelles :
    Activité : DBA Oracle freelance

    Informations forums :
    Inscription : Janvier 2005
    Messages : 670
    Par défaut
    J'ai bien constaté que le lock est levé dés un commit/rollback.
    Les développeurs du projet sur lequel j'interviens ont positionné un lock en exclusive afin de bloquer les autres traitements tant que le premier n'est pas terminé.
    version : 9.2.0.8 sous Solaris.

  8. #8
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    tu peux toujours faire un alter system kill developpeur si tu es dba

  9. #9
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Voici l'erreur que j'ai eu lors d'un lock suite à un delete sur une table référencée.
    Donc, il n'y a pas eu d'attente de commit/rollback du bloquant.
    la durée est de 60 s
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ORA-02049: timeout: distributed transaction waiting for lock 
    Cause: exceeded INIT.ORA distributed_lock_timeout seconds waiting for lock.
     
    Action: treat as a deadlock

  10. #10
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Citation Envoyé par McM Voir le message
    Voici l'erreur que j'ai eu lors d'un lock suite à un delete sur une table référencée.
    Donc, il n'y a pas eu d'attente de commit/rollback du bloquant.
    la durée est de 60 s
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ORA-02049: timeout: distributed transaction waiting for lock 
    Cause: exceeded INIT.ORA distributed_lock_timeout seconds waiting for lock.
     
    Action: treat as a deadlock

    C'est parce qu'il s'agit d'une transaction distribuée (qui fait intervenir plusieurs bases de données distinctes). Dans ce cas, les règles ne sont pas les mêmes que pour une transaction locale (qui ne concerne qu'une seule base). Dans ce cas vous pouvez envisager d'augmenter la valeur du paramètre DISTRIBUTED_LOCK_TIMEOUT.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 192
    Par défaut verrou suite à un alter table
    Bonjour,
    j'ai un peu le même genre de question: (Ora10gr2 10.2.0.4)

    Lorsqu'on fait du DDL et que par exemple on ajoute une colonne, un verrou de type '6' exclusif(X) est créé.

    Est-ce que cette table restera bloquée en modification de structure pendant toute la durée de la session qui a modifié la table en premier ?
    Ou jusqu'à un commit ?
    Mais une sorte de ''commit automatique'' n'est-t-il pas généré par la réussite de la modification de la table ?

    Finalement, combien de temps devrai-je attendre avant de pouvoir rajouter une colonne sur cette table par exemple ?

  12. #12
    Membre éprouvé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 348
    Par défaut
    Bonjour,

    En 11g le parametre ddl_lock_timeout est apparu pour fixer le "wait" des DDL, par défaut il est à 0.
    Crdlt,

Discussions similaires

  1. Créer un Timeout sur un code qui dure trop longtemps
    Par astrotouf dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 30/09/2011, 17h53
  2. Timeout sur POST formulaire avec checkbox
    Par shyangel dans le forum Langage
    Réponses: 16
    Dernier message: 11/05/2006, 12h59
  3. Comment définir un timeout sur une socket PHP ?
    Par N3odyme dans le forum Langage
    Réponses: 7
    Dernier message: 07/05/2006, 23h04
  4. Timeout sur read() avec termios et VTIME
    Par olivier857 dans le forum C
    Réponses: 9
    Dernier message: 05/04/2006, 09h30
  5. [Sockets] Timeout sur accept() ?
    Par MikB dans le forum Développement
    Réponses: 2
    Dernier message: 30/12/2003, 17h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo