2010-06-24 42 views
0

我每小时运行一个计划的SSIS包,随机得到一个错误。最有趣的是,如果我删除检查点文件并再次运行包,它可以正常工作,但在将来运行时可能会显示错误。我不知道为什么会发生这种情况。这是完整的错误信息。“无法锁定变量”SSIS错误

Executed as user: UserNameChanged. Microsoft (R) SQL Server Execute Package Utility Version 10.0.2531.0 for 64-bit Copyright (C) Microsoft Corp 1984-2005. All rights reserved.
Started: 09:21:40 Error: 2010-06-24 09:21:45.83 Code: 0xC0014054
Source: Save MaxLSN & Extract Date
Description: Failed to lock variable "User::UpdateProcessControlQuery" for read access with error 0xC0010001 "The variable cannot be found. This occurs when an attempt is made to retrieve a variable from the Variables collection on a container during execution of the package, and the variable is not there. The variable name may have changed or the variable is not being created.". End Error Error: 2010-06-24 09:21:45.84 Code: 0xC0024107 Source: Save MaxLSN & Extract Date Description: There were errors during task validation. End Error DTExec: The package execution returned DTSER_FAILURE (1). Started: 09:21:40 Finished: 09:21:45 Elapsed: 4.875 seconds. The package execution failed. The step failed.

要添加到这一点,我有超过100个中的一组中的20包和5组在一个小时组运行有这样的包装。而这个'可变锁'错误在每个周期至少会弹出一次。所以我需要找出根本原因。任何人都可以帮助...

回答

3

我怀疑,这是关系到并行执行多个组件写入同一个变量之中。基本上这将是该变量的竞争条件。

例如,如果组件A和组件B可以并行执行,并且都写入给定变量,那么当组件B尝试执行时,组件A可能会写入(使其不可用)。由于这两个作业的开始时间会因运行而异,因此您可以获得软件包随机失败的情况。

要解决此问题,您需要添加其他变量以使它们不共享,或者强制一个组件在另一个组件完成之前(通过依赖关系)完成。

希望这会有所帮助。

0

似乎有一个变量是缺少的序列容器在包中可能需要从其他作业或父包得到。我认为它是运行时变量范围或变量值生成的问题。

感谢 prav

+0

没有。如果是这种情况,为什么在删除检查点文件后程序包运行? – Faiz 2010-06-25 12:14:34

0

检查并确保任务编辑器中的连接管理器属性。如果您从其他软件包复制任务/连接管理器,那么我们必须确保所有属性都已正确重新定义。

0

我有同样的问题。修复哪些为我工作:

根本原因:我已经创建了变量,并在“数据流”内使用它来保存“行计数”的值。在此之后,我试图在“控制流”>“脚本任务”中使用此变量。它没有工作,并给我发布相同的错误。

修复:我创建了变量并在“脚本任务”中使用。在脚本任务中使用后,我在数据流>行计数中分配了行计数的值。

它看起来很奇怪,但它工作:)

相关问题