2009-08-05 3 views
2

Je peux mettre à jour certaines tables très bien, mais une certaine table que j'ai ne peut pas être mise à jour par mon application ASP.NET ou SQLPLUS. Les deux pendent indéfiniment. Je dois quitter SQLPLUS de force. J'ai mise à jour statments à la fois dans les objets standards OracleCommand: l'exécution d'unOracle UPDATEs à certaine table se bloquer indéfiniment

cmd.ExecuteNonQuery(); 

mais je dois aussi asp: SQLDataSources liés à un GridView. Rien ne semble fonctionner. Il y a une question similaire ici: Oracle Update Hangs. J'ai l'idée approximative que quelque chose doit avoir une sorte de verrou sur cette table, mais je ne sais pas comment l'enlever ou même le trouver d'ailleurs. Toute aide serait grandement appréciée.

Je cours Oracle 9i EE 9.2.

Répondre

6

Il y a des chances qu'une autre session a travail UNCOMMITED (c.-à-jour ou suppressions)

Vous pouvez trouver quelle session (s) cela pourrait être avec ...

select s1.username || '@' || s1.machine || ' (SID=' || s1.sid || ') is blocking ' 
    || s2.username || '@' || s2.machine || ' (SID=' || s2.sid || ') ' AS blocking_status 
    from v$lock l1, v$session s1, v$lock l2, v$session s2 
    where s1.sid=l1.sid and s2.sid=l2.sid 
    and l1.BLOCK=1 and l2.request > 0 
    and l1.id1 = l2.id1 
    and l2.id2 = l2.id2 

EDIT:

Les chances sont que vous avez un peu de code quelque part avec un COMMIT manquant.

Vérifiez l'identifiant de session fautif dans V $ SESSION et voyez si vous pouvez déterminer quel code il pourrait être.

Pour vous aider à trouver le code rouge (en supposant que c'est ce qu'il est), vous pouvez trouver la dernière commande SQL a été par une session en utilisant ...

select * 
from v_$sqltext, v_$session 
where v_$session.prev_hash_value = v_$sqltext.hash_value 
and [some filter on v_$session] 
+0

Très cool, merci. Maintenant, il renvoie 6 lignes avec SID 28 bloquant 6 SID différents. Comment puis-je les débloquer? =) – Chet

+0

Si vous ne pouvez pas valider/annuler ces sessions, vous pouvez les tuer en utilisant ALTER SYSTEM KILL SESSION 'session-id, session-serial'. Veillez à ce que vous sachiez exactement ce que vous tuez et évitez de le faire si vous pouvez simplement mettre fin à la transaction qui est à l'origine du blocage –

Questions connexes