我们注意到最近有一个问题,重新部署的SSIS包有时似乎没有包含最新的更改......当我使用记事本搜索dtsx时,我在代码中看到修改后的脚本,所以更改肯定存在。重新部署SSIS包 - 缓存?
我的假设是,SSIS包的脚本组件最终被编译到程序中的某个程序集中 - 这很可能是因为我想如果没有先编译它,C#代码就无法运行。所以在理论上,如果这些程序集最终会被缓存,并且不会立即被覆盖(出于某种原因),这可以解释这个问题。
使我认为我的理论是正确的唯一“证据”是如果我在某个点继续运行包,它会突然转向新的代码。
但是,到目前为止,我还没有找到为什么以及如何发生这种情况,如果是......任何人都可以帮忙吗?
UPDATE: MSDN说:“不像早期版本,你可以指出脚本是否被预编译,所有的脚本在SQL Server 2008集成服务(SSIS)和更高版本预编译的。” - 如果按预编译的,它们表示代替预编译版本运行的实际程序包(我认为这是因为程序包本身似乎没有编译,因为代码在记事本中是可见的),所以必须有一种方法强制引擎覆盖预编译的程序集......但是如何?
UPDATE: 一个SSIS的四个核心部件是SQL ServerIntegration Services服务,这是一个Windows服务。显然这个服务会缓存组件/任务元数据,以便SSIS运行时引擎可以轮询缓存以查看安装的内容,这可能有助于加快程序包加载时间。但是,如果程序包存储在文件系统中(不在SQL集成服务中)并由代理程序作业执行,代理作业将使用64位版本的DTEXEC来执行程序包。我还没有找到有证据表明任何缓存都会涉及到,但是在执行的验证阶段检查一些参数肯定有选项,例如版本号 - 可能是有原因的。
只是说我们今天在这里有完全相同的问题。重新启动代理程序或SQLSISS都有帮助。 – 2013-05-31 13:24:28
诀窍是从涉及的表中添加和删除列。显然,这不是我们要走的路,我们肯定对这个问题的答案感兴趣 – 2013-06-03 06:22:07
另外:我认为缓存存储在磁盘的某个位置,因为它在服务器重启后仍然存在 – 2013-06-03 06:25:45