日期:2014-05-17  浏览次数:20519 次

SQL Server 2005创建作业执行SSIS包失败,请教高手
高手们
请指教
我用SQL Server 代理创建作业执行SSIS包总是执行不成功,是怎么回事啊?
SSIS包在其它地方执行正常。


------解决方案--------------------
参考:

--功能概述:定义创建作业
--做成时间:2008/09/25
(http://topic.csdn.net/u/20081209/14/00568bc9-442a-49e3-84d8-108ebf991ddb.html?seed=2120734022)
DECLARE @jobid uniqueidentifier, @jobname sysname
SET @jobname = N'作业名称'

IF EXISTS(SELECT * FROM msdb.dbo.sysjobs WHERE name=@jobname)
BEGIN
EXEC msdb.dbo.sp_delete_job @job_name=@jobname
EXEC msdb.dbo.sp_add_job @job_name = @jobname,@job_id = @jobid OUTPUT

--定义作业步骤
DECLARE @sql nvarchar(4000),@dbname sysname
SELECT @dbname=DB_NAME(), --作业步骤在当前数据库中执行
@sql=N'--作业步骤内容' --一般定义的是使用TSQL处理的作业,这里定义要执行的Transact-SQL语句
EXEC msdb.dbo.sp_add_jobstep
@job_id = @jobid,
@step_name = N'作业步骤名称',
@subsystem = 'TSQL', --步骤的类型,一般为TSQL
@database_name=@dbname,
@command = @sql

--创建调度(使用后面专门定义的几种作业调度模板)
EXEC msdb..sp_add_jobschedule
@job_id = @jobid,
@name = N'调度名称',
@freq_type=4, --每天
@freq_interval=1, --指定每多少天发生一次,这里是1天.
@freq_subday_type=0x8, --重复方式,0x1=在指定的时间,0x4=多少分钟,0x8=多少小时执行一次
@freq_subday_interval=1, --重复周期数,这里每小时执行一次
@active_start_date = NULL, --作业执行的开始日期,为NULL时表示当前日期,格式为YYYYMMDD
@active_end_date = 99991231, --作业执行的停止日期,默认为99991231,格式为YYYYMMDD
@active_start_time = 00000, --作业执行的开始时间,格式为HHMMSS
@active_end_time = 235959 --作业执行的停止时间,格式为HHMMSS
END

------解决方案--------------------
当从 SQL Server 代理程序作业步骤中调用 SSIS 包时,不运行 SSIS 包

症状当从 SQL Server 代理程序作业步骤中调用一个 Microsoft SQL Server 2005 Integration Services (SSIS...当从 SQL Server 代理程序作业步骤中调用一个 Microsoft SQL Server 2005 Integration Services (SSIS) 包时, 不会运行 SSIS 包。 但是,如果您不要修改 SSIS 包,它将运行成功 SQL Server 代理之外。

原因

以下条件之一时会出现此问题:
用来运行该程序包在 SQL Server 代理该用户帐户不同于原始程序包作者。
用户帐户没有所需的权限,可连接或访问 SSIS 包之外的资源。
包可能无法运行在下列情况中: 
当前用户无法从包解密机密信息。 如果当前帐户或执行帐户不同于在原的包作者软件包的 ProtectionLevel 属性设置不允许当前用户解密数据包中的秘密,可能发生这种情况。
使用集成的安全性的 SQL Server 连接失败,原因当前用户所需的权限。 
文件访问失败,原因当前用户所需的权限写入连接管理器访问的文件共享。 例如,这种情况下可能出现与文本日志提供程序不使用登录名和密码。 这种情况下也会发生与文件连接管理器,如不是 SSIS 文件系统任务所依赖的任何任务。
在基于注册表的 SSIS 包配置使用 HKEY _ CURRENT _ USER 注册表项中。 HKEY _ CURRENT _ USER 注册表项是用户特定。
任务或连接管理器则要求当前用户帐户具有正确的权限。


解决方案

要解决此问题,请使用以下方法之一。 最合适的方法取决于环境和包失败的原因。 
回到顶端
方法 1: 使用 SQL Server Agent 代理帐户
创建一个 SQL Server Agent 代理帐户。 此代理帐户必须使用允许 SQL Server 代理运行作业,以创建包的帐户或具有所需的权限的帐户的凭据。 

此方法来解密密钥的工作并满足用户的密钥需求。 但是,此方法可能有限成功因为 SSIS 包用户密钥涉及当前用户并在当前计算机。 因此,如果在将包移动到另一台计算机时,此方法可能仍然无法,即使作业步骤使用正确的代理帐户。 
回到顶端
方法 2: 将 SSIS 包 ProtectionLevel 属性设置为 ServerStorage
将 SSIS 包 ProtectionLevel 属性更改 ServerStorage。 此设置将存储在 SQL Server 数据库中包并允许通过 SQL Server 数据库角色的访问控制。
回到顶端
方法 3: 将 SSIS 包 ProtectionLevel 属性设置为 EncryptSensitiveWithPassword
将 SSIS 包 ProtectionLevel 属性更改 EncryptSensitiveWithPassword。 此设置使用用于加密的密码。 然后可以修改 SQL Server 代理程序作业步骤命令行将此密码。 
方法 4: 使用 SSIS 包的配置文件
使用 SSIS 包的配置文件来存储敏感的信息,然后将这些配置文件存储在安全文件夹中。 包未加密,从而不会尝试将秘密保存到该程序包,您可以然后更改到 DontSaveSensitive ProtectionLevel 属性。 如果您在中运行,SSIS 程序包从配置文件中加载所需的信息。 请确保将包含敏感信息都充分保护配置文件。 
方法 5: 创建包模板
获得长期的解决办法创建一个包模板使用不同于默认设置的保护级别。 此问题不会在将来的包。