Questions tagged «ssis»

SQL Server Integration Services,这是Microsoft销售的ETL工具,自SQL Server 2005起与SQL Server版本捆绑在一起。

2
将SSMS连接到Integration Services时“访问被拒绝”
尝试使用特定SQL Server群集的网络名称将SSMS连接到Integration Services时收到以下错误: 连接到计算机“ FooDB”上的Integration Services服务失败,出现以下错误:“访问被拒绝”。 如果尚未将计算机配置为允许通过DCOM进行远程连接,或者用户确实具有通过DCOM访问SQL Server Integration Services服务的权限,则会发生此错误。 这是有据可查的解决方案的常规问题。例如,在此处和此处查看解决方案。 但是,我尝试了所有已知的解决方案,但问题仍然存在。 更详细地说,我已经完成了以下工作: 验证连接的用户具有MsDtsServer100上上面链接到的文章中列出的DCOM权限: 启动和激活权限:允许本地启动,允许远程启动,本地激活,远程激活 访问权限:允许本地访问,允许远程访问 配置权限:允许读取 使用数据包嗅探器确认与连接有关的所有通信都已成功通过防火墙。在断开TCP连接之前显示的最后一个数据包是来自服务器的答复,其中包含Windows状态代码,表示MSRPC标头中的“拒绝访问”。 已测试将用户添加到“分布式COM用户”组和/或本地管理员组,然后重新启动服务器。这允许用户使用本地节点名称(FooDBN1,FooDBN2)从SSMS连接到SSIS,但是当他们连接到群集网络名称(FooDB)时,他们仍然会遇到“拒绝访问”错误。使用以及在其他集群上有效的方法。 另外,我还没有发现在其他集群上必须更改这些组的成员身份。 在检查过的其他群集上,我可以使用群集名称将SSMS连接到SSIS,而无需任何非默认配置。 我意识到这可能更适合ServerFault,并且可以根据需要迁移该问题,但是这也是SQL Server的问题,我认为此处的用户以前更可能会对其进行处理。 平台详细信息: Windows Server 2008 R2 SP1 SQL Server 2008 R2 SP2 具有单个SQL Server实例的2节点主动-被动群集 有人可以建议我接下来在这里看什么吗? 更新:这神秘地从今天开始工作,但仅适用于本地管理员组的成员。据我所知,没有任何改变。

