Bonjour à tous.
Problème qui me semble insoluble au moment présent.
Un utilisateur <USER> héberge une procédure stockée qui permet d'envoyer des mels à différentes adresses mels. Cette procédure fonctionne depuis des mois, or depuis deux jours pas de réponse lorsque l'on sollicite la procédure.
Après quelques essais, j'ai isolé la cause du problème, il se situe au niveau de la création de la connexion ; utl_smtp.open_connection.
J'ai donc écris un morceau de code pour simplifier sa résolution.
Quand je l'exécute, même résultat, cela boucle sans retourner la moindre erreur, même après 30 mn.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 set serveroutput on ; declare l_connection utl_smtp.connection; begin DBMS_OUTPUT.PUT_LINE('demande ouverture smtp'); l_connection := utl_smtp.open_connection('smtp.<domaine>', '25'); DBMS_OUTPUT.PUT_LINE('ouverture smtp OK'); --Cloture de la SMTP UTL_SMTP.QUIT(l_connection); DBMS_OUTPUT.PUT_LINE('fermeture smtp OK'); end ;
J'ai pensé aux ACL qui aurait pu expliquer ce comportement.
Résultats :
Cela semblant OK, j'ai testé mon bout de code en SYS, C'est Ok pour la connexion SMTP !!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 select * from dba_network_acls; qui retourne smtp.<domaine> 25 25 /sys/acls/mail_acces.xml 0000000080002896 SYS -- -------------------------------------------------- SELECT acl, principal, privilege, is_grant, TO_CHAR(start_date, 'DD-MON-YYYY') AS start_date, TO_CHAR(end_date, 'DD-MON-YYYY') AS end_date FROM dba_network_acl_privileges /sys/acls/mail_acces.xml <USER> connect true
Donc, problème de droits pour moi.
En desespoir de cause j'ai donc détruit l'ACL pour le recréer.
Malgré cette réécriture, le problème persiste, si quelqu'un a une piste je suis preneur.
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 BEGIN -- MISE EN PLACE DES ACL des serveurs MAIL DBMS_OUTPUT.PUT_LINE('Création ACL pour le SMTP DEBUT - ' || TO_CHAR(SYSDATE,'HH24:MI:SS') ); SELECT CASE WHEN EXISTS ( SELECT DISTINCT ACL FROM DBA_NETWORK_ACLS WHERE ACL LIKE '%mail_acces.xml' ) THEN 1 ELSE 0 END INTO ACLEXIST FROM DUAL; IF (ACLEXIST = 1) THEN DBMS_OUTPUT.PUT_LINE('Suppression de l''ACL - mail_acces.xml -'); --Suppression du fichier ACL FTP DBMS_NETWORK_ACL_ADMIN.DROP_ACL( acl => 'mail_acces.xml'); END IF; -- ATTRIBUTION DES DROITS ACL à <USER> pour envoi de mel sur le SMTP DBMS_NETWORK_ACL_ADMIN.CREATE_ACL ( acl => 'mail_acces.xml' , description => 'Permissions pour accéder au serveur SMTP.' , principal => 'SYS' , is_grant => TRUE , privilege => 'connect' ); DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL ( acl => 'mail_acces.xml' , host => 'smtp.<domaine>' , lower_port => 25 , upper_port => 25 ); DBMS_NETWORK_ACL_ADMIN.add_privilege ( acl => 'mail_acces.xml' , principal => <USER> , is_grant => TRUE , privilege => 'connect' ); DBMS_OUTPUT.PUT_LINE('Création ACL pour le SMTP FIN - ' || TO_CHAR(SYSDATE,'HH24:MI:SS') ); END ;
Bonne soirée à tous.
Partager