由于错误0x80131534"(null)",程序包无法加载。当CPackage :: LoadFromXML失败时会发生这种情况

时间:2015-10-07 01:13:31

标签: ssis sql-server-2012

我在SQL Server" 9"上运行了以下批处理文件。这是一个SSIS 2012包,没有连接,没有任务,没有代码。这是一个空包装。

ECHO before dtexe!
REM "DTExec.exe" /FILE "E:\SSIS\MyAppName\Packages\Empty2012Package.dtsx"
"D:\SQL2012\110\DTS\Binn\DTExec.exe" /FILE "E:\SSIS\MyAppName\Packages\Empty2012Package.dtsx"
SET RESULT=%errorlevel%
ECHO RESULT AFTER DTEXEC=%RESULT%
exit /B %RESULT%

这是我的输出:

----------------------------------------------------------------
Output of messages for workload object TEST/GHG1990R.28/MAIN
Start date Tue Oct 06 20:45:38 2015
----------------------------------------------------------------

C:\Users\MyServerId>ECHO before dtexe!
before dtexe!

C:\Users\MyServerId>REM "DTExec.exe" /FILE "E:\SSIS\MyAppName\Packages\Empty2012Package.dtsx"

C:\Users\MyServerId>"D:\SQL2012\110\DTS\Binn\DTExec.exe" /FILE "E:\SSIS\MyAppName\Packages\Empty2012Package.dtsx"
Microsoft (R) SQL Server Execute Package Utility
Version 11.0.5058.0 for 64-bit
Copyright (C) Microsoft Corporation. All rights reserved.

Started: 8:45:39 PM
Could not load package "E:\SSIS\MyAppName\Packages\Empty2012Package.dtsx" because of error 0x80131534.
Description: The package failed to load due to error 0x80131534 "(null)". This occurs when CPackage::LoadFromXML fails.
Source: {BA581388-EFF5-4BC7-89E7-48E11D6DF0AE}
Started: 8:45:39 PM
Finished: 8:45:39 PM
Elapsed: 0.094 seconds

C:\Users\MyServerId>SET RESULT=5

C:\Users\MyServerId>ECHO RESULT AFTER DTEXEC=5
RESULT AFTER DTEXEC=5

C:\Users\MyServerId>exit /B 5

无论我是使用32位还是64位DTEXEC实用程序运行,都会收到相同的错误。当我对另一个SQL Server,服务器" 80"上的同一个包运行相同的批处理文件时,我没有收到任何错误。

所有软件包都在服务器80上工作,9都没有工作。我每次都在服务器9上遇到上述错误。

当我在80和9上执行此操作时,

select @@version

我得到了相同的结果

Microsoft SQL Server 2012 - 11.0.5058.0 (X64) 
    May 14 2014 18:34:29 
    Copyright (c) Microsoft Corporation
    Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)

我能够在9上成功使用sqlcmd和bcp实用程序,但不能成功使用dtexec实用程序。

我得到的错误似乎表明我正在使用旧版本的dtexec来打开更新的软件包,例如,尝试使用SQL 2008 dtexec util来执行新的SQL 2012软件包。

显然,软件包没有损坏,因为所有软件包都在80上工作,而exct文件的副本都不能正常工作。

我唯一能想到的是SQL Server的安装问题,例如,损坏的安装或未注册的dll。

据我所知,这是在这些机器上安装的第一个也是唯一一个SQL Server版本,所以我不能用新的2012软件包来运行旧版本的DTEXEC。

这是完整的Empty2012Package.dtsx文件:

<?xml version="1.0"?>
<DTS:Executable
  DTS:refId="Package" xmlns:DTS="www.microsoft.com/SqlServer/Dts"
  DTS:ExecutableType="SSIS.Package.3"
  DTS:CreatorName="MyDOMAIN\MyLanId"
  DTS:CreatorComputerName="MYCPTR"
  DTS:CreationDate="7/2/2015 8:26:52 AM"
  DTS:PackageType="5"
  DTS:VersionBuild="2"
  DTS:VersionGUID="{00FD1F37-6375-4942-91D3-9ECA0B131FFD}"
  DTS:LastModifiedProductVersion="11.0.2100.60"
  DTS:LocaleID="1033"
  DTS:ObjectName="Empty2012Package"
  DTS:DTSID="{1539BA56-F17B-438E-A874-A2151F2F79C5}"
  DTS:CreationName="SSIS.Package.3">
  <DTS:Property
    DTS:Name="PackageFormatVersion">6</DTS:Property>
  <DTS:Variables />
  <DTS:Executables />
  <DTS:DesignTimeProperties><![CDATA[<?xml version="1.0"?>
<!--This CDATA section contains the layout information of the package. The section includes information such as (x,y) coordinates, width, and height.-->
<!--If you manually edit this section and make a mistake, you can delete it. -->
<!--The package will still be able to load normally but the previous layout information will be lost and the designer will automatically re-arrange the elements on the design surface.-->
<Objects
  Version="sql11">
  <!--Each node below will contain properties that do not affect runtime behavior.-->
</Objects>]]></DTS:DesignTimeProperties>
</DTS:Executable>

