Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Outils > Forms
Forms Forum d'entraide sur Oracle Forms
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 19/03/2007, 10h59   #1
Nouveau Membre du Club
 
Inscription : octobre 2004
Messages : 92
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 92
Points : 34
Points : 34
Par défaut Problême de Verrous Externes

Bonjour a tous
j'ai un problême de verrous sous ma base 10g 10.2.0.1
J'ai des erreurs fréquentes d'acquisition de verrous pour un applicatif Forms.
J'ai des sessions bloquantes fréquentes.J'aimerais en connaitre la cause
est ce que ça peut etre du a des micro-coupures au niveau reseau ?
Comment oracle se comporte pour une session qui detient un Verrou sur des lignes d'une table et dont la connexion s'interrompe a cause d'un probleme réseau ?
Je sais ke le process PMON s'occupe de la libération des verrous pour les process ayant échoué mais j'ai fait un test en enlevant le cable réseau d'une session détenant un verrou le PMON ne detecte pas immediatement que le process a échoué et il le detient encore pendant un moment (parfois ça depasse les 5 minutes) par contre quand je kill le process (sqlplus) il libére immediatement le verrou.
Je sais ke c un peu vague mais j'aimerais avoir une idée générale , une doc si possible comment détecter et résoudre les problêmes de verrous externes

Merci
comment_ca est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2007, 11h49   #2
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
Citation:
Comment oracle se comporte pour une session qui detient un Verrou sur des lignes d'une table et dont la connexion s'interrompe a cause d'un probleme réseau ?
Cela dépend au moins de la configuration d'Oracle Net. Par défaut, les connexions ne sont pas tuées. Mais on peut configurer un timeout avec le paramètre SQLNET.EXPIRE_TIME dans sqlnet.ora

Citation:
Je sais ke c un peu vague mais j'aimerais avoir une idée générale , une doc si possible comment détecter et résoudre les problêmes de verrous externes
Une première chose à vérifier c'est qu'une session n'est pas en attente sur une autre avec les vues DBA_BLOCKERS et DBA_WAITERS.
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2007, 14h47   #3
Nouveau Membre du Club
 
Inscription : octobre 2004
Messages : 92
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 92
Points : 34
Points : 34
Merci pour ta rep pifor

En ce qui conecerne dba_waiters et dba_blockers je confirme il y'a bien des entrées dans ces vues g pas de doute la dessus je vois ça via entreprise Manager dans Sessions Bloquantes et j'ai aussi testé avec les vues.

Sinon une question concernant le expire_time:
Sa valeur par défaut c koi?
Je suppose qu'il faut aggrandir sa valeur c ça?
Est ce k'il faut qu'il soit configuré dans le sqlnet.ora coté Serveur ou client ou les deux ?

Merci
comment_ca est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2007, 15h09   #4
Rédacteur
 
Homme Salim
Développeur et DBA Oracle
Inscription : octobre 2006
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Salim
Localisation : Canada

Informations professionnelles :
Activité : Développeur et DBA Oracle

Informations forums :
Inscription : octobre 2006
Messages : 872
Points : 1 100
Points : 1 100
Bonjour,

Est ce que dans ton formulaire tu fais des updates dans d'autres tables qui sont pas incluses dans ta forme ?
salim11 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2007, 15h47   #5
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
La valeur par défaut est 0. Oui il faut augmenter la valeur et il faut le configurer seulement côté serveur et redémarrer le listener.

PS: merci de vous exprimez clairement en bon français.
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/03/2007, 09h17   #6
Membre éclairé
 
Avatar de Wurlitzer
 
Inscription : avril 2006
Messages : 465
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 465
Points : 368
Points : 368
Bon reprenons depuis le début. Tu as des locks mais avant de chercher compliqué as tu verifié le "simple".

Est tu sur que les lock sont lié a des sessions plantés. C'est peu probable que cela arrive souvent ou tu as soit des utilisateur brutaux soit un réseau pourri.

Pour moi l'hypothèse la plus probable est un problème de FK non indexe. Je m'explique si un utilisateur même a jours une colonne qui est FK et que celle ci n'est pas indexé alors Oracle lock toute la table et non pas seulement la ligne mise a jour. Et ce lock dure aussi longtemps que la transaction n'est pas pas COMMITé. Or en Forms les transactions peuvent être très longues puisque Forms fait un update dés que l'on modifie un block basé et par contre ne Commit que si on appuie sur enregistrer.

Hope this helps

PS. Je crois qu'il y a dans les scripts un script qui te permet de retrouver toutes ces FK non indéxés
Wurlitzer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/03/2007, 14h02   #7
Rédacteur
 
Homme Salim
Développeur et DBA Oracle
Inscription : octobre 2006
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Salim
Localisation : Canada

Informations professionnelles :
Activité : Développeur et DBA Oracle

Informations forums :
Inscription : octobre 2006
Messages : 872
Points : 1 100
Points : 1 100
Bonjour,

mais on peux remédier à ce problème en mettant le locking mode du block à 'DELAYED', ca veut dire il lock l'enregistrement seulement au moment de la transaction final, mais des fois il y a un autre type de lock provoqué au moment que je fasse un commit en modifiant d'autres tables exemple T1 qui figure pas dans ma forme
alors avant de modifier T1 il faut vérifier si la table T1 n'est pas utilisée par d'autres utilisateurs dans d'autres sessions
par le biais d'un curseur sur la table T1 ou un select avec l'option FOR UPDATE OF T1 no_wait.

Exmeple
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
DECLARE  
	dummy                   VARCHAR2(1);  
	could_not_lock          EXCEPTION; 
 
        /* Define Exception for ORA-00054, which occurs when an attempt */ 
        /* is made to lock an already locked record.                    */ 
	PRAGMA EXCEPTION_INIT   (could_not_lock, -54);  
BEGIN  
	SELECT 'X'   
        INTO   dummy  
	FROM   dept	/* this is the table you are trying to access */  
	WHERE rowid = :dept.rowid  
	FOR UPDATE OF deptno NOWAIT;  
 
	MESSAGE('Locked Current Row ');  
 
	EXCEPTION  
		WHEN could_not_obtain_lock THEN  
                   MESSAGE('Record locked by another user. Try Again Later');  
			RAISE FORM_TRIGGER_FAILURE;  
END;
salim11 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2007, 17h57   #8
Nouveau Membre du Club
 
Inscription : octobre 2004
Messages : 92
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 92
Points : 34
Points : 34
désolé pour le retard g t pa au bureau .

Le problême a bien été résolu a l'aide de expire_timeout dans le sqlnet.ora


Merci pour vos réponses
comment_ca 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 09h40.


 
 
 
 
Partenaires

Hébergement Web