none
DatabaseMail错误,批量发送邮件的时候经常出现。 RRS feed

  • 问题

  • 循环执行sp_send_dbmail进行邮件发送1000次,邮件日志中会产生这个错误,请大家帮忙看看。

    发生错误的时候,该邮件会发送失败,但循环可以正常继续直到完成。

    根据错误提示,应该是sp_send_dbmail每次都需要打开数据库连接,但连接池满的时候导致连接错误,但不知到如何设置sp_send_dbmail及时关闭连接。下面是日志中的具体错误提示:


    事件类型: 错误
    事件来源: DatabaseMail
    事件种类: 无
    事件 ID: 0
    日期:  2009-1-8
    事件:  0:45:00
    用户:  N/A
    计算机: HTFENGJDATABASE
    描述:


    1) Exception Information
    ===================
    Exception Type: Microsoft.SqlServer.Management.SqlIMail.Server.Common.BaseException
    Message: 出现连接错误。原因: 超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。,连接参数: 服务器名称: HTFENGJDATABASE,数据库名称: msdb
    Data: System.Collections.ListDictionaryInternal
    TargetSite: Void OpenConnection(Microsoft.SqlServer.Management.Common.SqlConnectionInfo)
    HelpLink: NULL
    Source: DatabaseMailEngine

    StackTrace Information
    ===================
       在 Microsoft.SqlServer.Management.SqlIMail.Server.DataAccess.ConnectionManager.OpenConnection(SqlConnectionInfo ci)
       在 Microsoft.SqlServer.Management.SqlIMail.Server.DataAccess.DataAccessAdapter.OpenConnection(String dbServerName, String dbName, String userName, String password)
       在 Microsoft.SqlServer.Management.SqlIMail.IMailProcess.QueueItemProcesser.ProcessQueueItems(String dbName, String dbServerName, Int32 lifetimeMinimumSec, LogLevel loggingLevel)

    2) Exception Information
    ===================
    Exception Type: System.InvalidOperationException
    Message: 超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。
    Data: System.Collections.ListDictionaryInternal
    TargetSite: System.Data.ProviderBase.DbConnectionInternal GetConnection(System.Data.Common.DbConnection)
    HelpLink: NULL
    Source: System.Data

    StackTrace Information
    ===================
       在 System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
       在 System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
       在 System.Data.SqlClient.SqlConnection.Open()
       在 Microsoft.SqlServer.Management.SqlIMail.Server.DataAccess.ConnectionManager.OpenConnection(SqlConnectionInfo ci)

    2009年1月9日 7:21

答案

全部回复