OVH Cloud OVH Cloud

SQLDMO et lib Perls SENDMAIL et SMTP

10 réponses
Avatar
Brigitte
Bonjour,

l'utilisation des lib perl d'envoi de mail est incompatible avec SQL DMO.
Le script reste bloqué.
Le comportement est le meme pour ces 2 lib :
- SendMail
- Net::SMTP

Quelle librairie de gestion de mail perl serait compatible avec SQL DMO pour
SQL Server 2000 ?

Merci

Brigitte

10 réponses

Avatar
Rudi Bruchez
Brigitte a écrit:

l'utilisation des lib perl d'envoi de mail est incompatible avec SQL DMO.
Le script reste bloqué.
Le comportement est le meme pour ces 2 lib :
- SendMail
- Net::SMTP



Bonjour,

Il n'y a pas d'incompatibilité entre le DMO et des librairies Perl. SQL-DMO
est une suite d'objets COM, et n'a pas d'incidence sur la façon dont les
libraires Perl fonctionnent.

Ci-dessous un code d'exemple, testé avec ActivePerl 5.8.7, qui ne pose pas
de problème chez moi.

#--- code start ---
use strict;
use Win32::OLE 'in';
use Win32::OLE::Const 'Microsoft SQLDMO';
use Net::SMTP;

my $serverName = 'myServer';
my $SMTPServer = 'smtp.myserver.com';
my $recipients = [ '' ];
my $sender = '';
my $sub = 'test mail DMO';
my ($to, $from) = ('',
'' );
my $msg;

my @confs = ();

my $server = Win32::OLE->new('SQLDMO.SQLServer2')
or die "erreur de creation de l'objet SQLDMO";

my $smtp = Net::SMTP->new($SMTPServer)
or die "erreur de connexion au serveur SMTP $SMTPServer.";

$server->{LoginSecure} = 1;
$server->{LoginTimeout} = 30;

$server->connect($serverName);
! Win32::OLE->LastError() or
die "erreur de connexion a $serverName.";

foreach my $conf (in($server->Configuration->ConfigValues())) {
push @confs, $conf->{name};
}
$server->DisConnect();

$msg = join "n", @confs;

$smtp->mail($sender);
$smtp->to(@$recipients);
$smtp->data();
$smtp->datasend("Subject: $subn");
$smtp->datasend("To: $ton");
$smtp->datasend("From: $fromn");
$smtp->datasend("n");
$smtp->datasend("$msgn");
$smtp->datasend() or
die "erreur d'envoi au serveur SMTP";
$smtp->quit or
die "erreur de fermeture de connexion au serveur SMTP";

#--- code end ---

--
Rudi Bruchez
Consultant indépendant
modélisation, administration, optimisation,
Solutions MS SQL Server et informatique libre.
MCDBA, SCJP2
http://www.babaluga.com/
Avatar
Brigitte
J'ai utilisé tel quel votre script, mais le probleme persiste

1)
J'ai adapté votre script de la sorte ( visible ci-dessous ). Si la machine
SQLD01 qui héberge le SQL Server est stoppé, le script est bloqué
indéfiniement sur la commande connect et ne rend jamais la main

use strict;
use Win32::OLE 'in';
use Win32::OLE::Const 'Microsoft SQLDMO';
use Net::SMTP;

my $serverName = 'sqld01TESTDBA';
my $SMTPServer = 'smtp.prod.fr.hsbc';
my $recipients = [ '' ];
my $sender = '';
my $sub = 'test mail DMO';
my ($to, $from) = ('',
'' );
my $msg;

print "before creating SQLDMO object n" ;

my $server = Win32::OLE->new('SQLDMO.SQLServer2')
or die "erreur de creation de l'objet SQLDMO";

print "before creating SMTP object n" ;


my $smtp = Net::SMTP->new($SMTPServer)
or die "erreur de connexion au serveur SMTP $SMTPServer.";

$server->{LoginSecure} = 1;
$server->{LoginTimeout} = 1;

print "before connect n" ;

$server->connect($serverName);
if ( Win32::OLE->LastError() )
{
print "erreur de connexion a $serverName. Win32::OLE::LastError()" .
Win32::FormatMessage( Win32::OLE::LastError() );
}

$msg = "Test mailn";

$smtp->mail($sender);
$smtp->to(@$recipients);
$smtp->data();
$smtp->datasend("Subject: $subn");
$smtp->datasend("To: $ton");
$smtp->datasend("From: $fromn");
$smtp->datasend("n");
$smtp->datasend("$msgn");

print "before sending object n" ;


if ( ! $smtp->datasend() )
{
print "erreur d'envoi au serveur SMTPn";
}

print "before quitting smtp n" ;
if ( ! $smtp->quit )
{
print "erreur de fermeture de connexion au serveur SMTPn";
}

print "before disconnect n" ;

$server->DisConnect();


2) Par contre, si j'enléve tout le code SMTP, la commande connect rend bien
la main au bout de 30 seondes avec un status d'echec ( alors que le
LoginTimeout et de 1 seconde mais cela est un détail )

Voici le code du second script :
use strict;
use Win32::OLE 'in';
use Win32::OLE::Const 'Microsoft SQLDMO';

my $serverName = 'sqld01TESTDBA';

print "before creating SQLDMO object n" ;

my $server = Win32::OLE->new('SQLDMO.SQLServer2')
or die "erreur de creation de l'objet SQLDMO";

$server->{LoginSecure} = 1;
$server->{LoginTimeout} = 1;

print "before connect n" ;

$server->connect($serverName);
if ( Win32::OLE->LastError() )
{
print "erreur de connexion a $serverName. Win32::OLE::LastError()" .
Win32::FormatMessage( Win32::OLE::LastError() );
}

print "before disconnect n" ;

$server->DisConnect();

Merci

Brigitte

"Rudi Bruchez" <"rudi#nospam#[at]babaluga" a écrit :

Brigitte a écrit:

