Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Skripterstellung für Datenbank-Mail

AFAIK, es gibt keine Möglichkeit, dies unbedingt von SSMS aus zu skripten, aber Sie können ein transportables Skript einmal in TSQL erstellen und es auf allen Servern wiederverwenden. Hier ist ein gutes Beispiel für den Einstieg:

USE [master]
GO
sp_configure 'show advanced options',1
GO
RECONFIGURE WITH OVERRIDE
GO
sp_configure 'Database Mail XPs',1
GO
RECONFIGURE 
GO
-- Create a New Mail Profile for Notifications
EXECUTE msdb.dbo.sysmail_add_profile_sp
       @profile_name = 'DBA_Notifications',
       @description = 'Profile for sending Automated DBA Notifications'
GO
-- Set the New Profile as the Default
EXECUTE msdb.dbo.sysmail_add_principalprofile_sp
    @profile_name = 'DBA_Notifications',
    @principal_name = 'public',
    @is_default = 1 ;
GO
-- Create an Account for the Notifications
EXECUTE msdb.dbo.sysmail_add_account_sp
    @account_name = 'SQLMonitor',
    @description = 'Account for Automated DBA Notifications',
    @email_address = '[email protected]',  -- Change This
    @display_name = 'SQL Monitor',
    @mailserver_name = 'smtp.domain.com'  -- Change This
GO
-- Add the Account to the Profile
EXECUTE msdb.dbo.sysmail_add_profileaccount_sp
    @profile_name = 'DBA_Notifications',
    @account_name = 'SQLMonitor',
    @sequence_number = 1
GO

Die andere Option wäre die Nutzung von SMO, entweder über .NET oder Powershell, um die Skripts zu generieren. Die SMO-Referenz dafür wäre:

SqlMail-Klasse

UPDATE:

Hier ist, wie einfach es sich herausstellte, dies mit Powershell und SMO zu skripten:

[void][reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo");

#Set the server to script from
$ServerName = "ServerName";

#Get a server object which corresponds to the default instance
$srv = New-Object -TypeName Microsoft.SqlServer.Management.SMO.Server $ServerName

#Script Database Mail configuration from the server
$srv.Mail.Script();