【问题标题】:Release Lock on variables used in Execute Process Task | SSIS释放执行流程任务中使用的变量的锁定 | SSIS
【发布时间】:2017-11-11 05:04:26
【问题描述】:

我有一个包含 Foreach ContainerExecute Process TaskForEach Container 内的包。在执行流程任务中出现一些错误时,它会重定向到 ForEach ContainerOnError 事件处理程序。

我使用任务的 StandardErrorvariable 属性从 .exe 捕获错误,并在 OnError 事件处理程序中存在的脚本任务中使用它。

脚本任务失败说

错误:尝试锁定变量时检测到死锁 “用户::ErrorExcelName,用户::ErrorFolder,用户::ErrorMessage, User::FileName" 用于读取访问。在 16 之后无法获取锁 尝试并超时。

如何解决这个问题?

【问题讨论】:

  • 是什么导致了死锁?
  • 我认为执行进程任务没有释放变量,脚本任务同时访问它。所以脚本任务在 16 次尝试后失败。

标签: sql-server variables ssis etl executeprocesstask


【解决方案1】:

您可以通过在代码中显式管理变量锁定来轻松解决问题。 (不向ReadOnlyVariablesReadWriteVariables 属性添加变量。

string strFilename;
Variables lockedVariables = null;
Dts.VariableDispenser.LockOneForRead("FileName", ref lockedVariables);
strFilename = lockedVariables["FileName"].Value;
lockedVariables.Unlock();

参考文献

【讨论】:

  • 感谢@Hadi,但结果又是负面的。我在脚本块中添加了try catch,并添加了上面几行代码。当我运行时,我在 catch 块中遇到了相同的旧死锁错误。我们如何确定 Execute Process Task ** 已释放其所有变量。根据您发送的链接,变量被释放并锁定在使用和稍后解锁。 **Task 是否仍在使用它?
  • 尝试设置 execute process taskscript task Delay validation 属性 = True,变量可能在验证阶段被锁定
  • 不,如果我向脚本任务添加延迟验证..它甚至没有在调试模式下打开脚本窗口及其循环..我观察到另一件事..我很少有 console.writeline()' s 在我的应用程序中,但是当我将任何变量添加到 Execute Process TaskProcess 选项卡时,屏幕会淡出并且没有任何显示
  • @Hadi 我也有类似的问题,你能帮我看看吗stackoverflow.com/questions/70187327/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多