SQL Server 2005 sp_send_dbmail出现Internal error at FormatRowset (Reason: Not enough storage is available to complete this operation)

案例环境:

操作系统: Windows 2003 SE 32bit(SP2)

数据库版本:Microsoft SQL Server 2005 - 9.00.5069.00 (Intel X86)

Aug 22 2012 16:01:52

Copyright (c) 1988-2005 Microsoft Corporation

Standard Edition on Windows NT 5.2 (Build 3790: Service Pack 2)

案例分析:

如下所示,使用下面SQL语句发送邮件时,遇到一个非常奇怪的错误信息:Not enough storage is available to complete this operation

EXEC msdb.dbo.sp_send_dbmail @recipients = ‘[email protected]‘,
     @subject = ‘it is only test‘, @body = NULL, @body_format = ‘text‘,

     @query_result_separator = ‘---‘,

     @query = ‘SELECT * FROM  MESDB.dbo.MES_DAILY_CLOSING_LOG‘;

Msg 22050, Level 16, State 1, Line 22

Error formatting query, probably invalid parameters

Msg 14661, Level 16, State 1, Procedure sp_send_dbmail, Line 517

Query execution failed: Sqlcmd: Error: Internal error at GetDataRowset (Reason: Not enough storage is available to complete this operation).

Sqlcmd: Error: Internal error at FormatRowset (Reason: Not enough storage is available to complete this operation).

错误虽然提示storage not engough,其实这个错误跟存储没有任何关系,这个表MES_DAILY_CLOSING_LOG里面有三个字段为NVARCHAR(MAX),采取下面两种方式可以临时解决这个问题。

1: 如果在@query里面排除这三个NVARCHAR(MAX)字段,那么邮件正常发送,不会出现任何错误。

2: 如果在@query里面将这个字段做一下转换,例如CAST(MAIL_RECEIPS AS NVARCHAR(4000)),那么邮件也能正常发送。

在SQL Server 2008、 SQL Server 2012下都不会发生,另外在SQL Server 2005(9.00.5000.00)这个版本下测试,也没有出现这个问题。只有这台服务器会出错,后面在这篇sp_help_jobsteplog fails when run as a @query of sp_send_dbmail章里面反馈,重启数据库服务后,就不会出现这个问题。等了一周等到一个合适的时机重启了服务器,验证发现重启过后,果然这个错误就消失了。网上关于这个错误的资料非常少,严重怀疑是触发了某一个Bug。

参考资料:

https://social.msdn.microsoft.com/Forums/en-US/0882f984-58f4-4a2a-8d0c-5f2c1e3cc853/msdbdbospsenddbmail-error?forum=transactsql

http://dba.stackexchange.com/questions/3591/sp-help-jobsteplog-fails-when-run-as-a-query-of-sp-send-dbmail

时间: 2024-12-26 12:00:38

SQL Server 2005 sp_send_dbmail出现Internal error at FormatRowset (Reason: Not enough storage is available to complete this operation)的相关文章

SQL Server 2005 sa登录失败。已成功与服务器建立连接 但是在登录过程中发生错误。 provider 共享内存提供程序 error 0 管道的另一端上无任何进程。

SQL Server 2005 Express版 用户 'sa' 登录失败.该用户与可信 SQL Server 连接无关联.提示错误:已成功与服务器建立连接 但是在登录过程中发生错误. provider 共享内存提供程序 error 0 管道的另一端上无任何进程. 解决方案: 1.首先选中服务器(右键)->属性->安全性->服务器身份验证修改为"SQL SERVER和WINDOWS身份验证模式"2.其次展开服务器下面的"安全性"文件夹->登陆

在 SQL Server 2005 中配置数据库邮件

