我为每小时运行的计划SSIS包随机收到错误。最有趣的是,如果我删除检查点文件并再次运行它,它可以正常工作,但错误可能会在将来运行时出现。我不知道为什么会这样。这是完整的错误消息。
以用户身份执行:UserNameChanged。 Microsoft(R)SQL Server执行 包实用程序版本10.0.2531.0 适用于64位版权所有(C)Microsoft 公司1984-2005。保留所有权利。
开始时间:09:21:40错误:2010-06-24 09:21:45.83代码:0xC0014054
资料来源:保存MaxLSN&提取日期
描述:无法锁定变量 “User :: UpdateProcessControlQuery”for 读取访问错误0xC0010001“ 无法找到变量。这发生了 当试图检索一个 Variables集合中的变量 在执行期间的容器上 包,而变量不是 那里。变量名可能有 改变或变量不存在 已创建。“。结束错误错误: 2010-06-24 09:21:45.84代码: 0xC0024107来源:保存MaxLSN& 提取日期说明:有 任务验证期间出错。 结束错误DTExec:包 执行返回DTSER_FAILURE(1)。 开始时间:09:21:40完成时间:09:21:45 经过:4.875秒。包裹 执行失败。步骤失败了。
除此之外,我还有100多个这样的软件包在一组20个软件包中运行,一小时内有5个组。并且这个“可变锁定”错误在每个循环中至少弹出一次。所以我需要找出根本原因。谁能帮忙......
答案 0 :(得分:5)
我怀疑这与在并行执行的多个组件中写入的相同变量有关。基本上这将是该变量的竞争条件。
例如,如果组件A和组件B可以并行执行并且都写入给定变量,那么当组件B尝试执行时,组件A可能会写入它(使其不可用)。由于两个作业的开始时间在不同的运行之间会有所不同,因此您可以获得包看起来随机失败的情况。
要解决此问题,您需要添加一个额外的变量,以便它们不被共享,或者强制一个组件在另一个组件开始之前完成(通过依赖项)。
希望这有帮助。
答案 1 :(得分:1)
检查并确保任务编辑器中的连接管理器属性。如果您从其他包中复制任务/连接管理器,那么我们必须确保所有属性都已正确重新定义。
答案 2 :(得分:1)
我遇到了同样的问题。修复哪个对我有用:
根本原因:我创建了变量并在#34;数据流"内部使用了它。保持"行计数"的值。在此之后,我试图在"控制Flow"中使用此变量。 > "脚本任务"。它不起作用,并给了我与发布相同的错误。
修复:我创建了变量并在"脚本任务"中使用。在脚本任务中使用后,我在数据流中分配了行计数值>行数。
我看起来很奇怪,但它有效:)
答案 3 :(得分:0)
似乎包中的序列容器缺少一个变量,可能需要从其他作业或父包中获取。我认为它是变量范围或运行时生成变量值的问题。
感谢 prav
答案 4 :(得分:0)
此错误的另一种变化: 我将一个任务从一个包复制到了另一个包。该任务包含参数映射,但是源变量在新软件包中不可用。这使参数映射无效。
答案 5 :(得分:0)
如果运行版本和内部版本不同,则可能会出现此错误。例如,我在2012服务器上构建了该程序包,然后在2016年运行了该程序,并收到了此错误。
答案 6 :(得分:0)
我也面临着同样的问题,但是现在解决了这个问题。 我在我的包中使用了2个foreachloop和2个文件系统任务,在第一个循环中,我将完全合格的excel值分配给一个变量,而在第二个循环中使用的变量相同,这就是为什么出现此问题的原因。 我为第二个循环创建了另一个变量,并将该变量值分配给第二个文件系统任务。 最初,我在两个文件系统任务中仅使用一个变量作为源,现在创建了2个变量,问题已解决。 请参考sanpshot以查看快照中的详细信息。
答案 7 :(得分:0)
调试时出现相同的错误。最小化视觉工作室,我看到了弹出窗口,后面带有错误消息。单击确定按钮在我的Visual Studio中呈现正确的错误。这是关于缺少列映射的。修复后即可使用。