作者:郑佐
日期:2006-9-27
1. 使用Sql适配器调用存储过程出现“HRESULT="0x80004005" Description="事务与另一个进程被死锁在锁资源上,并且已被选作死锁牺牲品。请重新运行该事务。
错误信息:
适配器无法传输要发往发送端口“SendPort_SendHead_Sql”(URL 为“SQL://localhost/testDb/”)的消息。在为该发送端口指定的重试时间间隔过后,将会重新传输该消息。详细信息:“HRESULT="0x80004005" Description="事务(进程 ID 103)与另一个进程被死锁在锁资源上,并且已被选作死锁牺牲品。请重新运行该事务。"”。
解决办法:
可能的解决方式如下,http://support.microsoft.com/default.aspx?scid=kb%3Bzh-cn%3B833190
根据以上链接地址提供的处理方式,笔者没有完全解决问题。下面是补充:在应用程序的发送端口属性中,选择“传输高级选项”卡,选中“按序到达”复选框。对于“当前消息失败后停止发送随后的消息”子复选框看具体情况而定。通过以上设置问题解决。笔者认为产生这个的原因会很多,多个应用程序访问同一数据库同一表,如果处理不当,造成死锁,就会出现该问题。笔者认为此类解决问题的关键还是在Sql语句或存储过程对表的访问是否设计的合理,并不是BizTalk Server 单个系统可解决。
2. SQL Server Scheduled Job 'TrackedMessages_Copy_BizTalkMsgBoxDb'失败
错误信息:
SQL Server Scheduled Job 'TrackedMessages_Copy_BizTalkMsgBoxDb' (0xE0586DA84D856C4FB003C5FC5405EDF4) - Status: 失败 - Invoked on: 2006-08-30 15:39:00 - Message: 该作业失败。 计划 7 (Schedule) 调用了该作业。最后运行的是步骤 1 (Purge)。
解决办法:
查看计划任务执行的的语句为“exec bts_CopyTrackedMessagesToDTA '计算机名', 'BizTalkDTADb'”。查看错误记录,提示需要添加指定的SqlServer服务器为链接服务器。由于笔者使用的系统BizTalk应用服务器同Sql Server 2005服务器安装在同一台服务器上,结果提示变成为把本机添加到链接服务器,是不是很奇怪?通过Sql Server 2005的“服务器对象”节点无法添加本地服务器到链接服务器。于是执行添加链接服务器的存储过程(master.dbo.sp_addlinkedserver),结果不行,同事在本地添加一个异地链接服务器,然后通过“编写链接服务器脚本为”菜单导出链接服务器脚本,对生成的脚本修改服务器名,在BizTalk所在的服务器上执行,结果添加成功。问题解决,计划任务运行正常。笔者再次访问“服务器对象”节点时,看到新添加的本机服务器,查看该属性,在选项页中,无法查看“安全性”和“服务器选项”,提示“您不能将本地SQL Server 创建为链接服务器”。 难道是bug?