SQL 服务器 - SSIS 2008 R2 完成,但出现错误"Violation of PRIMARY KEY constraint"



我已经找到了一些关于这个的链接,但到目前为止还没有一个有答案的。

问题:SSIS 2008 R2包从SQL 2000数据库(转换项目)的许多表(约160)导入数据到新的结构。这已经干净地运行了很多次。需要说明的是,数据似乎实际上是正确导入的。然而,最后3次,我遇到了这个错误。下面消息中显示的Task (54) Source(269)是最后一个步骤,也是该步骤中的项。

我已经确认,作为"重复键冲突"提到的表实际上与源表有相同的49166条记录。似乎它几乎只是线程或已经过的时间(长时间运行查询)的问题。我在最后一步中截断了5个表,并重新运行了这个单一的Task 54,它完成得很好,都是绿色的。

如果不需要在整个过程中因为红鲱鱼而去寻找就好了。有什么想法如何解决这个问题,使报告干净吗?

感谢

下面的错误信息:

以user: [mask]执行。Microsoft (R) SQL Server Execute Package Utility Version 10.50.6000.34 for 64位Copyright (C) Microsoft Corporation 2010。版权所有。开始:4:36:46 PM错误:2015-05-20 16:36:48.49代码:0xC0016016来源:描述:解密受保护的XML节点"DTS:Password"失败,错误0x8009000B "Key not valid for use in specified state."。您可能未被授权访问此信息。当存在加密错误时,会发生此错误。验证是否有正确的密钥。结束错误Error: 2015-05-20 16:36:48.50 Code: 0xC0016016来源:描述:解密受保护的XML节点"DTS:Password"失败,错误0x8009000B "Key not valid for use in specified state."。您可能未被授权访问此信息。当存在加密错误时,会发生此错误。验证是否有正确的密钥。结束错误错误:2015-05-20 17:19:33.78代码:0xC0202009来源:数据流任务54目的269 - cadNotificationStatus[396]描述:SSIS错误码dtse_oledberror。发生OLE DB错误。错误码:0x80004005。有OLE DB记录可用。来源:"Microsoft SQL Server Native Client 10.0" Hresult: 0x80004005描述:"The statement has been terminated."。有OLE DB记录可用。来源:"Microsoft SQL Server Native Client 10.0" Hresult: 0x80004005描述:"违反PRIMARY KEY约束'PK__cadNotif__25843E4F1B0907CE'。无法在对象'dbo.cadNotificationStatus'中插入重复键。重复键值为(4,2)。结束错误错误:2015-05-20 17:19:33.79代码:0xC0209029来源:数据流任务54目的269 - cadNotificationStatus[396]描述:SSIS错误码dtse_inducedtransformfailureonerror。"输入"OLE DB目的地输入"(409)"失败,因为发生了错误代码0xC020907B,并且"输入"OLE DB目的地输入"(409)"上的错误行处理指定错误失败。在指定组件的指定对象上发生错误。在此之前可能会发布错误消息,其中包含有关失败的更多信息。结束错误错误:2015-05-20 17:19:33.79代码:0xC0047022来源:数据流任务54 SSIS。管道描述:SSIS错误码dtse_processinputfailed。在处理"OLE DB Destination input"(409)输入时,组件"Destination 269 - cadNotificationStatus"(396)上的ProcessInput方法失败,错误码为0xC0209029。标识的组件从ProcessInput方法返回一个错误。该错误是特定于组件的,但该错误是致命的,并将导致Data Flow任务停止运行。在此之前可能会发布错误消息,其中包含有关失败的更多信息。结束错误Error: 2015-05-20 17:19:33.81 Code: 0xC02020C4来源:数据流任务54来源269 - cadNotificationStatus[218]描述:尝试向数据流任务缓冲区添加一行失败,错误码0xC0047020。结束错误错误:2015-05-20 17:19:33.81代码:0xC0047038来源:数据流任务54 SSIS。管道描述:SSIS错误代码dtse_primeoutputfailed。组件"Source 269 - cadNotificationStatus"(218)的PrimeOutput方法返回错误码0xC02020C4。当管道引擎调用PrimeOutput()时,组件返回一个失败代码。失败代码的含义由组件定义,但错误是致命的,管道停止执行。在此之前可能会发布错误消息,其中包含有关失败的更多信息。End Error DTExec:包执行返回DTSER_FAILURE (1). Started: 4:36:46 PM Finished: 5:19:34 PM Elapsed: 2568.01秒。包执行失败。步骤失败。

根据错误,在'dbo中插入重复记录时失败。cadNotificationStatus"表。是否有逻辑只从源表中导入SQL 2000中的新记录,这些记录不存在于目标表中?否则,数据流任务向该表导入数据将失败。

看起来,它运行成功,因为你截断了表,然后再次导入整个数据。如果您能提供更多关于源查询的信息,就会更清楚。

只是为了100%确定我会将行重定向到导致您出现问题的平面文件。这将允许您查看导致失败或触发错误消息的行项。这个链接提供了一个很好的教程:

http://www.techbrothersit.com/2013/07/ssis-how-to-redirect-invalid-rows-from.html

从安全的角度来看,你的错误输出中似乎有更多的内容:

描述:解密受保护的XML节点"DTS:Password"失败,错误0x8009000B "Key not valid for use in specified state."您可能未被授权访问此信息。

我的猜测是其他人创建了这个包并使用:"EncryptSensitiveWithUserKey"…

我建议:

导入包到SQL Server时,选择保护级别:要么

1-不要保存敏感数据。

2-依赖服务器存储和角色进行访问控制

相关内容

最新更新