> l'utilisation des lib perl d'envoi de mail est incompatible avec SQL DMO.
> Le script reste bloqué.
> Le comportement est le meme pour ces 2 lib :
> - SendMail
> - Net::SMTP

Bonjour,

Il n'y a pas d'incompatibilité entre le DMO et des librairies Perl. SQL-DMO
est une suite d'objets COM, et n'a pas d'incidence sur la façon dont les
libraires Perl fonctionnent.

Ci-dessous un code d'exemple, testé avec ActivePerl 5.8.7, qui ne pose pas
de problème chez moi.

#--- code start ---
use strict;
use Win32::OLE 'in';
use Win32::OLE::Const 'Microsoft SQLDMO';
use Net::SMTP;

my $serverName = 'myServer';
my $SMTPServer = 'smtp.myserver.com';
my $recipients = [ '' ];
my $sender = '';
my $sub = 'test mail DMO';
my ($to, $from) = ('',
'' );
my $msg;

my @confs = ();

my $server = Win32::OLE->new('SQLDMO.SQLServer2')
or die "erreur de creation de l'objet SQLDMO";

my $smtp = Net::SMTP->new($SMTPServer)
or die "erreur de connexion au serveur SMTP $SMTPServer.";

$server->{LoginSecure} = 1;
$server->{LoginTimeout} = 30;

$server->connect($serverName);
! Win32::OLE->LastError() or
die "erreur de connexion a $serverName.";

foreach my $conf (in($server->Configuration->ConfigValues())) {
push @confs, $conf->{name};
}
$server->DisConnect();

$msg = join "n", @confs;

$smtp->mail($sender);
$smtp->to(@$recipients);
$smtp->data();
$smtp->datasend("Subject: $subn");
$smtp->datasend("To: $ton");
$smtp->datasend("From: $fromn");
$smtp->datasend("n");
$smtp->datasend("$msgn");
$smtp->datasend() or
die "erreur d'envoi au serveur SMTP";
$smtp->quit or
die "erreur de fermeture de connexion au serveur SMTP";

#--- code end ---

--
Rudi Bruchez
Consultant indépendant
modélisation, administration, optimisation,
Solutions MS SQL Server et informatique libre.
MCDBA, SCJP2
http://www.babaluga.com/



Avatar
Rudi Bruchez
Brigitte a écrit:

J'ai adapté votre script de la sorte ( visible ci-dessous ). Si la machine
SQLD01 qui héberge le SQL Server est stoppé, le script est bloqué
indéfiniement sur la commande connect et ne rend jamais la main



Intéressant. Et que se passe-t-il si vous créez l'objet SMTP après
l'ouverture de la connexion à SQL-DMO ?
QQch comme ceci :

# --------- extrait du code ----------
$server->connect($serverName);
if ( Win32::OLE->LastError() )
{
print "erreur de connexion a $serverName. Win32::OLE::LastError()" .
Win32::FormatMessage( Win32::OLE::LastError() );
}

my $smtp = Net::SMTP->new($SMTPServer)
or die "erreur de connexion au serveur SMTP $SMTPServer.";
# ------------------------------------


--
Rudi Bruchez
Consultant indépendant
modélisation, administration, optimisation,
Solutions MS SQL Server et informatique libre.
MCDBA, SCJP2
http://www.babaluga.com/
Avatar
Brigitte
OK signifie rend la main au bout de 30 secondes avec status d'erreur
NOK signifie ne rend jamais la main

Scénario 1
use Net::SMTP
Connexion DMO OK
Envoi de mail
Seconde Connexion DMO NOK !!

Scénario 2
use Net::SMTP
my $smtp = Net::SMTP->new($SMTPServer)
Connexion DMO NOK !!

Conclusion il suffit de faire un new sur Net::SMTP pour bloquer les appel de
connexion SQL DMO sur machine stoppée

"Rudi Bruchez" <"rudi#nospam#[at]babaluga" a écrit :

Brigitte a écrit:

> J'ai adapté votre script de la sorte ( visible ci-dessous ). Si la machine
> SQLD01 qui héberge le SQL Server est stoppé, le script est bloqué
> indéfiniement sur la commande connect et ne rend jamais la main

Intéressant. Et que se passe-t-il si vous créez l'objet SMTP après
l'ouverture de la connexion à SQL-DMO ?
QQch comme ceci :

# --------- extrait du code ----------
$server->connect($serverName);
if ( Win32::OLE->LastError() )
{
print "erreur de connexion a $serverName. Win32::OLE::LastError()" .
Win32::FormatMessage( Win32::OLE::LastError() );
}

my $smtp = Net::SMTP->new($SMTPServer)
or die "erreur de connexion au serveur SMTP $SMTPServer.";
# ------------------------------------


--
Rudi Bruchez
Consultant indépendant
modélisation, administration, optimisation,
Solutions MS SQL Server et informatique libre.
MCDBA, SCJP2
http://www.babaluga.com/



Avatar
Rudi Bruchez
Brigitte a écrit:

Conclusion il suffit de faire un new sur Net::SMTP pour bloquer les appel de
connexion SQL DMO sur machine stoppée



Bonjour,

Donc si je comprends bien, pour régler (de manière insatisfaisante, mais
bon) ton problème, tu dois éviter dans ton code d'ouvrir une connexion DMO
lorsqu'une instance de Net::SMTP est créé. Si par exemple dans :

Scénario 1
use Net::SMTP
Connexion DMO OK
Envoi de mail
Seconde Connexion DMO NOK !!

Tu fais :

Scénario 1
use Net::SMTP
Connexion DMO OK
Envoi de mail
$smtp->quit(); # ou undef($smtp)
Seconde Connexion DMO ???

Qu'est-ce que ça donne ?

