数据库邮件故障排除:排除本地服务器故障时从远程服务器发送邮件

新建日期: 2006 年 12 月 12 日

本主题说明如何使用远程服务器临时发送在本地服务器上生成的电子邮件。在排除和修复本地服务器上的数据库邮件配置故障时,此过程非常有用。本主题仅适用于通过数据库邮件发送的电子邮件。使用 xp_sendmail 或第三方实用工具发送的电子邮件不受影响。

Bb326746.note(zh-cn,SQL.90).gif注意:
在本主题中,本地服务器是指对其进行故障排除的服务器,远程服务器是指对本地服务器进行故障排除时发送该本地服务器的电子邮件的另一台服务器。

每次只能发送来自一台服务器的电子邮件。将远程服务器上的数据库邮件配置为发送来自本地服务器的电子邮件时,远程服务器将不能再发送它自己的电子邮件。

远程服务器发送在本地服务器上生成的电子邮件时,向 msdb 表中插入的有关该电子邮件的所有内容以及该电子邮件的任何数据库邮件日志错误项将存在于本地服务器上。如果将远程服务器配置为发送本地服务器的电子邮件时本地服务器继续发送电子邮件,则任何一台服务器都可以发送任何电子邮件。如果要知道是哪台服务器发送的电子邮件,必须检查邮件的标头。

Bb326746.note(zh-cn,SQL.90).gif注意:
若要运行下列过程,本地服务器和远程服务器都必须运行 SQL Server 2005 Service Pack 2 或更高版本。

过程

将远程服务器配置为发送本地服务器的电子邮件

  1. 请确保在远程服务器上设置了数据库邮件。有关如何设置数据库邮件的信息,请参阅数据库邮件操作指南主题

  2. 在远程服务器上创建与本地服务器上的每个配置文件均相同的配置文件,在故障排除过程中生成的电子邮件将使用这些配置文件。每个配置文件都必须有一个有效帐户,但该帐户不必与本地服务器上相同配置文件的关联帐户相同。

  3. 请确保作为本地服务器上 DatabaseMailUserRole 成员的任何经过 Windows 身份验证的登录帐户也是远程服务器上相同角色的成员(如果发送在本地服务器上生成的电子邮件需要该成员身份)

  4. 用以下内容创建名为 DatabaseMail90.exe.config 的文本文件。将 LocalServerName 替换为本地服务器的名称,保留 msdb 作为 DatabaseName 的值。

    <configuration>
        <appSettings>
            <add key="DatabaseServerName" value ="LocalServerName" />
            <add key="DatabaseName" value ="msdb" />
        </appSettings>
    </configuration>
    
  5. 将该文件保存在远程服务器上并与 DatabaseMail90.exe 位于同一文件夹 (\MSSQL\Binn) 中。默认路径为 <drive>\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn。

  6. 若要将数据库邮件配置为发送来自其他服务器的电子邮件,请在远程服务器上运行以下代码。

    Bb326746.note(zh-cn,SQL.90).gif重要提示:
    此代码在系统表中插入记录。请不要修改此代码。约束会防止记录多次插入。另外,请不要直接修改此系统表中的数据。
    USE msdb;
    GO
    INSERT INTO [msdb].[dbo].[sysmail_configuration]
        (
        [paramname]
        ,[paramvalue]
        ,[description]
        )
    VALUES
        (
        N'ReadFromConfigurationFile'
        ,N'1'
        ,N'Send mail from mail server in configuration file'
        );
    GO
    
  7. 在远程服务器上执行 dbo.sysmail_start_sp 以重新启动数据库邮件。每次 dbo.sysmail_configuration ReadFromConfigurationFile 记录的 paramvalue 或 DatabaseMail90.exe.config 配置文件中的 DatabaseServerName 键值发生更改时,必须运行此存储过程,更改才会生效。

    USE msdb;
    GO
    EXEC dbo.sysmail_start_sp;
    GO
    

将远程服务器重新配置为停止发送本地服务器的电子邮件

  1. 若要停止发送来自本地服务器的电子邮件,请在远程服务器上运行以下代码。此代码将远程服务器配置为停止发送在本地服务器上生成的电子邮件,并恢复发送在远程服务器上生成的电子邮件。

    USE msdb;
    GO
    EXEC sysmail_configure_sp 
        @parameter_name = N'ReadFromConfigurationFile'
        ,@parameter_value = N'0';
    GO
    
  2. 在远程服务器上执行 dbo.sysmail_start_sp 以重新启动数据库邮件。每次 dbo.sysmail_configuration ReadFromConfigurationFile 记录的 paramvalue 或 DatabaseMail90.exe.config 配置文件中的 DatabaseServerName 键值发生更改时,必须运行此存储过程,更改才会生效。

    USE msdb;
    GO
    EXEC dbo.sysmail_start_sp;
    GO
    

切换远程服务器上数据库邮件的配置

  • 若要将远程服务器切换为发送在另一台服务器上生成的电子邮件,请在 msdb.dbo.sysmail_configuration 中,将 ReadFromConfigurationFile 记录的 parameter_value 设置为 1,然后执行 msdb.dbo.sysmail_start_sp。若要将远程服务器切换为发送在远程服务器上生成的电子邮件,请将 parameter_value 设置为 0,然后执行 msdb.dbo.sysmail_start_sp

    USE msdb;
    GO
    EXEC sysmail_configure_sp 
        @parameter_name = N'ReadFromConfigurationFile'
        ,@parameter_value = N'0|1';
    GO
    
  • 若要将远程服务器配置为发送在其他本地服务器上生成的电子邮件,请将 DatabaseMail90.exe.config 配置文件中的 DatabaseServerName 键值改为本地服务器的名称,然后执行 msdb.dbo.sysmail_start_sp

权限

dbo.sysmail_start_spsysmail_configure_sp 的 EXECUTE 权限以及 dbo.sysmail_configuration 的 INSERT 权限默认授予 sysadmin 固定服务器角色的成员。

在 \MSSQL\Binn 文件夹创建配置文件时需要 NTFS 权限。

建议执行这些故障排除过程的登录帐户为本地服务器和远程服务器上的 sysadmin 固定服务器角色成员。

请参阅

任务

对数据库邮件进行故障排除

帮助和信息

获取 SQL Server 2005 帮助