15

我已经使用 SQL Server 2008 GUI 在我的测试服务器上设置了数据库邮件配置文件和帐户,现在我想将它们复制到我们的生产数据库中。

有没有办法生成一个脚本来做到这一点?

4

1 回答 1

23

AFAIK,没有办法必须从 SSMS 编写脚本,但您可以在 TSQL 中创建一个可传输的脚本,然后在所有服务器上重用它。这是一个很好的示例,可以帮助您入门:

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@domain.com',  -- 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

另一种选择是利用 SMO,通过 .NET 或 powershell 生成脚本。SMO 对此的参考是:

SqlMail 类

更新:

事实证明,使用 Powershell 和 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();
于 2010-08-22T19:49:52.560 回答