Une possibilité est qu'il se passe quelque chose au niveau de la connexion
réseau, qui empêche Perl ou le DMO de recevoir une notification
d'impossibilité de connexion. Est-ce que le serveur SMTP est sur la même
machine que le serveur SQL ?
Il serait peut-être intéressant de regarder ce qui se passe au niveau de la
couche TCP, sur les ports TCP 1433, 25 (SMTP), et udp 1434, par exemple
avec TDIMon http://www.sysinternals.com/Utilities/TdiMon.html ou Ethereal.

J'ai vu dans ton code que tu te connectes à une instance nommée. Pour
obtenir cette instance nommée, il y a aussi une communication avec le port
UDP 1434 sur le serveur (il y a un listener service qui retourne les infos
d'instance nommée sur ce port), donc ceci joue peut-être également. Qu'en
est-il d'une instance par défaut ?

A propos, as-tu plus d'informations si tu exécutes ton script avec perl -W
?

--
Rudi Bruchez
Consultant indépendant
modélisation, administration, optimisation,
Solutions MS SQL Server et informatique libre.
MCDBA, SCJP2
http://www.babaluga.com/
Avatar
Brigitte
Bonjour,


Voici la réponse à vos questions :

1) Il est vrai que le problème ne se produit pas pour les instances par défaut

2) Toute tentative de connexion DMO sur machine stoppée est bloquée meme si
je fais un quit apres l'envoi d'un mail.

3) En fait il suffit que je fasse appel à l'instruction
Net::SMTP->new($SMTPServer) pour bloquer toute tentative de connexion
ultérieure sur machine stoppée. Je ne connais pas d'API du type delete sur
l'objet SMTP

4) Les traces TDI montrent que ca bloque effectivememnt sur le port UDP 1434


1° Cas normal :

