【问题标题】:SQL Job executing SSIS - Could not complete cursor operation because the table schema changed after the cursor was declared执行 SSIS 的 SQL 作业 - 无法完成游标操作,因为在声明游标后表架构已更改
【发布时间】:2016-11-11 09:01:38
【问题描述】:

这几天我一直在尝试解决这个问题,但是在网络上搜索时没有一个问题可以直接解释为什么我会收到这个错误,因为在这个包上没有执行光标。

我有一个执行 SSIS 包的 SQL 作业 - 这里对这个包进行了详细解释:

如上所示,发生了许多架构更改,这最终可以解释为什么我会收到此错误,但是当手动执行包并且仅通过 SQL 作业执行时,此错误似乎永远不会发生。它似乎也是自发发生的,有一天它起作用了,然后它给我这个错误:

Microsoft (R) SQL Server Execute Package UtilityVersion 10.50.4000.0 for 64-bitCopyright (C) Microsoft Corporation 2010。保留所有权利。开始时间:上午 04:30:00 错误:2016-11-11 04:31:35.91 代码:0xC0202009 来源:加载到暂存数据库 加载到暂存数据库 [114] 描述:SSIS 错误代码 DTS_E_OLEDBERROR。发生 OLE DB 错误。错误代码:0x80004005。OLE DB 记录可用。来源:“Microsoft SQL Server Native Client 10.0” Hresult:0x80004005 描述:“无法完成游标操作,因为在声明游标后表架构已更改。”。结束错误错误:2016-11-11 04:31:35.92 代码:0xC0209029来源:加载到暂存数据库 加载到暂存数据库 [114] 描述:SSIS 错误代码 DTS_E_INDUCEDTRANSFORMFAILUREONERROR。 “输入“OLE DB 目标输入”(127)”失败,因为发生错误代码 0xC020907B,并且“输入“OLE DB 目标输入”(127)”上的错误行处置指定错误失败。指定组件的指定对象发生错误。在此之前可能会发布错误消息,其中包含有关失败的更多信息。结束 ErrorError:2016-11-11 04:31:35.92 代码:0xC0047022 源:加载到暂存数据库 SSIS.Pipeline 描述:SSIS 错误代码 DTS_E_PROCESSINPUTFAILED。在处理输入“OLE DB 目标输入”(127) 时,组件“加载到暂存数据库”(114) 上的 ProcessInput 方法失败,错误代码为 0xC0209029。已识别的组件从 ProcessInput 方法返回错误。该错误是特定于组件的,但该错误是致命的,将导致数据流任务停止运行。在此之前可能会发布错误消息,其中包含有关失败的更多信息。结束 ErrorError:2016-11-11 04:31:36.06 代码:0xC02020C4 源:加载到暂存数据库中检索 ITExtr03FinM 1 描述:尝试添加行到数据流任务缓冲区失败,错误代码为 0xC0047020。End ErrorError:2016-11-11 04:31:36.11 代码:0xC0047038 源:加载到暂存数据库 SSIS.Pipeline 描述:SSIS 错误代码 DTS_E_PRIMEOUTPUTFAILED。组件“检索 ITExtr03FinM”(1) 上的 PrimeOutput 方法返回错误代码 0xC02020C4。当管道引擎调用 PrimeOutput() 时,组件返回了失败代码。失败代码的含义由组件定义,但错误是致命的并且管道停止执行。在此之前可能会发布错误消息,其中包含有关失败的更多信息。结束 ErrorDTExec:程序包执行返回 DTSER_FAILURE (1)。开始时间:04:30:00 AMFinished: 04:31:36 AMElapsed: 95.859 秒

上述错误确实提到了Load into Stageing Database - 该数据流任务中包含以下内容:

有人能解释一下这个异常吗?有没有办法解决这个问题?

【问题讨论】:

  • 您在 11 月 6 日是否进行了与架构相关的任何更改?包裹在 6 号之前是否完美运行?您是否检查了事件日志以查看在此期间是否有任何其他作业/进程会以任何方式访问文件或表或数据库?暂存表上的依赖对象呢?

标签: sql-server ssis sql-job


【解决方案1】:

通读错误我相信回答问题的关键不是光标,而是错误的这些部分:

  • 组件“Retrieve ITExtr03FinM”(1) 上的 PrimeOutput 方法返回错误代码 0xC02020C4
  • DTS_E_PRIMEOUTPUTFAILED
  • 加载到暂存数据库检索 ITExtr03FinM 1 描述:尝试向数据流任务缓冲区添加行失败,错误代码为 0xC0047020

关于 SqlServerCentral 的讨论建议将 RAM/内存缓冲区配置作为一个问题 https://ask.sqlservercentral.com/questions/46865/ssis-data-flow-task-getting-error-code-0xc02020c4.html

此链接表明存在 32 位与 64 位的问题。您在服务器上使用 64 位本地和 32 位吗? SSIS ERROR: The attempt to add a row to the Data Flow task buffer failed with error code 0xC0047020

我发现了更多链接表明 RAM 是一个问题,这将说明为什么它在一台机器上会成为问题,而在另一台机器上不会,因为配置会有所不同。此外,如果您在服务器的大量使用时间内运行包,那么您的操作可用的内存就会减少。

【讨论】:

    【解决方案2】:

    检查服务器上其他 SQL 代理和维护任务的计划,特别是凌晨 4:30 左右。您的程序包失败的最一致时间是凌晨 4:30,我敢打赌,有一个重新索引、统计更新或其他此类程序包同时运行与您的程序包冲突。

    也可能发生与您的包冲突的复制。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多