sql-server - 如何确定SSIS转换中的错误行/列

标签 sql-server postgresql ssis

我正在运行 DTSX 包,使用 PGOLEDB native Postgres 驱动程序将数据从 SQL 移动到 Postgres,但收到错误(如下)。如何读取此错误并确定导致问题的行/列?

我收到以下错误 (PGNP-SE-1.4.3076):

OnError,POSTGRESDEV,DOMAIN\USERNAME,Data Flow Task 9,{1EE44D97-78DD-4175-8162-2520654A750A},{F27E0BD1-8850-4497-BD9B-BDAFA7BDA401},10/4/2012 8:46:13 AM,10/4/2012 8:46:13 AM,-1071636471,0x,SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80004005.
An OLE DB record is available. Source: "PostgreSQL Native Provider" Hresult: 0x80004005 Description: "ERROR: invalid byte sequence for encoding "UTF8": 0x96
CONTEXT: COPY TransHist, line 390
".

OnError,POSTGRESDEV,DOMAIN\USERNAME,full_export_new,{79EBE819-217A-4AB2-BF58-45A6D6A3B4B8},{F27E0BD1-8850-4497-BD9B-BDAFA7BDA401},10/4/2012 8:46:13 AM,10/4/2012 8:46:13 AM,-1071636471,0x,SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80004005.
An OLE DB record is available. Source: "PostgreSQL Native Provider" Hresult: 0x80004005 Description: "ERROR: invalid byte sequence for encoding "UTF8": 0x96
CONTEXT: COPY TransHist, line 390
".

OnError,POSTGRESDEV,DOMAIN\USERNAME,Data Flow Task 9,{1EE44D97-78DD-4175-8162-2520654A750A},{F27E0BD1-8850-4497-BD9B-BDAFA7BDA401},10/4/2012 8:46:13 AM,10/4/2012 8:46:13 AM,-1071607767,0x,SSIS Error Code DTS_E_INDUCEDTRANSFORMFAILUREONERROR. The "input "Destination Input" (95)" failed because error code 0xC020907B occurred, and the error row disposition on "input "Destination Input" (95)" specifies failure on error. An error occurred on the specified object of the specified component. There may be error messages posted before this with more information about the failure.

OnError,POSTGRESDEV,DOMAIN\USERNAME,full_export_new,{79EBE819-217A-4AB2-BF58-45A6D6A3B4B8},{F27E0BD1-8850-4497-BD9B-BDAFA7BDA401},10/4/2012 8:46:13 AM,10/4/2012 8:46:13 AM,-1071607767,0x,SSIS Error Code DTS_E_INDUCEDTRANSFORMFAILUREONERROR. The "input "Destination Input" (95)" failed because error code 0xC020907B occurred, and the error row disposition on "input "Destination Input" (95)" specifies failure on error. An error occurred on the specified object of the specified component. There may be error messages posted before this with more information about the failure.

OnError,POSTGRESDEV,DOMAIN\USERNAME,Data Flow Task 9,{1EE44D97-78DD-4175-8162-2520654A750A},{F27E0BD1-8850-4497-BD9B-BDAFA7BDA401},10/4/2012 8:46:13 AM,10/4/2012 8:46:13 AM,-1073450974,0x,SSIS Error Code DTS_E_PROCESSINPUTFAILED. The ProcessInput method on component "Destination 40 - TransHist" (82) failed with error code 0xC0209029 while processing input "Destination Input" (95). The identified component returned an error from the ProcessInput method. The error is specific to the component, but the error is fatal and will cause the Data Flow task to stop running. There may be error messages posted before this with more information about the failure.

OnError,POSTGRESDEV,DOMAIN\USERNAME,full_export_new,{79EBE819-217A-4AB2-BF58-45A6D6A3B4B8},{F27E0BD1-8850-4497-BD9B-BDAFA7BDA401},10/4/2012 8:46:13 AM,10/4/2012 8:46:13 AM,-1073450974,0x,SSIS Error Code DTS_E_PROCESSINPUTFAILED. The ProcessInput method on component "Destination 40 - TransHist" (82) failed with error code 0xC0209029 while processing input "Destination Input" (95). The identified component returned an error from the ProcessInput method. The error is specific to the component, but the error is fatal and will cause the Data Flow task to stop running. There may be error messages posted before this with more information about the failure.

更新: 我认为编码错误是一个转移注意力的问题。当我运行它时,它在第 1000 行失败(成功写入 999 行)。如果我将源更改为将结果限制为少于 1000 行(例如 500 行)的 View ,它将成功(但显然并非所有数据都被移动)。如果我将目标连接字符串更改为 BULK_INSERT=500...它将在第 500 行失败,如果我将 View 更改为小于 500,它将成功。

更新2: 将 BULK_INSERT 设置为 0 可以解决该问题...但我确信这会对性能产生负面影响。

最佳答案

确定哪些行造成错误的快速方法是将错误行为从默认的“失败组件”更改为“重定向行”,然后将错误输出通过管道传输到平面文件。

enter image description here

对于您的特定错误,关键消息是:

"ERROR: invalid byte sequence for encoding "UTF8": 0x96

Google 搜索该字符串会返回一些结果,表明存在字符串编码问题。 Here's a link从 google 结果回到 stackoverflow。

您可以尝试使用数据转换任务在数据流任务中指定正确的编码,或者您可以在目标系统上进行调整(但是我对 Postgres 不太熟悉,所以无法帮助您)

关于sql-server - 如何确定SSIS转换中的错误行/列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12750423/

相关文章:

sql-server - SQL Server : sys. master_files 与 sys.database_files

sql-server - 按值分组并从 T-SQL 中的每个组的点(纬度和经度)创建地理折线

sql - 使用计算值枚举两个日期之间的年份

postgresql - 无法在容器之间建立连接

sql - 如何在 SQL Server 中动态比较源表和目标表中的行

sql-server - Visual Studio 2013 生成错误 : Incompatible versions of SQL Server Data Tools and database runtime components are installed on this computer

sql-server - 特殊字符(下标)未正确显示

postgresql - 如何用数组创建异常的解析器?

sql - SSIS:Excel 源代码 - 是否可以跟踪在 excel 中所做的更改?

c# - 如何在源数据流脚本组件中使用 SSIS 数据集?