为什么TrackedMessages_Copy_BizTalkMsgBoxDb开始失败"查询处理器无法生成查询计划"?

时间:2016-12-16 15:00:26

标签: biztalk biztalk-2010 sql-agent-job

为什么TrackedMessages_Copy_BizTalkMsgBoxDb SQL代理作业开始失败"查询处理器无法生成查询计划"?

  

由于此查询中定义的提示,查询处理器无法生成查询计划。重新提交查询而不指定任何提示,也不使用SET FORCEPLAN。 [SQLSTATE 42000](错误8622)。

我们的SQL人员正在谈论修改存储过程。但我们告诉他们将BizTalk数据库视为black box

2 个答案:

答案 0 :(得分:1)

您是否尝试更新存储过程引用的数据库表的统计信息(由SQL Server代理作业运行?查询规划器使用这些统计信息来决定如何最好地执行SQ​​L。

答案 1 :(得分:1)

不言而喻,但在此之前,请确保备份您的数据库。实际上,如果您的常规备份作业正在运行,您可以恢复备份并将其与 在此服务器上工作时进行比较。那说 -

  1. 检查SQL代理作业以确保没有添加其他步骤/没有强制计划/没有使用提示;它应该只有一个名为'Purge'的步骤,它将DB服务器和DTA数据库名称作为参数调用下面的过程。
  2. 检查程序(BizTalkMsgBoxDb.dbo.bts_CopyTrackedMessagesToDTA)以确保其未被更改。
  3. 如果这是一个生产或其他敏感的框,请在继续之前备份数据库并将其恢复到本地开发环境!

    1. 如果这不是生产,请查看您是否可以直接在SSMS中运行该过程(可能在您回滚的事务中)。看看你是否得到了更好的错误。添加打印语句,看看是否可以找到确切的提示。
    2. 如果程序无法运行,请考虑释放过程缓存(DBCC FREEPROCCACHE)并查看该过程是否会运行。
    3. 如果它在您的开发环境中从备份运行,您可能必须开始查看服务器/数据库设置。我想不出哪些可能会导致这个错误的问题。

      对于它的价值,善意的DBA经常打破BizTalk。他们认为索引缺失或未正确覆盖,或者安全性可能得到改善,或者数据库应该像对待管理的其他数据库一样对待。我已经看到DBA对BizTalk数据库做了非常愚蠢的事情,很难诊断出来。