0.01027365 perl.exe:2340 85766B88 TDI_SEND_DATAGRAM UDP:0.0.0.0:1549 141.33.152.35:1434 SUCCESS Length:9
1.53912702 perl.exe:2340 85766B88 TDI_SET_EVENT_HANDLER UDP:0.0.0.0:1549 SUCCESS Datagram Receive Event: NULL
1.53914117 perl.exe:2340 85766B88 TDI_SET_EVENT_HANDLER UDP:0.0.0.0:1549 SUCCESS ErrorEx Event: NULL
1.53915065 perl.exe:2340 85766B88 TDI_SET_EVENT_HANDLER UDP:0.0.0.0:1549 SUCCESS Error Event: NULL
1.53916951 perl.exe:2340 85766B88 IRP_MJ_CLEANUP UDP:0.0.0.0:1549 SUCCESS
1.53918506 perl.exe:2340 85766B88 IRP_MJ_CLOSE UDP:0.0.0.0:1549 SUCCESS
1.53954558 perl.exe:2340 857AD3E8 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
1.53958130 perl.exe:2340 857AD3E8 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
1.53961803 perl.exe:2340 852F9088 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
1.53965096 perl.exe:2340 857AD3E8 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
1.53967416 perl.exe:2340 857AD3E8 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
1.53971038 perl.exe:2340 852F9088 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
1.53972688 perl.exe:2340 852F9088 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
1.53974349 perl.exe:2340 852F9088 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
1.53976041 perl.exe:2340 852F9088 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
1.53979025 perl.exe:2340 852F9088 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
1.53980606 perl.exe:2340 852F9088 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
1.53982229 perl.exe:2340 852F9088 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
1.53984739 perl.exe:2340 852F9088 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
1.53999959 perl.exe:2340 857AD3E8 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
1.54002405 perl.exe:2340 857AD3E8 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
1.54005735 perl.exe:2340 852F9088 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
1.54008400 perl.exe:2340 857AD3E8 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
1.54010724 perl.exe:2340 857AD3E8 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
1.54014128 perl.exe:2340 852F9088 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
1.54015772 perl.exe:2340 852F9088 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
1.54017408 perl.exe:2340 852F9088 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
1.54019051 perl.exe:2340 852F9088 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
1.54021461 perl.exe:2340 852F9088 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
1.54023050 perl.exe:2340 852F9088 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
1.54024666 perl.exe:2340 852F9088 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
1.54026960 perl.exe:2340 852F9088 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
1.54133753 System:8 859A12C8 TDI_SEND_DATAGRAM UDP:141.33.98.36:137 141.33.148.14:137 SUCCESS Length:50
1.54189676 System:8 859A12C8 TDI_SEND_DATAGRAM UDP:141.33.98.36:137 141.33.150.14:137 SUCCESS Length:50
1.55469745 System:8 859A12C8 TDI_SEND_DATAGRAM UDP:141.33.98.36:137 141.33.99.255:137 SUCCESS Length:50
2.30472624 System:8 859A12C8 TDI_SEND_DATAGRAM UDP:141.33.98.36:137 141.33.99.255:137 SUCCESS Length:50
3.05471210 System:8 859A12C8 TDI_SEND_DATAGRAM UDP:141.33.98.36:137 141.33.99.255:137 SUCCESS Length:50
3.80585286 System:8 8520C4A8 IRP_MJ_CREATE TCP:Connection
obj SUCCESS Context:0x856B3E08
3.80587422 System:8 8520C4A8 TDI_ASSOCIATE_ADDRESS TCP:Connection
obj SUCCESS TCP:0.0.0.0:445
3.80589004 System:8 8520C4A8 IRP_MJ_DEVICE_CONTROL TCP:0.0.0.0:445 SUCCESS IOCTL_TCP_SET_INFORMATION_EX
3.80593704 System:8 8538C3E8 IRP_MJ_CREATE TCP:Connection
obj SUCCESS Context:0x850FFE48
3.80596121 System:8 85123C48 IRP_MJ_CREATE TCP:0.0.0.0:0 SUCCESS Address
Open
3.80599586 System:8 85123C48 TDI_SET_EVENT_HANDLER TCP:0.0.0.0:1550 SUCCESS Error Event
3.80600343 System:8 85123C48 TDI_SET_EVENT_HANDLER TCP:0.0.0.0:1550 SUCCESS Receive Event
3.80601029 System:8 85123C48 TDI_SET_EVENT_HANDLER TCP:0.0.0.0:1550 SUCCESS Disconnect Event
3.80601864 System:8 8538C3E8 TDI_ASSOCIATE_ADDRESS TCP:Connection
obj SUCCESS TCP:0.0.0.0:1550
3.80603185 System:8 8538C3E8 IRP_MJ_DEVICE_CONTROL TCP:0.0.0.0:1550 SUCCESS IOCTL_TCP_SET_INFORMATION_EX
3.80605251 System:8 8520C4A8 IRP_MJ_CLEANUP TCP:0.0.0.0:445 SUCCESS
3.80606342 System:8 8520C4A8 IRP_MJ_CLOSE TCP:0.0.0.0:445 SUCCESS
3.80645135 System:8 8542F828 IRP_MJ_CREATE TCP:Connection
obj SUCCESS Context:0x856B3E08
3.80648495 System:8 8542F828 TDI_ASSOCIATE_ADDRESS TCP:Connection
obj SUCCESS TCP:141.33.98.36:139
3.80649954 System:8 8542F828 IRP_MJ_DEVICE_CONTROL TCP:141.33.98.36:139 SUCCESS IOCTL_TCP_SET_INFORMATION_EX
3.80654346 System:8 85266028 IRP_MJ_CREATE TCP:Connection
obj SUCCESS Context:0x858A76A8
3.80656682 System:8 850D2208 IRP_MJ_CREATE TCP:141.33.98.36:0 SUCCESS Address Open
3.80659847 System:8 850D2208 TDI_SET_EVENT_HANDLER TCP:141.33.98.36:1551 SUCCESS Error Event
3.80660607 System:8 850D2208 TDI_SET_EVENT_HANDLER TCP:141.33.98.36:1551 SUCCESS Receive Event
3.80661304 System:8 850D2208 TDI_SET_EVENT_HANDLER TCP:141.33.98.36:1551 SUCCESS Disconnect Event
3.80662140 System:8 85266028 TDI_ASSOCIATE_ADDRESS TCP:Connection
obj SUCCESS TCP:141.33.98.36:1551
3.80663421 System:8 85266028 IRP_MJ_DEVICE_CONTROL TCP:141.33.98.36:1551 SUCCESS IOCTL_TCP_SET_INFORMATION_EX
3.80665444 System:8 8542F828 IRP_MJ_CLEANUP TCP:141.33.98.36:139 SUCCESS
3.80666517 System:8 8542F828 IRP_MJ_CLOSE TCP:141.33.98.36:139 SUCCESS
3.80668789 System:8 859A12C8 TDI_SEND_DATAGRAM UDP:141.33.98.36:137 141.33.148.14:137 SUCCESS Length:50
3.80710841 System:8 859A12C8 TDI_SEND_DATAGRAM UDP:141.33.98.36:137 141.33.150.14:137 SUCCESS Length:50
3.80830105 System:8 85266028 TDI_CONNECT TCP:141.33.98.36:1551 141.33.152.35:139 TIMEOUT-106
8.55478888 System:8 8538C3E8 TDI_CONNECT TCP:0.0.0.0:1550 141.33.152.35:445 TIMEOUT-110
26.77360798 System:8 85266028 IRP_MJ_CLEANUP TCP:141.33.98.36:1551 SUCCESS
26.77362199 System:8 85266028 IRP_MJ_CLOSE TCP:141.33.98.36:1551 SUCCESS
26.77363303 System:8 850D2208 IRP_MJ_CLEANUP TCP:141.33.98.36:1551 SUCCESS
31.47680275 System:8 8538C3E8 IRP_MJ_CLEANUP TCP:0.0.0.0:1550 SUCCESS
31.47681622 System:8 8538C3E8 IRP_MJ_CLOSE TCP:0.0.0.0:1550 SUCCESS
31.47682604 System:8 85123C48 IRP_MJ_CLEANUP TCP:0.0.0.0:1550 SUCCESS
31.48083650 perl.exe:2340 857AD3E8 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
31.48088264 perl.exe:2340 857AD3E8 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
31.48092351 perl.exe:2340 852F9088 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
31.48095718 perl.exe:2340 857AD3E8 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
31.48098257 perl.exe:2340 857AD3E8 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
31.48102164 perl.exe:2340 852F9088 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
31.48104070 perl.exe:2340 852F9088 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
31.48105947 perl.exe:2340 852F9088 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
31.48107873 perl.exe:2340 852F9088 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
31.48111179 perl.exe:2340 852F9088 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
31.48112958 perl.exe:2340 852F9088 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
31.48114844 perl.exe:2340 852F9088 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
31.48117504 perl.exe:2340 852F9088 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
31.48132307 perl.exe:2340 857AD3E8 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
31.48134909 perl.exe:2340 857AD3E8 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
31.48138437 perl.exe:2340 852F9088 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
31.48141198 perl.exe:2340 857AD3E8 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
31.48143702 perl.exe:2340 857AD3E8 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
31.48147309 perl.exe:2340 852F9088 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
31.48149156 perl.exe:2340 852F9088 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
31.48150998 perl.exe:2340 852F9088 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
31.48152865 perl.exe:2340 852F9088 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
31.48157239 perl.exe:2340 852F9088 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
31.48158990 perl.exe:2340 852F9088 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
31.48160795 perl.exe:2340 852F9088 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
31.48163191 perl.exe:2340 852F9088 IRP_MJ_DEVICE_CONTROL TCP:Control
obj SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
31.48252005 SERVICES.EXE:220 852FB428 IRP_MJ_CREATE UDP:0.0.0.0:0 SUCCESS Address Open
31.48256902 SERVICES.EXE:220 852FB428 TDI_SET_EVENT_HANDLER UDP:0.0.0.0:1552 SUCCESS Error Event
31.48258100 SERVICES.EXE:220 852FB428 TDI_SET_EVENT_HANDLER UDP:0.0.0.0:1552 SUCCESS Datagram Receive Event
31.48259062 SERVICES.EXE:220 852FB428 TDI_SET_EVENT_HANDLER UDP:0.0.0.0:1552 SUCCESS ErrorEx Event
31.48259978 SERVICES.EXE:220 852FB428 TDI_QUERY_INFORMATION UDP:0.0.0.0:1552 SUCCESS Query Address
31.48262616 SERVICES.EXE:220 852FB428 TDI_SEND_DATAGRAM UDP:0.0.0.0:1552 141.33.148.6:53 SUCCESS Length:35
31.48319672 SERVICES.EXE:220 852FB428 TDI_EVENT_RECEIVE_DATAGRAM UDP:0.0.0.0:1552 141.33.148.6:53 SUCCESS Bytes taken: 150 Flags:
31.48325627 SERVICES.EXE:220 852FB428 TDI_SET_EVENT_HANDLER UDP:0.0.0.0:1552 SUCCESS Datagram Receive Event: NULL
31.48326673 SERVICES.EXE:220 852FB428 TDI_SET_EVENT_HANDLER UDP:0.0.0.0:1552 SUCCESS ErrorEx Event: NULL
31.48327597 SERVICES.EXE:220 852FB428 TDI_SET_EVENT_HANDLER UDP:0.0.0.0:1552 SUCCESS Error Event: NULL
31.48329296 SERVICES.EXE:220 852FB428 IRP_MJ_CLEANUP UDP:0.0.0.0:1552 SUCCESS
31.48330669 SERVICES.EXE:220 852FB428 IRP_MJ_CLOSE UDP:0.0.0.0:1552 SUCCESS
31.48387059 perl.exe:2340 852FB428 IRP_MJ_CREATE TCP:0.0.0.0:0 SUCCESS Address Open
31.48391816 perl.exe:2340 852FB428 TDI_SET_EVENT_HANDLER TCP:0.0.0.0:1553 SUCCESS Error Event
31.48392916 perl.exe:2340 852FB428 TDI_SET_EVENT_HANDLER TCP:0.0.0.0:1553 SUCCESS Disconnect Event
31.48393855 perl.exe:2340 852FB428 TDI_SET_EVENT_HANDLER TCP:0.0.0.0:1553 SUCCESS Receive Event
31.48394823 perl.exe:2340 852FB428 TDI_SET_EVENT_HANDLER TCP:0.0.0.0:1553 SUCCESS Expedited Receive Event
31.48395774 perl.exe:2340 852FB428 TDI_SET_EVENT_HANDLER TCP:0.0.0.0:1553 SUCCESS Chained Receive Event
31.48396672 perl.exe:2340 852FB428 TDI_QUERY_INFORMATION TCP:0.0.0.0:1553 SUCCESS Query Address
31.48399660 perl.exe:2340 854F8AA8 IRP_MJ_CREATE TCP:Connection
obj SUCCESS Context:0x85253168
31.48401347 perl.exe:2340 854F8AA8 TDI_ASSOCIATE_ADDRESS TCP:Connection
obj SUCCESS TCP:0.0.0.0:1553
31.48402695 perl.exe:2340 854F8AA8 TDI_CONNECT TCP:0.0.0.0:1553 141.22.99.111:25 SUCCESS
31.49003682 perl.exe:2340 852FB428 TDI_EVENT_CHAINED_RECEIVE TCP:0.0.0.0:1553 141.22.99.111:25 PENDING Length:79 Flags: ENTIRE_MESSAGE LOOKAHEAD DISPATCH
31.49029495 perl.exe:2340 854F8AA8 TDI_SEND TCP:0.0.0.0:1553 141.22.99.111:25 SUCCESS-165 Length:28
31.49127498 perl.exe:2340 852FB428 TDI_EVENT_CHAINED_RECEIVE TCP:0.0.0.0:1553 141.22.99.111:25 PENDING Length:94 Flags: ENTIRE_MESSAGE LOOKAHEAD DISPATCH
31.49175437 perl.exe:2340 854F8AA8 TDI_SEND TCP:0.0.0.0:1553 141.22.99.111:25 SUCCESS-168 Length:40
31.49265736 perl.exe:2340 852FB428 TDI_EVENT_CHAINED_RECEIVE TCP:0.0.0.0:1553 141.22.99.111:25 PENDING Length:8 Flags: ENTIRE_MESSAGE LOOKAHEAD DISPATCH
31.49285861 perl.exe:2340 854F8AA8 TDI_SEND TCP:0.0.0.0:1553 141.22.99.111:25 SUCCESS-171 Length:38
31.49405816 perl.exe:2340 852FB428 TDI_EVENT_CHAINED_RECEIVE TCP:0.0.0.0:1553 141.22.99.111:25 PENDING Length:95 Flags: ENTIRE_MESSAGE LOOKAHEAD DISPATCH
31.49418333 perl.exe:2340 854F8AA8 TDI_SEND TCP:0.0.0.0:1553 141.22.99.111:25 SUCCESS-174 Length:6
31.49491854 perl.exe:2340 852FB428 TDI_EVENT_CHAINED_RECEIVE TCP:0.0.0.0:1553 141.22.99.111:25 PENDING Length:32 Flags: ENTIRE_MESSAGE LOOKAHEAD DISPATCH
31.49510120 perl.exe:2340 854F8AA8 TDI_SEND TCP:0.0.0.0:1553 141.22.99.111:25 SUCCESS-182 Length:24
31.49519682 perl.exe:2340 854F8AA8 TDI_SEND TCP:0.0.0.0:1553 141.22.99.111:25 CONNECTION_RESET-186 Length:32
31.49526929 perl.exe:2340 854F8AA8 TDI_SEND TCP:0.0.0.0:1553 141.22.99.111:25 CONNECTION_RESET-188 Length:34
31.49533625 perl.exe:2340 854F8AA8 TDI_SEND TCP:0.0.0.0:1553 141.22.99.111:25 CONNECTION_RESET-189 Length:2
31.49540893 perl.exe:2340 854F8AA8 TDI_SEND TCP:0.0.0.0:1553 141.22.99.111:25 CONNECTION_RESET-190 Length:13
31.49563773 perl.exe:2340 854F8AA8 TDI_SEND TCP:0.0.0.0:1553 141.22.99.111:25 CONNECTION_RESET-191 Length:3
31.49603122 perl.exe:2340 852FB428 TDI_EVENT_CHAINED_RECEIVE TCP:0.0.0.0:1553 141.22.99.111:25 PENDING Length:45 Flags: ENTIRE_MESSAGE LOOKAHEAD DISPATCH
31.49610484 perl.exe:2340 852FB428 TDI_EVENT_DISCONNECT TCP:0.0.0.0:1553 141.22.99.111:25 SUCCESS RELEASE
31.49621912 perl.exe:2340 854F8AA8 TDI_SEND TCP:0.0.0.0:1553 CONNECTION_RESET-192 Length:6
31.49637983 perl.exe:2340 854F8AA8 TDI_DISCONNECT TCP:0.0.0.0:1553 CONNECTION_RESET
31.49689263 perl.exe:2340 854F8AA8 TDI_DISCONNECT TCP:0.0.0.0:1553 CONNECTION_INVALID
31.49725941 perl.exe:2340 854F8AA8 TDI_DISASSOCIATE_ADDRESS TCP:0.0.0.0:1553 SUCCESS
31.49727853 perl.exe:2340 854F8AA8 IRP_MJ_CLEANUP TCP:Connection
obj SUCCESS
31.49729187 perl.exe:2340 854F8AA8 IRP_MJ_CLOSE TCP:Connection obj SUCCESS
31.49730627 perl.exe:2340 852FB428 TDI_SET_EVENT_HANDLER TCP:0.0.0.0:1553 SUCCESS Error Event: NULL
31.49731683 perl.exe:2340 852FB428 TDI_SET_EVENT_HANDLER TCP:0.0.0.0:1553 SUCCESS Disconnect Event: NULL
31.49732598 perl.exe:2340 852FB428 TDI_SET_EVENT_HANDLER TCP:0.0.0.0:1553 SUCCESS Receive Event: NULL
31.49733535 perl.exe:2340 852FB428 TDI_SET_EVENT_HANDLER TCP:0.0.0.0:1553 SUCCESS Expedited Receive Event: NULL
31.49734463 perl.exe:2340 852FB428 TDI_SET_EVENT_HANDLER TCP:0.0.0.0:1553 SUCCESS Chained Receive Event: NULL
31.49735525 perl.exe:2340 852FB428 IRP_MJ_CLEANUP TCP:0.0.0.0:1553 SUCCESS
31.50123620 perl.exe:2340 854F8AA8 IRP_MJ_CREATE UDP:0.0.0.0:0 SUCCESS Address Open
31.50129380 perl.exe:2340 854F8AA8 TDI_SET_EVENT_HANDLER UDP:0.0.0.0:1554 SUCCESS Error Event
31.50130664 perl.exe:2340 854F8AA8 TDI_SET_EVENT_HANDLER UDP:0.0.0.0:1554 SUCCESS Datagram Receive Event
31.50131632 perl.exe:2340 854F8AA8 TDI_SET_EVENT_HANDLER UDP:0.0.0.0:1554 SUCCESS ErrorEx Event
31.50132557 perl.exe:2340 854F8AA8 TDI_QUERY_INFORMATION UDP:0.0.0.0:1554 SUCCESS Query Address
31.50166680 perl.exe:2340 854F8AA8 TDI_SEND_DATAGRAM UDP:0.0.0.0:1554 141.33.152.35:1434 SUCCESS Length:9
32.88574169 System:8 859A12C8 TDI_SEND_DATAGRAM UDP:141.33.98.36:137 141.33.148.14:137 SUCCESS Length:50
32.88626561 System:8 859A15A8 TDI_SEND_DATAGRAM UDP:141.33.98.36:138 141.33.99.255:138 SUCCESS Length:245
32.88635694 System:8 859A15A8 TDI_SEND_DATAGRAM UDP:141.33.98.36:138 141.33.156.25:138 SUCCESS Length:245
32.88642910 System:8 859A15A8 TDI_SEND_DATAGRAM UDP:141.33.98.36:138 141.33.156.25:138 SUCCESS Length:245
32.88650087 System:8 859A15A8 TDI_SEND_DATAGRAM UDP:141.33.98.36:138 141.33.168.44:138 SUCCESS Length:245
32.88657280 System:8 859A15A8 TDI_SEND_DATAGRAM UDP:141.33.98.36:138 10.33.96.179:138 SUCCESS Length:245
32.88664402 System:8 859A15A8 TDI_SEND_DATAGRAM UDP:141.33.98.36:138 10.45.61.90:138 SUCCESS Length:245
32.88671465 System:8 859A15A8 TDI_SEND_DATAGRAM UDP:141.33.98.36:138 10.45.66.77:138 SUCCESS Length:245
32.88678591 System:8 859A15A8 TDI_SEND_DATAGRAM UDP:141.33.98.36:138 141.33.209.38:138 SUCCESS Length:245
35.41851673 perl.exe:2340 857AD3E8 IRP_MJ_CLEANUP TCP:Control obj SUCCESS
35.41853262 perl.exe:2340 857AD3E8 IRP_MJ_CLOSE TCP:Control obj SUCCESS
35.41854386 perl.exe:2340 8579F4C8 IRP_MJ_CLEANUP TCP:Control obj SUCCESS
35.41855247 perl.exe:2340 8579F4C8 IRP_MJ_CLOSE TCP:Control obj SUCCESS
35.42126555 perl.exe:2340 854F8AA8 TDI_SET_EVENT_HANDLER UDP:0.0.0.0:1554 SUCCESS Datagram Receive Event: NULL
35.42128203 perl.exe:2340 854F8AA8 TDI_SET_EVENT_HANDLER UDP:0.0.0.0:1554 SUCCESS ErrorEx Event: NULL
35.42129163 perl.exe:2340 854F8AA8 TDI_SET_EVENT_HANDLER UDP:0.0.0.0:1554 SUCCESS Error Event: NULL
35.42131941 perl.exe:2340 852F9088 IRP_MJ_CLEANUP TCP:Control obj SUCCESS
35.42132954 perl.exe:2340 852F9088 IRP_MJ_CLOSE TCP:Control obj SUCCESS
35.42261263 perl.exe:2340 854F8AA8 IRP_MJ_CLEANUP UDP:0.0.0.0:1554 SUCCESS
35.42262787 perl.exe:2340 854F8AA8 IRP_MJ_CLOSE UDP:0.0.0.0:1554 SUCCESS Cas anormal de bloquage apres un new SMTP :

