2010-08-19 8 views
13

He utilizado la GUI de SQL Server 2008 para configurar las cuentas de los perfiles de correo de la base de datos & en mi servidor de prueba, y me gustaría duplicarlas en nuestra base de datos de producción.Configuración de scripting de correo de base de datos

¿Hay alguna manera de generar un script para hacer esto?

Respuesta

20

AFAIK, no hay una forma de guiar esto necesariamente desde SSMS, pero puede crear una secuencia de comandos transportable en TSQL una vez y volver a utilizarla en todos los servidores. Aquí es un buen ejemplo para que pueda empezar con esto:

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 

La otra opción sería la de aprovechar SMO, ya sea a través de NET o PowerShell para generar los scripts. La referencia SMO para esto sería:

SqlMail Class

ACTUALIZACIÓN:

Aquí es lo fácil que resultó ser a la escritura esto con PowerShell y SMO:

[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(); 
+1

Jonathan - que la unión cartesiana/bomba! – MaasSql

+1

¡Este fue un descubrimiento excelente! En el lado de TSQL, puede usar '@@ SERVERNAME' para realizar subinformes para ciertos parámetros si desea que la cuenta se personalice con el nombre de cada servidor, es decir,' donotreply_FooBarSQL @ mycompany.com'. – NateJ

Cuestiones relacionadas