1
从非sysadmin域用户拥有的SQL Agent作业中运行SSIS包
我有两个SSIS程序包,它们作为大型SSIS部署的一部分,在夜间(通过SQL Server代理)按计划运行,没有任何问题。一切都使用Windows身份验证,并且计划的作业由sysadmin(我,我)拥有,并作为 SQL Server代理服务帐户运行。 因此,数据实际上是source system ~> transit db ~> staging ~> NDS通宵达旦的。 我关心的两个SSIS包分别针对一组特定的数据处理transit db ~> staging和staging ~> NDS部分。 域用户(非sysadmin)在中执行某项操作source system,并将感兴趣的数据推入transit db,因此我需要一种在工作时间内获取此更新数据以更新的方法NDS:决定了此人触发的最简单方法通过单击已启用宏的Excel工作簿中的按钮来表示该ETL,该工作簿通过ODBC(使用Windows身份验证)连接到SQL Server并执行存储过程。 存储过程如下所示: create procedure dbo.UpdateMaterialInventory as begin execute msdb.dbo.UpdateMaterialInventory; end [msdb]中的“姐妹”存储过程如下所示: create procedure dbo.UpdateMaterialInventory with execute as 'SqlAgentProxy' as begin execute msdb.dbo.sp_start_job N'NDS-ManualMaterialInventory'; end 此[SqlAgentProxy]用户是我在域用户登录名[msdb]中创建的Windows用户,我已向其授予execute此UpdateMaterialInventory过程的权限。这避免了必须向域用户execute授予msdb.dbo.sp_start_job过多的权限。 SQL Agent作业NDS-ManualMaterialInventory由域用户拥有,并具有2个步骤,每个步骤的类型为[SQL Server …

4
如何查询SSISDB找出软件包中的错误?
我已经看到了这个问题 SSIS 2012-如何在T-SQL中查询当前正在运行的程序包? 它给了我以下脚本: SELECT E.execution_id , E.folder_name , E.project_name , E.package_name , E.reference_id , E.reference_type , E.environment_folder_name , E.environment_name , E.project_lsn , E.executed_as_sid , E.executed_as_name , E.use32bitruntime , E.operation_type , E.created_time , E.object_type , E.object_id , E.status , E.start_time , E.end_time , E.caller_sid , E.caller_name , E.process_id , E.stopped_by_sid …

1
从具有不同用户权限的存储过程中执行SSIS程序包
由于所需的特权级别不同,我在允许我的用户以合理的方式执行SSIS包时遇到问题。 场景:我们创建了一个数据仓库,其中有两个不同的SSIS软件包负责向其中加载数据,一个要自动运行(通过SQL Agent作业,并且运行良好),另一个必须在以下位置运行:一旦上游数据完成并清理等,用户的需求。 该程序包执行非常特权的操作,包括在运行开始时备份数据库(当然),删除和重新创建计算表等。 我已经编写了一个存储过程,以通过[SSISDB]。[catalog]。[create_execution]和[SSISDB]。[catalog]。[start_execution]存储过程来执行此作业。 (我是系统管理员)。 由于SSISDB和MSDB要求执行排队的高级权限,存储过程在由普通用户运行时失败,并且程序包本身由于在其(较低)安全性上下文下运行而失败。 我已经试过: 我试图在存储过程中使用“ Execute As”解决问题,但是由于跨数据库链接问题,Trustworthy标志等而失败。 我还尝试通过让Agent作业运行程序包并仅从存储过程运行Agent作业来解决该问题,但是我很快陷入了一个痛苦的世界,涉及到: 无法按工作设置执行权限 希望通过中央服务器角色配置此访问权限,以适应随时间推移而变化的员工,并且作业只能由一个用户作为所有者 代理帐户,凭据与sql-auth登录等结合使用的黑暗世界 计划C和D 我能想到的唯一的选择就是创建具有提升权限的专用SQL Server登录名,并相信用户不要传递凭据,也不会丢失计划导入的人员的可审核性(在其他方面解决此问题的方法)组织)或自定义构建Web前端,纯粹是为了允许用户认证为“服务器角色”帐户,然后让Web应用在第二个(特权)连接下运行存储过程。 所以.... 是否有关于如何进行以下操作的建议: 让SSIS包执行特权操作 特权较低的用户(使用AD Windows帐户)执行 最好是通过中央服务器角色来管理运行作业的访问权限(我不容易为它们创建新的Windows组) 并且任何新的中级/代理帐户都是SQL Server Auth帐户(同样,对AD进行更改的能力非常有限) 我知道这里有很多活动部件(有些感觉就像是旋转的刀片),所以请让我知道您是否还想念其他信息。 蒂姆,干杯 编辑.... 因此,今天我创建了一个具有ssis_admin权限的专用SQL Server登录,创建了该用户拥有的三个SQL Server Agent作业,并将最终用户调用的存储过程更新execute as为该用户。由于无法调用create executionSQL Server登录名而失败,它需要Windows帐户。 我将用户存储过程更新为execute asWindows帐户,SQL Server以(AD服务帐户)身份运行,并且授予该证书ssis_admin,但失败并显示错误 当前的安全上下文无法还原。请切换到调用“ Execute As”的原始数据库,然后重试。 这并不能很快实现:(

2
批量插入时间差异很大
因此,我有一个简单的批量插入过程,可以从暂存表中获取数据并将其移入我们的数据集市。 该过程是一个简单的数据流任务,默认设置为“每批行数”,选项为“ tablock”和“无检查约束”。 桌子很大。587,162,986,数据大小为201GB,索引空间为49GB。该表的聚集索引为。 CREATE CLUSTERED INDEX ImageData ON dbo.ImageData ( DOC_ID ASC, ACCT_NUM ASC, MasterID ASC ) 主键是: ALTER TABLE dbo.ImageData ADD CONSTRAINT ImageData PRIMARY KEY NONCLUSTERED ( ImageID ASC, DT_CRTE_DOC ASC ) 现在我们遇到了一个问题,即BULK INSERT通过SSIS的运行速度非常慢。1小时插入一百万行。填充表的查询已经排序,并且要填充的查询需要不到一分钟的时间才能运行。 当进程运行时,我可以看到查询正在等待BULK插入,这需要5到20秒的时间,并且显示的等待类型为PAGEIOLATCH_EX。该过程一次只能执行INSERT大约一千行。 昨天,在针对我的UAT环境测试此过程时,我遇到了同样的问题。我运行了几次该过程,试图确定此缓慢插入的根本原因是什么。然后突然之间不到5分钟就开始运行了。所以我又运行了几次,结果都一样。等待5秒或更长时间的散装插入物数量也从数百下降到大约4。 现在,这令人困惑,因为这并不像我们的活动有所减少。 CPU持续时间很短。 速度较慢的时间似乎较少等待磁盘。 实际上,磁盘延迟会在5分钟以内运行该进程的时间内增加。 在此过程运行不佳的时期,IO更低。 我已经检查过了,并且文件没有增长,因为文件仅占70%。日志文件仍有50%可用。数据库处于简单恢复模式。DB仅具有一个文件组,但分布在4个文件中。 所以我想知道的是:为什么我看到那些大批量插入的等待时间如此之长。B:发生了什么魔术使它运行得更快? 边注。今天又像废话一样运行。 UPDATE,当前已分区。但是,这样做的方法充其量只是愚蠢的。 CREATE PARTITION SCHEME …

2
如何实现基于集合的算法/ UDF
我有一个算法,需要对具有800K行和38列的表中的每一行运行。该算法在VBA中实现,并且使用来自某些列的值来操纵其他列来进行一堆数学运算。 我目前正在使用Excel(ADO)来查询SQL,并将VBA与客户端游标一起使用来逐行循环应用该算法。它可以工作,但是需要7个小时才能运行。 VBA代码非常复杂,以至于将其重新编码为T-SQL会花费很多工作。 我已经阅读了有关CLR集成和UDF作为可能路线的信息。我还考虑过将VBA代码放在SSIS脚本任务中,以使其更接近数据库,但可以肯定存在解决此类性能问题的专家方法。 理想情况下,我将能够以基于并行集的方式针对尽可能多的行(所有?)运行算法。 任何帮助都很大程度上取决于如何在此类问题上获得最佳性能。 - 编辑 感谢您的评论,我正在使用MS SQL 2014 Enterprise,这里有更多详细信息: 该算法在时间序列数据中找到特征模式。该算法中的函数执行多项式平滑,加窗,并根据输入标准查找感兴趣的区域,返回十二个值和一些布尔结果。 我的问题更多是关于方法的问题,而不是实际的算法:如果我想一次在多个行上实现并行计算,我有什么选择。 我看到建议重新编码为T-SQL,这是很多工作,但是可能的,但是算法开发人员在VBA中工作,并且更改频繁,因此我需要与T-SQL版本保持同步并重新验证每个更改。 T-SQL是实现基于集合的函数的唯一方法吗?

2
将ExecutionInstanceGUID与SSISDB相关
SQL Server Integration Services的2012年发行版SSIS提供了一个SSISDB目录,该目录可跟踪程序包的操作(以及其他操作)。使用项目部署模型的解决方案的默认程序包执行将打开到SSISDB的日志记录。 程序包执行时,将System::ExecutionInstanceGUID使用一个值填充,如果使用显式日志记录(到sys.sysdtslog90/ sys.sysssislog)将记录特定程序包执行的所有事件。 我想知道的是如何将ExecutionInstanceGUID绑定到SSISDB目录中的任何内容。或者,是否以SSISDB的值执行SSIS包中的SSIS包catalog.executions.execution_id 最终,我尝试使用现有的自定义审核表,并将其链接回SSISDB目录中的详细历史记录,但似乎找不到链接。

4
无法创建SSISDB目录
尝试在sql server 2014集成服务中创建目录时出现以下错误。知道我在安装或其他地方错过了什么吗? 无法访问目录备份文件“ C:\ Program Files \ Microsoft SQL Server \ 120 \ DTS \ Binn \ SSISDBBackup.bak”。确保数据库文件存在,并且SQL Server服务帐户能够访问它(Microsoft.SqlServer.IntegrationServices.Common.ObjectModel)

1
在SSIS包中创建事务时出现问题
我正在处理需要使用事务的程序包,但当前出现以下错误: SSIS package "CATS-Package.dtsx" starting. Information: 0x4004300A at Data Flow Task, SSIS.Pipeline: Validation phase is beginning. Information: 0x4001100A at CATS-Package: Starting distributed transaction for this container. Error: 0xC001401A at CATS-Package: The SSIS Runtime has failed to start the distributed transaction due to error 0x8004D01B "The Transaction Manager is not available.". …

1
如何确定SSIS转换是非阻塞,部分阻塞还是完全阻塞?
有几篇博客声称将SSIS转换分为阻塞(异步),非阻塞(同步)和部分阻塞(异步)。 在研究特定问题时:多播是同步的(非阻塞)还是异步的(部分阻塞)? 一种资源声称异步:“多播是异步(也称为部分阻止)转换” 源:http : //social.technet.microsoft.com/wiki/contents/articles/7392.ssis-multicast-transformation.aspx 另一个同步:https ://jorgklein.com/2009/04/14/ssis-lookup-is-case-sensitive/ 其他资源声称DQS清理转换是非阻塞转换,但在我看来,它是部分阻塞的。 请不要回答按类型分类的转换列表的链接。希望该问题的答案能够提供更严格的方法来证明正确的答案。 由于部分阻塞和阻塞转换会将数据移动到新的缓冲区,而不是在适当的缓冲区上进行非阻塞操作,因此我怀疑解决方案将是在转换执行期间监视缓冲区的创建,但我不确定(a )是否会产生明确的答案,以及(b)怎么做。 我相信无阻塞转换不会导致新的执行树开始,因此答案可能在于记录PipelineExectionTrees和PipelineExecutionPlan。这可以区分同步和异步,但不能区分部分阻塞和完全阻塞。

2
SSIS 2012创建环境变量失败
我正在使用脚本将环境从一台服务器移植到另一台服务器。我遇到一个问题调用,catalog.create_environment_variable其中出现错误“输入值的数据类型与'String'的数据类型不兼容”。从过程“ check_data_type_value”出来。 奇怪的是,如果我让GUI脚本输出变量,该查询将起作用 DECLARE @var sql_variant = N'\\myserver\ssisdata' EXEC [catalog].[create_environment_variable] @variable_name = N'FolderBase' , @sensitive = False , @description = N'' , @environment_name = N'Development' , @folder_name = N'POC' , @value = @var , @data_type = N'String' GO 但是,采用这种脚本方法无效。我所做的工作表明,通常通过使用nvarchar数据类型而不是varchar解决此错误消息。但是,事实并非如此。 以下脚本的第108行。我的假设是sql_variant有点奇怪,但是我不知道那是什么。 USE SSISDB; GO DECLARE @folder_id bigint , @folder_name nvarchar(128) = …

2
ETL:从200个表中提取-SSIS数据流或自定义T-SQL?
根据我的分析,我们数据仓库的完整维模型需要从200多个源表中提取。这些表中的某些将作为增量负载的一部分被提取,而另一些则将作为全负载。 需要注意的是,我们有大约225个具有相同模式的源数据库。 从我所看到的,在具有OLE DB源和OLE DB目标的SSIS中构建简单的数据流要求在设计时确定列和数据类型。这意味着仅用于提取,我最终将获得200多个数据流。 从可维护性的角度来看,这是我遇到的一个大问题。如果需要对提取代码进行某种彻底的更改,则必须修改200个不同的数据流。 另一个选择是,我编写了一个小脚本,该脚本读取要从一组元数据表中提取的源数据库,表名和列。该代码在多个循环中运行,并使用动态SQL通过链接服务器和OPENQUERY从源表中提取。 根据我的测试,这仍然不及将SSIS数据流与OLEDB源和目标一起使用的速度。所以我想知道我有什么样的选择。到目前为止的想法包括: 使用EZAPI以编程方式生成具有简单数据流的SSIS包。要提取的表和列将来自前面提到的相同的元数据表。 购买第三方软件(动态数据流组件) 解决此问题的最佳方法是什么?当涉及到.NET编程时,我是一个初学者,因此仅考虑基础知识所需的时间也是一个问题。

4
处理源LOB列时避免使用“逐行”获取方法
我有一个旧的PostgreSQL数据库源(ODBC),我正尝试使用SSIS迁移到新的SQL Server模式。我收到警告说: 强制执行“逐行”读取方法,因为该表具有LOB列。列的内容是LOB 问题是,该列中的任何一个都不必真正是LOB。有一些是TEXT类型,但可以很容易地放入varchar(max)中。但是,甚至更陌生的人,大多数已经是 varchars,但是似乎将varchar(128)上的所有内容都视为是LOB(在预先的属性中,数据类型为DT_NTEXT)。 我事件尝试执行一条手动SQL命令,其中我在select语句中将每种字符串类型显式转换为适当长度的varchar,并且在ODBC源中仍将它们设置为DT_NTEXT。 我不是DBA,所以我做的事情很愚蠢是完全有可能的。我只想知道确保类型最终成为varchars的最佳方法,这样我就可以批量提取。有任何想法吗? 如果有问题,我将在Visual Studio 2013中使用SSIS-BI 2014。

2
由于潜在的数据丢失,无法转换该值。
已关闭。这个问题需要细节或说明。它当前不接受答案。 想改善这个问题吗?添加细节并通过编辑此帖子来澄清问题。 5年前关闭。 首先,让我澄清这不是一个重复的问题,也不是这个问题的潜在重复。我已经尝试过在StackOverflow和DBA Stack Exchange上解决此问题的每个单个变体的所有答案,但是没有任何运气。 在过去的两天里,我一直在努力解决这个问题(每天大约工作7个小时),即使在谷歌搜索问题之后,似乎也没有其他人对我的问题有完全相同的解决方案。 我想做什么? 在SSIS中,我试图从CSV文件中读取内容,并将其中的行插入到OLE DB数据库中。为此,我进行了有史以来最简单的设置,如下所示。 Flat File Source -读取CSV行。 Derived Column -目前不执行任何操作(仅在此处进行实验)。 Data Conversion -目前不执行任何操作(仅在此处进行实验)。 OLE DB Destination -将行存储在数据库中。 当我尝试运行它时,它将停止在我的OLE DB目标上执行,并显示以下错误消息。 输入“ OLE DB目标输入”(51)上的输入列“金额”(187)出错。返回的列状态为:“由于潜在的数据丢失,无法转换该值。”。 失败(Amount)的列当前为类型DT_STR。这似乎是我目前最信任的类型。 我尝试了什么? 我尝试在Flat File Connection失败的列上使用“建议类型”功能。因此,建议使用Single byte signed int数据类型。 在我的平面文件源处停止。 错误是数据转换失败。列“金额”的数据转换返回状态值2和状态文本“由于潜在的数据丢失,无法转换该值”。 我尝试使用Derived Column将列转换为DT_I4。 停在我的派生列。 错误是数据转换失败。列“金额”的数据转换返回状态值2和状态文本“由于潜在的数据丢失,无法转换该值”。 我尝试使用将该Data Conversion列的值转换为DT_I4。 停在我的Data Conversion。 错误是数据转换失败。列“金额”的数据转换返回状态值2和状态文本“由于潜在的数据丢失,无法转换该值”。 我尝试更改DT_STR源和目标中我的值的长度。 根据设置在源或目的地停止。 …

4
是否可以使用SQL Server评估版开发SSIS
我们正在考虑购买SQL Standard Server来实施ETL via SSIS。由于这对我们来说非常昂贵,因此我想在免费版本上测试开发SSIS软件包。由于快速版本未集成SSIS,因此我想在SQL Server 2014 的评估版180过期版本上进行尝试,但找不到任何有关 - Is it possible - Are there limitations. 有人可以帮我吗?
11 sql-server  ssis 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.