0.01346193 perl.exe:1760 855A7948 TDI_CONNECT TCP:0.0.0.0:1526 141.22.99.111:25 SUCCESS
0.01952290 perl.exe:1760 8553E1C8 TDI_EVENT_CHAINED_RECEIVE TCP:0.0.0.0:1526 141.22.99.111:25 PENDING Length:79 Flags: ENTIRE_MESSAGE LOOKAHEAD DISPATCH
0.01977572 perl.exe:1760 855A7948 TDI_SEND TCP:0.0.0.0:1526 141.22.99.111:25 SUCCESS-87 Length:28
0.02076330 perl.exe:1760 8553E1C8 TDI_EVENT_CHAINED_RECEIVE TCP:0.0.0.0:1526 141.22.99.111:25 PENDING Length:94 Flags: ENTIRE_MESSAGE LOOKAHEAD DISPATCH
0.06959486 perl.exe:1760 8579F4C8 IRP_MJ_CREATE UDP:0.0.0.0:0 SUCCESS Address Open
0.06964813 perl.exe:1760 8579F4C8 TDI_SET_EVENT_HANDLER UDP:0.0.0.0:1527 SUCCESS Error Event
0.06966117 perl.exe:1760 8579F4C8 TDI_SET_EVENT_HANDLER UDP:0.0.0.0:1527 SUCCESS Datagram Receive Event
0.06967096 perl.exe:1760 8579F4C8 TDI_SET_EVENT_HANDLER UDP:0.0.0.0:1527 SUCCESS ErrorEx Event
0.06968017 perl.exe:1760 8579F4C8 TDI_QUERY_INFORMATION UDP:0.0.0.0:1527 SUCCESS Query Address
0.07002941 perl.exe:1760 8579F4C8 TDI_SEND_DATAGRAM UDP:0.0.0.0:1527 141.33.152.35:1434 SUCCESS Length:9

