Bonjour, je dois avoir un lock sur un procédure car impossible de la modifier, supprimer ..
Comment supprimer cette procedure ou le lock sur celle ci ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 drop procedure p_toto;
Bonjour, je dois avoir un lock sur un procédure car impossible de la modifier, supprimer ..
Comment supprimer cette procedure ou le lock sur celle ci ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 drop procedure p_toto;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SQL> drop procedure p_toto; drop procedure p_toto * ERREUR à la ligne 1 : ORA-04021: temporisation pendant attente de verrouillage objet SCHEMA.P_TOTO
Bonjour ,
1) Détectez le lock :
2) killez la session
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT session_id , oracle_username , os_user_name FROM V$LOCKED_OBJECT WHERE object_id =( SELECT object_id FROM dba_objects WHERE object_name ='obejct_name' AND owner ='owner') ;
Jaouad
Et là c'est le drame
Et poutant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 SQL> SELECT session_id , oracle_username , os_user_name FROM V$LOCKED_OBJECT 2 WHERE object_id =( SELECT object_id FROM dba_objects WHERE object_name ='P_TOTO' 3 AND owner ='SCHEMA') ; aucune ligne sélectionnée SQL>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 SQL> SELECT object_id FROM dba_objects WHERE object_name ='P_TOTO' 2 AND owner ='SCHEMA'; OBJECT_ID ---------- 9735 SQL>
essaye de lancer le script :
Code : Sélectionner tout - Visualiser dans une fenêtre à part $ORACLE_HOME/rdbms/admin/catblock.sql
Que donne :
Jaouad
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT * FROM v$access WHERE object =package ;
Envoyé par Jaouad
qd à
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SID OWNER OBJECT ---------- ---------------------------------------------------------------- ------------------------ 22 SCHEMA P_TOTO
Comme je suis pas DBA j'ai pas ce scripts peux tu me l'envoyer ?Envoyé par bouyao
il vaut mieux demander au DBA dans ce cas, je crains qu'il voit d'un mauvais oeil que quelqu'un intervienne sur la base sans son accord![]()
le script est :
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 select /*+ ordered */ w1.sid waiting_session, h1.sid holding_session, w.kgllktype lock_or_pin, w.kgllkhdl address, decode(h.kgllkmod, 0, 'None', 1, 'Null', 2, 'Share', 3, 'Exclusive', 'Unknown') mode_held, decode(w.kgllkreq, 0, 'None', 1, 'Null', 2, 'Share', 3, 'Exclusive', 'Unknown') mode_requested from dba_kgllock w, dba_kgllock h, v$session w1, v$session h1 where (((h.kgllkmod != 0) and (h.kgllkmod != 1) and ((h.kgllkreq = 0) or (h.kgllkreq = 1))) and (((w.kgllkmod = 0) or (w.kgllkmod= 1)) and ((w.kgllkreq != 0) and (w.kgllkreq != 1)))) and w.kgllktype = h.kgllktype and w.kgllkhdl = h.kgllkhdl and w.kgllkuse = w1.saddr and h.kgllkuse = h1.saddr /
après de kk recherche j'ai trouvé : le scripts créé une vue dba_waiters donc
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 SQL> select * from dba_waiters; aucune ligne sélectionnée SQL>Patience on vas trouver
Je suis bien d'accord mais il est en vacances, je crois que l'on vas être obligé de de créer la même proc sous un autre nom en attendantEnvoyé par Fred_D
pour info :
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 SQL> select /*+ ordered */ w1.sid waiting_session, 2 h1.sid holding_session, 3 w.kgllktype lock_or_pin, 4 w.kgllkhdl address, 5 decode(h.kgllkmod, 0, 'None', 1, 'Null', 2, 'Share', 3, 'Exclusive', 6 'Unknown') mode_held, 7 decode(w.kgllkreq, 0, 'None', 1, 'Null', 2, 'Share', 3, 'Exclusive', 8 'Unknown') mode_requested 9 from dba_kgllock w, dba_kgllock h, v$session w1, v$session h1 10 where 11 (((h.kgllkmod != 0) and (h.kgllkmod != 1) 12 and ((h.kgllkreq = 0) or (h.kgllkreq = 1))) 13 and 14 (((w.kgllkmod = 0) or (w.kgllkmod= 1)) 15 and ((w.kgllkreq != 0) and (w.kgllkreq != 1)))) 16 and w.kgllktype = h.kgllktype 17 and w.kgllkhdl = h.kgllkhdl 18 and w.kgllkuse = w1.saddr 19 and h.kgllkuse = h1.saddr 20 / aucune ligne sélectionnée SQL>
Ca ce peut un verrou dans le shared pool
Pour cela
Mai je prefere qu'un dba fasse cette commande
Code : Sélectionner tout - Visualiser dans une fenêtre à part alter system flush shared_pool;
Bon merci pour toutes ces précisions on vas donc faire comme ca et froisser personne !![]()
cela évitera les![]()
![]()
![]()
kk1 peux m'expliquer le
Reuse settings ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part ALTER FUNCTION [schema.]function COMPILE [DEBUG][REUSE SETTINGS]
La session 22 pose problémeEnvoyé par sygale
Kill la est ton probléme serat résolu
Jaouad
J'ai killé la session 22
elle est marquée KILLED mais tjs rien à faire sur la procedure !![]()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 SQL> SELECT SID,SERIAL#,AUDSID,STATUS,MACHINE,PROGRAM,USERNAME 2 FROM V$SESSION where sid = 22; SID SERIAL# AUDSID STATUS ---------- ---------- ---------- -------- 22 1903 499403 KILLED
Te voici dans le probléme des sessions qui sont marqués killed for ever
Il existe deux solutions :
- Arrêt/relance de la base
- Dropper le processus
Tu es sous quelle plateforme ?
Partager