我从存储过程执行包时遇到问题。工作结束后,我收到错误:
Microsoft(R)SQL Server执行包实用程序版本11.0.2100.60 适用于64位版权所有(C)Microsoft Corporation。版权所有。 NULL开始:09:47:51错误:2014-06-11 09:47:51.34代码: 0xC0011007来源:{4B0EFACA-9BE8-4E0B-AEF7-A1453AF75271}
描述:由于包的原因,无法将包加载为XML 没有有效的XML格式。将出现特定的XML解析器错误 发布。结束错误错误:2014-06-11 09:47:51.34代码:0xC0011002
资料来源:{4B0EFACA-9BE8-4E0B-AEF7-A1453AF75271}描述:失败 打开包文件" \ server \ path \ Package.dtsx"由于错误 0x80070005"访问被拒绝。"。加载包时会发生这种情况 并且无法将文件正确打开或加载到XML中 文献。这可能是指定不正确的文件名的结果 调用LoadPackage或指定的XML文件时有错误 格式。结束错误无法加载包" \ server \ path \ Package.dtsx" 因为错误0xC0011002。说明:无法打开包文件 " \服务器\ Package.dtsx"由于错误0x80070005"访问被拒绝。"。 加载包时会发生这种情况,无法打开文件或 正确加载到XML文档中。这可能是结果 调用LoadPackage时指定不正确的文件名 指定的XML文件格式不正确。资源: {4B0EFACA-9BE8-4E0B-AEF7-A1453AF75271}开始时间:09:47:51完成: 09:47:51 Elapsed:0.047秒NULL
步骤如下:
创建包含3个用户变量packageId[INT]
,connectionString[string]
,sourcePath[string]
packageId
是一些专栏connectionString
用于查找,目标来源 - 在表达式中定义sourcePath
是CSV
档案创建插入表变量并启动作业的程序
示例执行:
(1行受影响)
Job' Package'开始成功了。
创建工作
我的查询:
DECLARE @ConnectionString VARCHAR(1000)
DECLARE @PackageId INT
DECLARE @DataName NVARCHAR(2000)
DECLARE @DtsxName NVARCHAR(200)
DECLARE @PackagePath NVARCHAR(200)
DECLARE @DataPath NVARCHAR(200)
SELECT @DtsxName = 'TemporaryPackage'
SELECT @PackagePath = '\\server\path\'
SELECT @DataPath = '\\server\path\Data\'
IF EXISTS (SELECT * FROM PackageImport p WHERE p.dtsxName = @DtsxName AND p.startImport IS NULL)
BEGIN
SELECT @ConnectionString = p.connectionString, @PackageId = p.packageId, @DataName = p.sourcePath
FROM PackageImport p WHERE p.dtsxName = @DtsxName AND p.startImport IS NULL
END
DECLARE @SQLQuery AS VARCHAR(2000)
SET @SQLQuery = 'DTExec.exe /FILE "\"' + @PackagePath + @DtsxName + '.dtsx\""'
+ ' /SET \Package.Variables[User::ConnectionString].Properties[Value];"\"'+ @ConnectionString + '\""'
+ ' /SET \Package.Variables[User::PackageId].Properties[Value];"\"'+ CAST(@PackageId as varchar(10)) + '\""'
+ ' /SET \Package.Variables[User::SourcePath].Properties[Value];"\"'+ @DataPath + @DataName + '\""'
UPDATE dbo.PackageImport
SET [startImport]=GETDATE()
WHERE [packageId]=@PackageId AND [dtsxName] = @DtsxName AND [startImport] IS NULL
-- import
DECLARE @result INT
DECLARE @output TABLE( [ssisOutput] varchar(max) )
INSERT INTO @output
EXEC @result = master..xp_cmdshell @SQLQuery
INSERT INTO PackageHistory(packageId, history)
SELECT @PackageId, ssisOutput FROM @output o
UPDATE dbo.PackageImport
SET [stopImport]=GETDATE()
WHERE [packageId]=@PackageId AND [dtsxName] = @DtsxName AND [stopImport] IS NULL
GO
所有者作业是SQLSERVERAGENT,并且具有对\ server \ path
的读/写权限有谁知道问题是什么,可以帮助我?
答案 0 :(得分:0)
如果此程序包:\ server \ path \ Package.dtsx存储在与SQL Agent中执行的服务器不同的服务器上,则可能会出现双跃点问题。无论如何,尝试使用代理可能是值得的。 以下是一些信息:http://technet.microsoft.com/en-us/library/dd440761(v=sql.100).aspx
答案 1 :(得分:0)
我找到了简单的解决方案。我改变了变量 SELECT @PackagePath ='\ server \ path \' SELECT @DataPath ='\ server \ path \ Data \'
到
SELECT @PackagePath ='C:\' SELECT @DataPath ='C:\'
我知道这不是最好的解决方案,但我尝试更改sql_serveragent的权限,但问题仍然存在。
答案 2 :(得分:0)
我找到了另一种解决方案,对我来说最合适。 在文件夹C:\ Program Files \ Microsoft SQL Server \ 110 \ DTS \ Packages中 为我的指定包和数据文件创建文件夹,并在READ上更改组用户的权限并且正常工作。