2° Cas anormal de bloquage sur la trace suivante :

0.01027365 perl.exe:2340 85766B88 TDI_SEND_DATAGRAM UDP:0.0.0.0:1549 141.33.152.35:1434 SUCCESS Length:9



Par avance merci,

Brigitte

"Rudi Bruchez" <"rudi#nospam#[at]babaluga" a écrit :

Brigitte a écrit:

> Conclusion il suffit de faire un new sur Net::SMTP pour bloquer les appel de
> connexion SQL DMO sur machine stoppée

Bonjour,

Donc si je comprends bien, pour régler (de manière insatisfaisante, mais
bon) ton problème, tu dois éviter dans ton code d'ouvrir une connexion DMO
lorsqu'une instance de Net::SMTP est créé. Si par exemple dans :

Scénario 1
use Net::SMTP
Connexion DMO OK
Envoi de mail
Seconde Connexion DMO NOK !!

Tu fais :

Scénario 1
use Net::SMTP
Connexion DMO OK
Envoi de mail
$smtp->quit(); # ou undef($smtp)
Seconde Connexion DMO ???

Qu'est-ce que ça donne ?

Une possibilité est qu'il se passe quelque chose au niveau de la connexion
réseau, qui empêche Perl ou le DMO de recevoir une notification
d'impossibilité de connexion. Est-ce que le serveur SMTP est sur la même
machine que le serveur SQL ?
Il serait peut-être intéressant de regarder ce qui se passe au niveau de la
couche TCP, sur les ports TCP 1433, 25 (SMTP), et udp 1434, par exemple
avec TDIMon http://www.sysinternals.com/Utilities/TdiMon.html ou Ethereal.

