【发布时间】:2017-10-28 04:40:50
【问题描述】:
我们的 SSIS 封装了一个结构化的控制包和从控制包调用的许多子包(大约 30 个)。子包通过执行包任务调用。每个子包有一个执行包任务。每个执行包任务都使用文件连接管理器来指定子包 dtsx 文件的路径。每个子包有一个文件连接管理器。每个文件连接管理器都有一个为 ConnectionString 属性定义的表达式。这个表达式看起来像这样:
@[Template::FolderPackages]+"MyPackage.dtsx"
每个包的文件名不同。变量 (FolderPackages) 在 SSIS 包配置文件中指定。
运行时产生的错误是
加载包文件“MyPackage.dtsx”时出现错误 0x80070002
系统找不到指定的文件。”失败的包因运行而异,有时根本没有包失败。这是在完全相同的环境/数据等上运行时。
我在此错误期间运行了 FileMon,发现当错误发生时,SSIS 会尝试从错误的位置(即 system32)读取 dtsx 文件。我检查了这与@[Template::FolderPackages] 变量为空时会发生的情况相同,但是因为相同的变量用于每个子包并且适用于某些子包但有时对其他人不起作用,我没有解释这个事实。
有什么明显的问题,或者是时候向 Microsoft 发起支持电话了吗?
【问题讨论】:
-
你能延迟加载下一个包吗?所有的包都在同一个目录吗?您是否为软件包设置了绝对路径,以帮助确保它不会进入 System32?
-
我们都试过了。阻止它的唯一可靠方法是在包中具有与 Prod 系统相同的绝对路径,以便当配置加载失败时,它会退回到 Prod 位置。不过,这显然在开发环境中很糟糕。仅供参考,微软正在用堆栈跟踪和所有血淋淋的细节来挖掘这个案例。看起来像一个真正的错误。