SP_SEND_DBMAIL gespeicherte Prozedur mit senden, doppelte E-Mails an alle Empfänger
Ich habe eine gespeicherte Prozedur, die ausgeführt wird, die jede Nacht senden sollen, die Ergebnisse einer Abfrage an mehrere Empfänger. Aber an den meisten Tagen landet es sendet eine doppelte E-Mail eine minute später. Der code, den ich verwende, ist wie folgt (alle E-Mails und Datenbank-Referenzen verändert wurden):
EXEC msdb.dbo.sp_send_dbmail
@recipients = '[email protected]',
@copy_recipients = '[email protected];[email protected];[email protected]',
@subject = 'Example Email',
@profile_name = 'ExampleProfile',
@query = 'SELECT name
FROM table
WHERE date BETWEEN (getdate() - 1) AND getdate()',
@attach_query_result_as_file = 1
Jede Hilfe bei diesem würde sehr geschätzt werden.
- Der Aufruf scheint gut, aber wie nennst du es? Sind Sie sicher, dass Sie nicht nennen es zwei mal?
- Ich rufe es per Job-Manager in SQL Server-Agent, und soweit ich es sehen kann, wird nur einmal aufgerufen, innerhalb der Job-Scheduler.
- Haben Sie überprüft, die log?
- Ich habe gerade überprüft das Protokoll und der Job ist nur einmal am Tag ausgeführt und in jedem Job, den ich kann sehen, dass die Prozedur nur einmal ausgeführt wird.
- Ausführen SELECT * FROM msdb.dbo.sysmail_sentitems ist es mit zwei Zeilen für die E-Mail in Frage? Wenn nicht, dann ist das ein mail-server-Problem. Wenn es dann die gespeicherte Prozedur wird zweimal genannt.
- Versuchen Sie auch SELECT * FROM dbo.sysmail_event_log für mögliche Fehler, die gemacht haben, SQL-Versuch senden zweimal.
- Ich habe laufen sowohl von den Fragen, die Sie zur Verfügung gestellt. Ich fand, dass es war nur eine E-Mail geschickt und keine Fehler aufgetreten sind, die auf die mailitem_id. Ich check die E-mail-server und sehen, ob die Duplikate sind dort vorkommenden. Wenn ich finden Sie heraus, warum dies passiert ist werde ich hier die Antwort.
- Aus Interesse, sind diese Empfänger zweimal aufgeführt? Vielleicht einmal als [email protected] und dann wieder in eine Verteilerliste? Ich habe von einem bug in exchange, schickt zweimal in diesem Fall. Haben Sie ActiveSync auf einem Exchange 2003-Server, der hat einen bekannten bug, wenn SP2 nicht installiert ist?
- Wir sind nicht mit beliebigen Verteilerlisten und ich habe Sie sicher, dass alle E-Mail-Adressen sind nur einmal aufgeführt. Nach Kontaktaufnahme mit den Jungs, die laufen, unsere E-mail-server, ich habe versucht, das deaktivieren der Arbeit zu sehen, wenn die SP war aufgerufen wird, von irgendwo anders, aber ich fand, dass dies nicht der Fall war, so landete ich neu zu den job-um zu sehen, ob es das problem behoben. Es scheint, getan zu haben, den trick. Aber ich werde es behalten Sie es für den rest der Woche und stellen Sie sicher, es wird nur einmal senden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Lösung herausgestellt hat, die Verringerung der Anzahl der Konto-Retry-Konto auf dem server auf 0 (innerhalb der Datenbank-E-Mail-Konfigurations-Assistenten).
Wenn es sendet, doppelte E-Mails an Empfänger, dann das bedeutet, dass Ihre SP aufgerufen wird, mehrmals an einem Tag. Überprüfen Sie den Aufruf mal in Ihrer SQL-job, der Aufruf dieser SP. Sollte es einmal einen Tag, um zu vermeiden, doppelte E-Mails.
Wenn es nicht zweimal gesendet von SQL Server und nicht ein problem des E-Mail-Server, dann stellen Sie sicher, dass Sie nicht überprüfen mail in Outlook mit Filter für E-mail, dann erhalten Sie möglicherweise die E-Mail zweimal.
Ich würde vorschlagen, die Sie hinzufügen einer weiteren Tabelle zu Ihrer Datenbank, halten Sie die info, Wann war das Letzte mal eine E-Mail an jeden Empfänger.
Ohne diese Tabelle können Sie nicht wirklich wissen, was Los ist. Was, wenn man den SP mehrmals durch Unfall? Es gibt nichts, das verhindert, dass es aus senden Sie eine E-Mail.
Zu diesem problem – gibt es in Ihrem E-mail-server eine Kopie in gesendete Objekte? Wenn es funktioniert, möchten Sie vielleicht zu prüfen, senden Datum für alle Nachrichten gibt. Dies könnte Ihnen eine gute info, was Los ist.
Dies tritt auf, weil ein Empfang der E-Mail-Adresse (entweder in einer Gruppe oder Einzelperson) hat eine E-Mail-Adresse ist nicht mehr gültig. Während Sie können zu beseitigen Wiederholungen, wie in der akzeptierten Antwort, der beste Ansatz ist, um aufzuräumen die Verteilung.
Ich hatte ein ähnliches Problem wo wir hatten, mehrere Empfänger in einer einzigen E-Mail, und es erzeugen würde, 2 E-Mails geschickt. Das Problem endete als einer der Empfänger war nicht mehr gültig, und das wiederholen würde senden Sie die email an alle Empfänger, nicht nur die eine, die nicht. Es gibt eine Reihe von Ansichten, die in der msdb-Datenbank, die Ihnen helfen können finden Sie Ihre Ungültiger Empfänger. Sie beginnen dbo.sysmail_<irgendwas>
Gibt es ein paar Lösungen zu diesem Thema.
Hatte ich das gleiche Vervielfältigung Problem während der Verwendung einer SELECT-Anweisung in @Abfrage zu senden Konstanten text in den body jeder E-Mail, zusätzlich zu den mit @Körper und @Betreff zu senden benutzerdefinierter text abhängig von einer Bedingung.
Einer E-Mail enthalten, die benutzerdefinierte text-und query-text, wie erwartet. Die duplizierte E-Mail enthielt nur den @query-text (kein eigener text) mit einem system eingesetzt Betreff-Zeile "SQL Server-Meldung".
Lief ich SELECT * FROM msdb.dbo.sysmail_sentitems und sicher genug E-Mail wurde zweimal gesendet. Ein Blick auf sysmail_configuration ergab, dass AccountRetryAttempts paramValue = 1.
Das problem ging Weg, nachdem ich entfernt @Abfrage ganz aus der gespeicherten Prozedur (Ausführung der änderung), lief der sp. Dann habe ich @query zurück in die sp, exec die Veränderung. Danach werden die E-Mails begann das senden nur einmal. Gehen Abbildung.
Stellen Sie sicher, dass Sie nicht mit einer anderen Update-Anweisungen in jedem anderen Trigger in side-Trigger auf update.
Sogar ich Stand vor dem ähnlichen problem, wenn ich überprüft mit meinem Trigger, die ich gesehen habe, dass ich früher ein anderes Update-Anweisung in meine anderen auslösen. Es verursacht mehrere feuern die Trigger. Daher zwei E-mails ausgelöst wurden.