J'ai vu dans ton code que tu te connectes à une instance nommée. Pour
obtenir cette instance nommée, il y a aussi une communication avec le port
UDP 1434 sur le serveur (il y a un listener service qui retourne les infos
d'instance nommée sur ce port), donc ceci joue peut-être également. Qu'en
est-il d'une instance par défaut ?

A propos, as-tu plus d'informations si tu exécutes ton script avec perl -W
?

--
Rudi Bruchez
Consultant indépendant
modélisation, administration, optimisation,
Solutions MS SQL Server et informatique libre.
MCDBA, SCJP2
http://www.babaluga.com/



Avatar
Rudi Bruchez
Brigitte a écrit:

1) Il est vrai que le problème ne se produit pas pour les instances par défaut

2) Toute tentative de connexion DMO sur machine stoppée est bloquée meme si
je fais un quit apres l'envoi d'un mail.

3) En fait il suffit que je fasse appel à l'instruction
Net::SMTP->new($SMTPServer) pour bloquer toute tentative de connexion
ultérieure sur machine stoppée. Je ne connais pas d'API du type delete sur
l'objet SMTP

4) Les traces TDI montrent que ca bloque effectivememnt sur le port UDP 1434



Bonjour,

Il n'y a effectivement pas de destruction explicite d'objet en Perl. Il y a
un garbage collector qui nettoie les objets qui ne sont plus référencés,
mais il n'y a pas de garantie que cela se fasse à un moment ou à un autre,
c'est pour cela que je vous proposais de faire un undef ($smtp) pour
supprimer la référence.

