SSIS 2008 und ein Bug im SQL Server Native Client

10. August 2012

Bei einem unserer Kunden ist während der Migration von SQL Server 2005 auf SQL Server 2008R2 ein interessanter Bug aufgetreten. Der Bug konnte nur sporadisch in einem relativ komplexen SSIS-Paket auf der SQL Server 200R2 Maschine beobachtet werden und äußerte sich in fatalen Ausführungsabbrüchen mit einer Fehlermeldung im SQL Server Profiler

“Error: 8004, Severity: 16, State: 1. The incoming tabular data stream (TDS) remote procedure call (RPC) protocol stream is incorrect. The RPC name is invalid” .

Auf der SSIS-Seite war die Fehlermeldung noch weniger aussagekräftig:

An OLE DB record is available. Source: "Microsoft SQL Server Native Client 10.0" Hresult: 0x80040E21 Description: "Invalid input parameter values. Check the status values for detail.".
Error: 0xC020901C at Data Flow Task, OLE DB Command [66]: There was an error with input column "ErrorNumber" (101) on input "OLE DB Command Input" (71). The column status returned was: "The status value given to the provider was not valid.".

Nach einigen Iterationen konnten wir feststellen, dass es die eigentlich verbesserte parallele Ausführung im SSIS 2008 DataFlow ist, die zusammen mit einem Bug im SQL Server Native Client (SNAC) das Problem verursacht. Die Ausführung nach dem Austauschen des SNAC Providers gegen den veralteten OLE DB Provider für SQL Server führte z.B. zu keinen Fehlern.

Das Problem kann man auch in einem recht einfachem DataFlow nachbilden:

DataFlow

Es bleibt zu hoffen, dass der ODBC Provider, der für post-Denali Entwicklungen von Microsoft empfohlen wird,  dieses (und einige andere) Probleme löst.

Das Paket und Skripte zum Reproduzieren des Problems findet man auf Microsoft Connect.