gpt4 book ai didi

sql - SSIS间歇性变量错误: The system cannot find the file specified

转载 作者:行者123 更新时间:2023-12-04 14:44:58 27 4
gpt4 key购买 nike

我们的 SSIS 将一个结构化的控制包和许多从控制包调用的子包(大约 30 个)打包在一起。使用执行包任务调用子包。每个子包有一个执行包任务。每个执行包任务都使用文件连接管理器来指定子包 dtsx 文件的路径。每个子包有一个文件连接管理器。每个文件连接管理器都有一个为 ConnectionString 属性定义的表达式。这个表达式看起来像这样:

@[Template::FolderPackages]+"MyPackage.dtsx" 

每个包的文件名都不同。变量 (FolderPackages) 在 SSIS 包配置文件中指定。

运行时产生的错误是

Error 0x80070002 while loading package file "MyPackage.dtsx"

系统找不到指定的文件。“失败的包因运行而异,有时根本没有包失败。这是在完全相同的环境/数据等上运行时。

我在这个错误期间运行了 FileMon,发现当错误发生时,SSIS 试图从错误的位置读取 dtsx 文件,即从 system32。我检查了这是否与 @[Template::FolderPackages] 变量为空时发生的情况相同,但是因为每个子包都使用了相同的变量并且对某些子包有效但有时对其他包不起作用,所以我没有对这一事实的解释。

任何明显的事情,或者是时候向 Microsoft 调用支持电话?

最佳答案

您是否直接在 SSIS 变量上使用表达式?每次需要使用它的消费对象引用变量时,都会计算带有表达式的变量。这就是存在竞争条件错误的地方,因为有时如果另一个线程已经在评估不同的变量,则表达式不会被评估,并且变量的默认值被提供给消费者对象。

如果这符合您的设计,连接站点上的这两个错误将讨论问题和解决方法:

https://connect.microsoft.com/SQLServer/feedback/details/332372/ssis-variable-expressions-dont-always-evaluate

第二个在connect.microsoft.com/SQLServer/feedback/details/406534/ssis-2008-variable-expressions-dont-always-evaluate

解决方法的总结是{- 注意可以在您的 SSIS 控制流中运行的并行任务并利用这些表达式变量。如果你有两个并排的任务,如果每个任务都依赖于同一个变量,并且该变量有一个表达式来设置它的值,那么你可以点击它。手动对此类任务进行排序,以便它们不会并行运行。 IE。在控制流上添加一个绿色箭头,以便任务按 Task1、Task2、Task3 的顺序发生,而不是在并行路径上并排发生,而不是在没有路径的同一容器内发生。

  • 您可以避免使用变量表达式:使用执行相同类型工作的自制脚本任务按要求的顺序分配局部变量,这样变量就不会使用表达式求值(即可以命中的东西这种竞争条件)。换句话说,在您的控制流中的某个时间点手动分配变量值,就在它们被使用之前。在变量上使用表达式的要点是在使用时根据另一个值动态设置一个值,因此这实现了类似的设计目标,但采用手动方式。

  • 减少线程以最大限度地降低潜力:将数据流任务 EngineThreads 设置为 1,将 MaxConcurrentExecutables 设置为 1。这将有助于将您的包的执行顺序化为一次一个任务,但这样做的副作用可能会导致性能下降.

  • 在设计中的不同范围级别为不同的变量副本创建和设置值,以便它们在不同的并行执行范围内进行评估,避免在并行线程上进行表达式评估。 Master::Var1, Child1::Var1, Child2::Var1

关于sql - SSIS间歇性变量错误: The system cannot find the file specified,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1779767/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com