Peut-être une des premières suggestions que j'aurais dû faire est :
avez-vous installé la dernière version du MDAC ? Cela peut aider. Et quel
est le service pack appliqué sur le serveur SQL ? Il y a eu quelques
changements au niveau de la connectivité, entre les service packs.

Vous avez peut-être aussi une solution simple pour régler le problème : ce
que fait le DMO dans votre cas, est d'envoyer une demande en UPD 1434 au
listener du serveur SQL. Ce service sert à communiquer au client quel est
le port TCP attribué dynamiquement à l'instance nommée de SQL Server.

Vous pouvez contourner ce fonctionnement en attribuant un port fixe à
l'instance SQL, et en créant sur le client un alias (dans Client Network
Utility) pour le référencer avec le port. Après, essayez de vous connecter
avec l'alias.

Selon la trace de TDIMon, c'est comme si le DMO perd la réponse du serveur,
ou ne crée pas de TDI_SET_EVENT_HANDLER pour recevoir la réponse, ou... ça
peut être plusieurs choses. Si c'est pour creuser plus loin, il pourrait
être utile de faire la même chose du côté du serveur pour voir ce qu'il
reçoit et ce qu'il envoie.

Bon courage


--
Rudi Bruchez
Consultant indépendant
modélisation, administration, optimisation,
Solutions MS SQL Server et informatique libre.
MCDBA, SCJP2
http://www.babaluga.com/
Avatar
Brigitte
Bonjour,

1)
Nous avons pris soin d'upgrader le client avec le dernier MDAC de SQL Server
2000

2)
Par contre peu importe la version du SQL Server cible de la connection
puisqu'il est arreté

3)
Impossible d'avoir les traces TDI du coté host cible puisqu'il est arreté

4)
Effectivement créer un alias sur le poste client est une solution : le bug
ne se produit plus.
N'y-a-t-il pas d'autres moyens d'associer un port ip fixe au SQL Server
cible de la connexion à partir du poste client ?
Est-ce le seul moyen ?
Peut-on explictement spécifier le port à la connexion en isql ou DMO?

Merci

Bonne fin de journée
Brigitte

"Rudi Bruchez" <"rudi#nospam#[at]babaluga" a écrit :

Brigitte a écrit:

> 1) Il est vrai que le problème ne se produit pas pour les instances par défaut
>
> 2) Toute tentative de connexion DMO sur machine stoppée est bloquée meme si
> je fais un quit apres l'envoi d'un mail.
>
> 3) En fait il suffit que je fasse appel à l'instruction
> Net::SMTP->new($SMTPServer) pour bloquer toute tentative de connexion
> ultérieure sur machine stoppée. Je ne connais pas d'API du type delete sur
> l'objet SMTP
>
> 4) Les traces TDI montrent que ca bloque effectivememnt sur le port UDP 1434

Bonjour,

Il n'y a effectivement pas de destruction explicite d'objet en Perl. Il y a
un garbage collector qui nettoie les objets qui ne sont plus référencés,
mais il n'y a pas de garantie que cela se fasse à un moment ou à un autre,
c'est pour cela que je vous proposais de faire un undef ($smtp) pour
supprimer la référence.

Peut-être une des premières suggestions que j'aurais dû faire est :
avez-vous installé la dernière version du MDAC ? Cela peut aider. Et quel
est le service pack appliqué sur le serveur SQL ? Il y a eu quelques
changements au niveau de la connectivité, entre les service packs.

Vous avez peut-être aussi une solution simple pour régler le problème : ce
que fait le DMO dans votre cas, est d'envoyer une demande en UPD 1434 au
listener du serveur SQL. Ce service sert à communiquer au client quel est
le port TCP attribué dynamiquement à l'instance nommée de SQL Server.

Vous pouvez contourner ce fonctionnement en attribuant un port fixe à
l'instance SQL, et en créant sur le client un alias (dans Client Network
Utility) pour le référencer avec le port. Après, essayez de vous connecter
avec l'alias.

Selon la trace de TDIMon, c'est comme si le DMO perd la réponse du serveur,
ou ne crée pas de TDI_SET_EVENT_HANDLER pour recevoir la réponse, ou... ça
peut être plusieurs choses. Si c'est pour creuser plus loin, il pourrait
être utile de faire la même chose du côté du serveur pour voir ce qu'il
reçoit et ce qu'il envoie.

Bon courage


--
Rudi Bruchez
Consultant indépendant
modélisation, administration, optimisation,
Solutions MS SQL Server et informatique libre.
MCDBA, SCJP2
http://www.babaluga.com/



Avatar
Rudi Bruchez
Brigitte a écrit:

Peut-on explictement spécifier le port à la connexion en isql ou DMO?



Bonjour,

Il y a pour les chaînes de connexion une façon (non documentée à ma
connaissance) de faire, qui est "Data Source=ServerName,port"

Essayez peut-être de faire ceci :
my $serverName = 'sqld01,port';

Mais je ne sais absolument pas si ça va marcher.


--
Rudi Bruchez
Consultant indépendant
modélisation, administration, optimisation,
Solutions MS SQL Server et informatique libre.
MCDBA, SCJP2
http://www.babaluga.com/
Avatar
Brigitte
Impeccable.

Merci

Brigitte

"Rudi Bruchez" <"rudi#nospam#[at]babaluga" a écrit :

Brigitte a écrit:

> Peut-on explictement spécifier le port à la connexion en isql ou DMO?

Bonjour,

Il y a pour les chaînes de connexion une façon (non documentée à ma
connaissance) de faire, qui est "Data Source=ServerName,port"

Essayez peut-être de faire ceci :
my $serverName = 'sqld01,port';

Mais je ne sais absolument pas si ça va marcher.


--
Rudi Bruchez
Consultant indépendant
modélisation, administration, optimisation,
Solutions MS SQL Server et informatique libre.
MCDBA, SCJP2
http://www.babaluga.com/