由于我使用SQL 2012创建dtsx文件,我知道这是2012年的一个包。但是,根据这个网页,

http://www.techbrothersit.com/2014/09/ssis-how-to-find-version-of-ssis.html

PackageFormatVersion为6表示2012年套餐。

我无法访问服务器以查看每个dtexec.exe文件的版本。我希望尽快得到这些信息。

当我在80上运行相同的批处理文件时,如上所述,它可以工作:

 ----------------------------------------------------------------
 Output of messages for workload object C1_GHG1_TEST/GHG1999I.11/MAIN
 Start date Tue Oct 06 22:21:08 2015
 ----------------------------------------------------------------

 C:\Users\MyServerId>ECHO before dtexe! 
 before dtexe!

 C:\Users\MyServerId>REM "DTExec.exe" /FILE "E:\SSIS\MyAppName\Packages\Empty2012Package.dtsx" 


     C:\Users\MyServerId>"D:\SQL2012\110\DTS\Binn\DTExec.exe" /FILE "E:\SSIS\MyAppName\Packages\Empty2012Package.dtsx" 
     Microsoft (R) SQL Server Execute Package Utility
     Version 11.0.5058.0 for 64-bit
     Copyright (C) Microsoft Corporation. All rights reserved.

     Started:  10:21:08 PM
     DTExec: The package execution returned DTSER_SUCCESS (0).
     Started:  10:21:08 PM
     Finished: 10:21:08 PM
     Elapsed:  0.203 seconds

     C:\Users\MyServerId>SET RESULT=0 

     C:\Users\MyServerId>ECHO RESULT AFTER DTEXEC=0 
     RESULT AFTER DTEXEC=0

     C:\Users\MyServerId>exit /B 0 

关于可能导致此错误的任何想法?我认为这是服务器SQL Server安装问题,而不是我可以控制的东西。

你的想法?

更新

问题与安全权限有关。当我们尝试在CA Scheduler udner MyServiceID中运行作业时,有权访问该框的管理员然后检查了事件日志并发现了以下错误:

未在此计算机上授予用户请求的登录类型。

此外,当本地Admin组中的用户远程访问此服务器并启动相同的批处理文件时,作业将成功运行。

根据此链接,

https://technet.microsoft.com/en-us/library/cc732593(v=ws.10).aspx

可以通过授予“允许用户在本地登录”权限来解决错误。&#34;用户已被授予&#34;允许登录为批处理&#34;权利。当我在网络用户MyServiceId&#34;从命令行命令,我也看到ID是活动的,并且始终允许在所有工作站上使用。

当我请求&#34;允许用户在本地登录时#34;权利被授予,显然甚至是&#34;管理员&#34;无法授予此权利,因为组策略不允许这样做。因为这是发生这种情况的唯一服务器,所以我想知道这个服务器有什么不同,假设所有serevrs共享相同的组策略。我们注意到的一件事是dtsx文件中的OWNER属性不是MyServiceId和环境。我没有改变这一点的权利,但我不知道这是什么。 MyServiceAccount可以完全控制批处理文件和包所在的文件夹。

更新2 由于这现在显然是一个安全问题,如果我在陈述已知事实后尝试陈述问题,也许会有所帮助:

  1. MyServiceId具有对本地文件夹E:\ SSIS \ MyAppName \ Packages \的执行访问权限,其中包含SSIS包
  2. MyServiceId具有对DTEXEC所在的本地文件夹D:\ SQL2012 \ 110 \ DTS \ Binn \的执行权限
  3. MyServiceId在服务器上具有LogOn As Batch权限。
  4. MyServiceId是所有服务器和工作站上允许的活动帐户
  5. 问题: 鉴于调用DTEXEC的简单的一行批处理文件将包路径作为参数传递,可能导致我得到的错误的原因是什么?还有什么我可以寻找的东西? Sicne&#34;允许用户在本地登录&#34;永远不会在其他服务器上设置,这个服务器上可能有什么不同导致此错误:

    The user has not been granted the requested logon type at this machine.
    

    dtsx文件的OWNER属性的值是否相关?

    更新3 调用进程名称:C:\ Windows \ System32 \ LSASS.exe

    这是暗示吗?

    更新4

    在生产中,它工作的地方,服务ID正在执行,网络登录类型为3,这是交互式的。在9,它给我们这个错误,它正在执行登录类型2,这是交互式的。 (我们没有选项打开&#34;允许本地登录&#34;对于9上的uyser。这是禁止的。

    在同一个域上的2台不同计算机上运行的相同ID会占用不同的用户类型吗?

2 个答案:

答案 0 :(得分:1)

我将SQL service account更改为本地系统。我的SSIS服务也仅从本地系统运行。

因此,理想情况下,我们可以尝试将两个帐户保留为同一服务帐户。

注意::仅当我们无法更改SQL代理服务帐户的访问权限时,才需要应用此操作。

答案 1 :(得分:0)

我在工作站上修改machine.config文件后不久就遇到了这个错误。我在machine.config中解决了我的问题(我在错误的父节点下放置了一个节点),这个错误就消失了。

不幸的是,由于错误含糊不清,这可能不适合您的情况。只是想我会分享它以帮助某人。