一.            SQL Server发邮件原理和组件介绍: 数据库邮件有4个组件:配置文件.邮件处理组件.可执行文件以及"日志记录和审核组件". l  配置组件包括: 1)数据库邮件帐户包含诸如SMTP服务器名.身份验证类型和电子邮件地址等. 2)数据库邮件配置文件是数据库邮件帐户的集合. l  邮件处理组件 要的数据库邮件组件就是刚才所说的数据库邮件主机数据库,默认是msdb. l  数据库邮件可执行文件 数据库邮件使用一个外部可执行文件来处理邮件,降低了对SQL Ser

[转]Under the covers: IAM chains and allocation units in SQL Server 2005

(I'm sitting here in Seattle airport at 7am on Sunday waiting to catch the same flight to Boston that I caught two weeks ago. Instead of TechEd, this time I'm going to a training course at MIT. I'd enjoy the air travel a lot more with a bigger gap in

使用SQL Server 2005 新的语法ROW_NUMBER()进行分页的两种不同方式的性能比较

相比在SQL Server 2000 中使用的分页方式,在SQL Server 2005中使用新的语法ROW_NUMBER()来分页效率要高出很多,但是很多人在使用ROW_NUMBER()这种分页方式时,使用的方法并不正确,以下列出不正确的和正确的做法并做简单分析: 首先假设我们已经创建了如下的表和索引并初始化了100万条数据: CREATE TABLE [dbo].[Users] ( [ID] [int] IDENTITY(1,1) NOT NULL, [Name] [varchar](50)

记一次SQL server 2005 到SQL server 2008 数据库迁移

最近周末完成了一个从SQL server 2005升级到SQL server 2008的升级迁移,其实质是一个服务器迁移的过程.比较复杂的是这个服务器上的复制关系,自身既作为发布服务器,又作为订阅服务器,因此整个迁移同时需保证这些复制关系依旧可用.这个主服务器是供ERP使用,涉及到的模块也比较相对多,因此从迁移到验证整个过程还是比较长.记下本文以示庆贺. 一.主要的步骤    1.检查现有数据库的备份完整性(含发布及订阅数据库)及存在的复制关系       2.停止原服务器所有服务(含agent

SQL SERVER 2005 登陆18456错误的解决方法

昨天我的SQL(Microsoft SQL Server 2005 )登录不上去了,原来是出现了几个小问题,现在记录一下我的解决这几个情况的办法.(解决方法有很多种,这些只是我的解决方法,仅供参考)查找问题的过程:(注:用windows账号还是可以登录的)第一步: 启动所有与SQL有关的服务,问题依旧:第二步: 查看windows防火墙,被默认启动了,不启动选择项被Disabled两个提示"由于安全考虑,某些设置由组策略控制""Windows防火墙正在使用您的域设置"

在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连

sql server服务器sqlserver远程连接数据库防火墙在建立与服务器的连接时出错.在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连 在建立与服务器的连接时出错.在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导 致此失败. (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接) 为什么.我已经在SQL的外围配置设置中把他的

PHP连接sql server 2005环境配置

一.Windows下PHP连接SQLServer 2005 设定:安装的Windows操作系统(Win7 或XP均可,其他系统暂未测试),在C盘下:PHP的相关文件位于c:/PHP下面,其配置文件php.ini位于C:\Windows下面. 连接前配置系统: 1.检查文件 php\ntwdblib.dll, 默认PHP的安装目录下面有一个,不能连接再替换. 下载正确版本的 ntwdblib.dll (2000.80.194.0) 2.配置php a.打开php.in将extension=php_

SQL SERVER 2005删除维护作业报错:The DELETE statement conflicted with the REFERENCE constraint "FK_subplan_job_id"

案例环境: 数据库版本: Microsoft SQL Server 2005 (Microsoft SQL Server 2005 - 9.00.5000.00 (X64) ) 案例介绍: 对一个数据库实例做清理工作时,发现有一个很久之前禁用的数据库维护作业,于是遂删除该作业,但是删除该作业时,遇到如下错误: 脚本删除操作: USE [msdb] GO EXEC msdb.dbo.sp_delete_job @job_id=N'876ab683-6d81-47c4-bba2-0dfa581561