SSIS包从SSMS开始工作,而不是从代理工作开始
我有一个SSIS包来加载networking驱动器的excel文件。 它旨在加载内容,然后将文件移动到存档文件夹。
以下SQL语句在SSMS窗口中运行时,一切正常。
但是,当它复制到SQL代理作业并从那里执行时,文件既不加载也不移动。 但是它从代理日志中显示“成功”。
同样的事情也发生在“SSIS工作”,而不是T-SQL工作,即使代理的Windows帐户。(与ssmslogin相同的帐户)
Declare @execution_id bigint EXEC [SSISDB].[catalog].[create_execution] @package_name=N'SG_Excel.dtsx', @execution_id=@execution_id OUTPUT, @folder_name=N'ETL', @project_name=N'Report', @use32bitruntime=True, @reference_id=Null Select @execution_id DECLARE @var0 smallint = 1 EXEC [SSISDB].[catalog].[set_execution_parameter_value] @execution_id, @object_type=50, @parameter_name=N'LOGGING_LEVEL', @parameter_value=@var0 EXEC [SSISDB].[catalog].[start_execution] @execution_id GO
PS首先应用networking驱动器的相对path,然后切换到绝对path(\\ server \ folder)。 这不是解决问题。
SSIS包作业在SQL Server代理的上下文中运行。 在SQL Server上设置了哪个帐户来运行SQL Server代理? 它可能需要以有权访问networking共享的域帐户运行。
或者您可以将Excel文件复制到SQL Server上的本地文件夹,以便软件包可以访问该文件。
我个人避免了文件系统任务 – 我发现它不可靠。 我会用脚本任务replace它,并使用System.IO命名空间中的.NET方法,例如File.Move 。 这些方法更可靠,并具有成熟的error handling。
这是System.IO命名空间的起点:
https://msdn.microsoft.com/en-us/library/ms404278.aspx
请确保使用“ 其他版本”链接select相关的.NET版本。
当我过去看到过这样的事情时,我的软件包没有访问我以为是在运行时的path,它正在寻找其他地方,find一个空的文件夹并退出成功。
SSIS可以有一个讨厌的习惯,回到可变的默认值。 它可能正在看你在开发中使用的不同path? 也许硬编码的所有path值作为testing? 或放入中断点并仔细检查所有variables和参数的运行时间值。
其他远投可能是:
-
名称parsing,你确定networking名称在运行时是否正确parsing?
-
32/64位的问题。 开发者倾向于运行32位,活着可能是64位。 可能会干扰文件path? 运行时可能强制为32位?
没有声明结束符( ; )的sql语句存在问题。
Declare @execution_id bigint ; EXEC [SSISDB].[catalog].[create_execution] @package_name=N'SG_Excel.dtsx', @execution_id=@execution_id OUTPUT, @folder_name=N'ETL', @project_name=N'Report', @use32bitruntime=True, @reference_id=Null ; Select @execution_id ; DECLARE @var0 smallint = 1 ; EXEC [SSISDB].[catalog].[set_execution_parameter_value] @execution_id, @object_type=50, @parameter_name=N'LOGGING_LEVEL', @parameter_value=@var0 ; EXEC [SSISDB].[catalog].[start_execution] @execution_id ; GO
我在服务经纪人面临类似的问题..