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

Oracle Discussion :

Unlock des enreg lockés sous une session inconnue


Sujet :

Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 182
    Points : 66
    Points
    66
    Par défaut Unlock des enreg lockés sous une session inconnue
    Je travaille sous Oracle et Delphi.
    Plusieurs sessions sont en cours et lock chacune un certains nombre d'enregistrements ( une session peut également en locker plusieurs ).
    J'ai une requête qui me donne certains enregistrements à délocker mais je ne sais pas comment faire.
    En effet, je ne sais pas quel est la session qui me les lock. J'ai regardé dans V$session, V$lock mais rien de bien clair pour moi.
    Je sais que les enregistrements sont lockés car si je travaille dans une session que je viens de créer, au moment ou je cherche à les locker au travers de la commande LOCK, cela me renvoit une erreur 00054 à savoir que les données sont busy et si dans cette session, je fait un unlock, rien ne se passe ( ce qui n'est pas choquant puisque mes enregistrements sont lockés dans une autre session ).
    Help.
    Merci d'avance.

  2. #2
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    Consultez les vues DBA_WAITERS et DBA_BLOCKERS pour identifier les sessions impliquées dans un verrou.
    Si elles n'existent pas, passez le script catblock.sql

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 182
    Points : 66
    Points
    66
    Par défaut
    Mes deux vues existent mais je n'ai rien dedans quand mes locks sont fait alors que dans V_$LOCKEDOBJECT j'ai des choses, à savoir deux enregistrements qui semblent correspondre au fait que j'ai locké dans deux tables des données ( plusieurs enregistrements de lockés dans chacune de ces tables mais V_$LOCKEDOBJECT semble me les regrouper - est-il possible d'avoir un détail ? ).
    Je dois faire un erreur mais je sèche ( je ne métrise pas les vues - je ne suis pas expert Oracle et loin de là ).
    Merci d'avance.

  4. #4
    Membre confirmé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 487
    Points : 455
    Points
    455
    Par défaut
    Je crois que c'est la 247ème fois que je donne ce bout de code...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
     
     
    select
      s.sid "SID",
      s.serial# "SER",
      o.object_name "Table",
      o.owner,
      s.osuser "OS User",
      s.machine "Node",
      s.terminal "Terminal",
      --p.spid "SPID",
      --s.process "CPID",
      decode (s.lockwait, null, 'Have Lock(s)', 'Waiting for <' || b.sid || '>') "Mode",
      substr (c.sql_text, 1, 150) "SQL Text"
    from v$lock l,
      v$lock d,
      v$session s,
      v$session b,
      v$process p,
      v$transaction t,
      sys.dba_objects o,
      v$open_cursor c
    where l.sid = s.sid
      and o.object_id (+) = l.id1
      and c.hash_value (+) = s.sql_hash_value
      and c.address (+) = s.sql_address
      and s.paddr = p.addr
      and d.kaddr (+) = s.lockwait
      and d.id2 = t.xidsqn (+)
      and b.taddr (+) = t.addr
      and l.type = 'TM'
    group by
      o.object_name,
      o.owner,
      s.osuser,
      s.machine,
      s.terminal,
      p.spid,
      s.process,
      s.sid,
      s.serial#,
      decode (s.lockwait, null, 'Have Lock(s)', 'Waiting for <' || b.sid || '>'),
      substr (c.sql_text, 1, 150)
    order by 
      decode (s.lockwait, null, 'Have Lock(s)', 'Waiting for <' || b.sid || '>') desc,
      o.object_name asc,
      s.sid asc

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 182
    Points : 66
    Points
    66
    Par défaut
    Merci Aline, avec cette requête j'ai fait un pas de GEANT mais il me manque juste une dernière info.
    Ta ( superbe ) requête me donne les tables sur lesquelles il y a des enregistrements lockés mais est-il possible de connaitre précisement ces enregistrements ?
    Mon but final est de délocker seulement certains de mes enregistrements lockés ( ceux à délockés me sont donnés par une autre requête ) et si oui est possible de le faire directement au moyen d'une requête.
    Merci d'avance.

  6. #6
    Membre confirmé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 487
    Points : 455
    Points
    455
    Par défaut
    Bonjour Maglight,

    cette requête te dis qui bloque qui et sur quel object.
    La seule façon de délocker, c'est soit de tuer la session bloquante, soit de demander à la personne ayant cette session de finir sa trnasaction.
    Tu n'as donc pas besoin de savoir que le blocage se situe sur le 173è enregistrment de la table machin!
    a la limite, tu n'as même pas besoin de savoir que le lock se trouve sur la table machin.
    conclusion(AMA),Le plus important, c'est de savoir qui et non pas quoi!

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 182
    Points : 66
    Points
    66
    Par défaut
    Dans mon cas, mon pb est vraiment inverse, le plus important pour moi est bien quoi avant qui puisque pour cette personne, je ne veux délocker que certains enregistrements qu'il a locké et non pas la totalité.

    Comme je travaille sous delphi, j'ai une requête qui me donne les enregistrements qui sont lockés ( la preuve est que si je cherche à les locker depuis une autre session, je n'y arrive pas ) mais mon unlock ne fait rien ( pas de message d'erreur mais je n'arrive toujours pas à sa suite à locker mes enregistrements depuis une autre session ).
    C'est pourquoi, j'espérai pouvoir avoir toutes ces infos directement dans Oracle et déclocker directement dans Oracle en modifiant une valeur ou des enregistrements.

  8. #8
    Membre confirmé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 487
    Points : 455
    Points
    455
    Par défaut
    Citation Envoyé par Maglight
    Dans mon cas, mon pb est vraiment inverse, le plus important pour moi est bien quoi avant qui puisque pour cette personne, je ne veux délocker que certains enregistrements qu'il a locké et non pas la totalité.
    Je suis désolée de te contredire, mais je pense que tu poses vraiment mal le problème.

    Allons dans ton sens.
    Tu sais quelle ligne de ta table est lockée.
    Que peux tu faire?


    Rien de plus que je t'ai dis tout à l'heure.
    La commande delocke n'existe pas (n'as pas de sens non plus).



    La seule solution est de résoudre ta transaction (commit ou rollbaxk).
    Tu peus ensuite le faire de mainère non autoritaire en demandant à la personne qui blocque de la finir ou de manière autoritaire, si tu en as les moyens évidement, en le tuant (rollback automatique)

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/09/2007, 17h50
  2. Obtenir la liste des processus tournant sous une base oracle
    Par mikawell3000 dans le forum Oracle
    Réponses: 8
    Dernier message: 26/07/2007, 15h18
  3. Message d'erreur à cause d'une session : inconnu
    Par michka999 dans le forum Langage
    Réponses: 17
    Dernier message: 24/08/2006, 12h39
  4. affichage des enreg. dans sous-formulaire
    Par OBIWAN64 dans le forum Access
    Réponses: 5
    Dernier message: 27/04/2006, 08h10
  5. Unlock des enreg lockés sous une session inconnue
    Par Maglight dans le forum Bases de données
    Réponses: 1
    Dernier message: 15/02/2006, 16h44

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