我正在尝试在SQL2012服务器上设置新的SQL代理作业。在定义作业步骤类型= SSIS包时,sql代理设置崩溃,我收到以下错误:
''抛出异常的类型初始值设定项。 (SQLManagerUI)附加信息:尝试读取或写入受保护的内存。这通常表明其他内存已损坏。 (DTEParseMgd)
其他帖子建议唯一的解决方法是安装SQL2014或2016,或返回SQL2008。这些选项都不适合我们。
出于安全原因,我们不得不放弃SQL2008。我们无法迁移到SQL2014,因为我们使用的是访问adp项目前端,这需要在SQL2014中过时的SQLOLEDB数据提供程序。
有没有人知道微软是否已经发布了针对SQL2012的服务补丁,该补丁修复了这个问题?
答案 0 :(得分:2)
内存错误听起来像服务器问题,但在您追踪到这一点之前,这里有一个解决方法:将作业步骤类型设置为"操作系统(CmdExec)",然后使用{{ 1}},例如:
DTEXEC
请注意,如果SSIS包需要32位执行(例如,对于导出到Excel,则为true),然后在" Program Files(x86)"中使用DTEXEC实用程序。完全符合条件。例如,SQL Server应用程序安装在" E:"驱动器,以及使用SQL Server 2014的地方:
DTExec /DTS "\<ssisPkgName>" /DECRYPT <pkgPass> /MAXCONCURRENT " -1 " /CHECKPOINTING OFF
如果您的SSIS包在文件系统中(如&#34; .dtsx&#34;文件),则替换&#34; / DTS&#34;用&#34; / FILE&#34;。
如果您的SSIS包放在SSISDB中(使用&#34;项目部署模型&#34;,从SQL Server 2012开始提供,而不是旧的&#34;包部署模型&#34;),然后替换&#34; / DTS&#34;与&#34; / ISSERVER&#34;
最后,考虑一下你的工作步骤&#34;运行为&#34;:如果你的工作步骤&#34;运行为&#34;已经设置为代理,然后你已经创建了代理&#34;活跃&#34;到子系统&#34; SQL Server Integration Services Package&#34;。现在,要执行上述命令行,请检查代理的属性,并确保它也是&#34; active&#34;到子系统&#34;操作系统(CmdExec)&#34;。 (如果您不使用代理,那么您可能需要为SQL作业代理添加&#34;操作系统(CmdExec)&#34;但代理更安全:为什么授予内容对于代理商,您只会在特定情况下使用?)
(P.S。附带好处:有了上述内容,我发现从SSIS包中获取日志更容易。)