Fragensteller
Trigger Mailversand bei neuer DB in Server

Frage
-
Hallo an alle,
ich möchte gern einen Trigger erstellen der mir eine Mail erzeugt wenn eine neue Datenbank angelegt wurde. Aus einem anderen Thread ging hervor das ich dazu wie folgt vorgehen kann.
CREATE TRIGGER trg_CreateDatabase3 ON ALL SERVER FOR CREATE_DATABASE AS EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Mailversand', @importance = 'High', @recipients = 'mail@mail.mail', @query = 'SELECT getdate()' , @subject = 'Testlauf2', @attach_query_result_as_file = 1, --@body = @bodytext; @body = 'test', @body_format = 'HTML' ; GO
Man merkt das der Trigger ausgelöst und man merkt auch leider das dieser in eine Endlosschleife läuft.
Wenn ich den einzelnen Bereich der EXEC-Anweisung ausführe erhalte ich eine Mail. Wenn ich den Trigger so aufbau das er zb. einen Wert in eine Tabelle schreibt funktioniert dies auch.
Aber der Trigger ist an sich nicht in der Lage ein Mail zu schicken wenn eine neue DB angelegt wird.
Vielleicht soll dies auch nicht gehen? Sicherheitsfeature?
Alle Antworten
-
Hallo!
Stefan hatte die Frage für Dich bereits in einem anderen Thread diskutiert:
Einen schönen Tag noch, Christoph - http://www.insidesql.org/blogs/cmu
-
Moin,
da kann ich auch erst mal nur etwas raten: sp_send_dbmail (Transact-SQL) => "When executing sp_send_dbmail without a transaction context, Database Mail starts and commits an implicit transaction"
Und Kommandos wie CREATE DATABASE und Transaktionen beißen sich zuweilen.
Allerdings würde ich eben so eine Fehlermeldung erwarten.
Olaf Helper
[ Blog] [ Xing] [ MVP] -
Hier ist mal eine Variante, die ich früher produktiv genutzt habe. Vielleicht macht es ja einen Unterschied, dass die Werte für die Mail dort statisch sind?
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TRIGGER [ddl_trig_create_database] ON ALL SERVER FOR CREATE_DATABASE AS declare @datenbank nvarchar(max) declare @server nvarchar(max) declare @mailtext nvarchar(max) select @datenbank = EVENTDATA().value('(/EVENT_INSTANCE/DatabaseName)[1]','nvarchar(max)') select @server = EVENTDATA().value('(/EVENT_INSTANCE/ServerName)[1]','nvarchar(max)') set @mailtext = 'Hallo zusammen,' + nchar(13) + nchar(13) + 'bitte für die neu angelegte Datenbank "' + @datenbank + '" auf dem "' + @server + '"' + nchar(13) + 'eine erste Vollsicherung durchführen und diese ins Backup-System aufnehmen!' + nchar(13) + nchar(13) + 'Danke und viele Grüße' + nchar(13) + 'Die SQL-Admins' EXEC msdb.dbo.sp_send_dbmail @profile_name = 'SQLMail', @recipients = 'backupteam@e.de', @body = @mailtext, @subject = 'Neue Datenbank'; GO SET ANSI_NULLS OFF GO SET QUOTED_IDENTIFIER OFF GO ENABLE TRIGGER [ddl_trig_create_database] ON ALL SERVER GO
Einen schönen Tag noch, Christoph - http://www.insidesql.org/blogs/cmu