Précédent   Forum du club des développeurs et IT Pro > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 05/12/2012, 00h19   #1
tropiko
Invité régulier
 
Inscription : novembre 2012
Messages : 83
Détails du profil
Informations forums :
Inscription : novembre 2012
Messages : 83
Points : 9
Points : 9
Par défaut Trigger deadlock alter session

Bonjour
Je voulais implémenter un trigger AFTER LOGON ON DATABASE afin d'utiliser et tester les statistiques privées (pending stats ) déjà calculées dans une session dédiée.
Le but est de tester avec les statistiques « privées » le comportement d’une application JAVA (une boîte noire) qui lance des traitements PL/SQL.
PROBLEME : DEADLOCK (ORA-4020) dès le lancement de l’application et le déclenchement du trigger permettant de faire l’alter session.
Existe-il une autre manière d’exécuter l’alter session autre que le trigger sachant que j’ai pas la main sur l’application ?
Autre détail , cette erreur ora-4020 devrait apparaître dans alert.log mais ce n'est pas le cas !!!
merci

Code :
1
2
3
4
5
6
7
8
9
CREATE OR REPLACE TRIGGER TRIGGER1
AFTER LOGON ON DATABASE
DECLARE
…
BEGIN
execute immediate 'ALTER SESSION SET optimizer_use_pending_statistics = TRUE';
INSERT INTO suivi_trace VALUES …
…
END ;
tropiko est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2012, 09h47   #2
mnitu
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 4 162
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 4 162
Points : 8 087
Points : 8 087
Ca devrait marcher. Qu’est ce que provoque le deadlock l’insert ou l’exécute immediate? Est-ce que ça passe avec seulement l’alter session ?
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2012, 20h11   #3
yong321
Membre actif
 
Yong Huang
Inscription : janvier 2010
Messages : 122
Détails du profil
Informations personnelles :
Nom : Yong Huang

Informations forums :
Inscription : janvier 2010
Messages : 122
Points : 175
Points : 175
Est-ce que trigger valide (user_objects.status)?

Il devrait y avoir un fichier de trace dans udump.
yong321 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2012, 22h43   #4
tropiko
Invité régulier
 
Inscription : novembre 2012
Messages : 83
Détails du profil
Informations forums :
Inscription : novembre 2012
Messages : 83
Points : 9
Points : 9
Par défaut deadlock

C'est l'execute immediate(alter session) suivant qui provoque le deadlock puis kill session (effectué automatiquement par Oracle) :

execute immediate 'ALTER SESSION SET optimizer_use_pending_statistics = TRUE';
tropiko est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2012, 23h24   #5
yong321
Membre actif
 
Yong Huang
Inscription : janvier 2010
Messages : 122
Détails du profil
Informations personnelles :
Nom : Yong Huang

Informations forums :
Inscription : janvier 2010
Messages : 122
Points : 175
Points : 175
Que diriez-vous "after logon on schemaname.schema" au lieu de "after logon on database"?

user_objects.status?
fichier de trace dans udump?
yong321 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2012, 09h01   #6
mnitu
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 4 162
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 4 162
Points : 8 087
Points : 8 087
Quelle version de la base utilisez vous ?
Je n'ai eu aucun problème avec le trigger suivant
Code :
1
2
3
4
5
6
7
 
SQL> r
  1  CREATE OR REPLACE TRIGGER log_db_trg
  2  after logon ON DATABASE
  3  begin
  4  execute immediate 'ALTER SESSION SET optimizer_use_pending_statistics = TRUE';
  5* end;
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2012, 22h58   #7
tropiko
Invité régulier
 
Inscription : novembre 2012
Messages : 83
Détails du profil
Informations forums :
Inscription : novembre 2012
Messages : 83
Points : 9
Points : 9
Par défaut Tracer une application multi-connexions

Le trigger est à priori valide !
Je testerai AFTER LOGON ON SCHEMA...

Existe-il une autre manière d’exécuter l’alter session autre que le trigger sachant que j’ai pas la main sur l’application ?

Autrement dit : Comment pouvoir tracer une application (boîte noire) qui se connecte à la base Oracle 11.2.0.3 via un user USER1 ?
Sachant que l'application lance séquentiellement des connexions via ce user USER1 donc plusieurs traces générées !!!
merci
tropiko est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2012, 14h16   #8
Pomalaix
Rédacteur
 
Inscription : décembre 2002
Messages : 2 676
Détails du profil
Informations personnelles :
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : décembre 2002
Messages : 2 676
Points : 4 167
Points : 4 167
Citation:
Envoyé par tropiko Voir le message
... qui provoque le deadlock puis kill session (effectué automatiquement par Oracle)...
Etes-vous sûr de ça ?
Normalement, en cas d'interblocage, Oracle annule la dernière opération de l'une des deux sessions impliquées. Il n'annule pas la transaction complète, pas plus qu'il ne tue la session.
__________________
Consultant / formateur Oracle indépendant
Certifié OCP 10g et 11g, sécurité 11g
Pomalaix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2012, 21h38   #9
yong321
Membre actif
 
Yong Huang
Inscription : janvier 2010
Messages : 122
Détails du profil
Informations personnelles :
Nom : Yong Huang

Informations forums :
Inscription : janvier 2010
Messages : 122
Points : 175
Points : 175
> Existe-il une autre manière d’exécuter l’alter session autre que le trigger sachant que j’ai pas la main sur l’application ?

Code :
exec dbms_system.set_bool_param_in_session(1234, 567, 'optimizer_use_pending_statistics', true)
yong321 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2012, 10h11   #10
Mohamed.Houri
Membre émérite
 
Homme Mohamed Houri
Inscription : mars 2010
Messages : 421
Détails du profil
Informations personnelles :
Nom : Homme Mohamed Houri
Localisation : France

Informations forums :
Inscription : mars 2010
Messages : 421
Points : 821
Points : 821
Citation:
Envoyé par Pomalaix Voir le message
Etes-vous sûr de ça ?
Normalement, en cas d'interblocage, Oracle annule la dernière opération de l'une des deux sessions impliquées. Il n'annule pas la transaction complète, pas plus qu'il ne tue la session.
Cela mérite plus de précision. Contrairement à ce que pensent certains quant au choix sensé être arbitraire de la session qui va recevoir l'erreur ora-0060, Oracle choisi la première session qui s'est mise en attente comme session victime et annule sa dernière opération

http://jonathanlewis.wordpress.com/2...29/deadlock-2/

Ensuite vous avez tout à fait raison de dire qu'Oracle ne fait pas de rollback et donc n'annule pas la transaction
__________________
Bien Respectueusement
www.hourim.wordpress.com

"Ce qui se conçoit bien s'énonce clairement"
Mohamed.Houri est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 22h57.


 
 
 
 
Partenaires

Hébergement Web