Folks,

 

I just handled a scenario with Customer using SAP BI Connector 1.0 for SSIS. I wanted to share the known issue I have encountered and the steps to resolve this. While the SAP BI side configurations continue to remain a sort of a black box for us, I am seeing that most Customers are having SAP consultants on their site who are making sure that SAP configurations are okay and it is sending data to the SSIS Engine.  Below is the case study.

 

Case Study:

 

Symptoms:

========================

#. Using SSIS 2008 (10.0.2723 Sql 2008 SP1 CU3)

#. Using the SAP BI Connector 1.0 and SAP BI Source Task

#. When the SSIS Package is run from BIDS the Package hangs on the source task and never completes. In package Progress tab, the last message we see is "The component is waiting for a notification"

#. When run from command line using DTEXEC.exe we may or may not get this message. Sometimes it will throw the error depending on the environment:

 

In x86 environment the error message and the call stack would be:

 

System.OutOfMemoryException

at System.String.PadHelper(Int32 totalWidth, Char paddingChar, Boolean isRightPadded)

at Microsoft.SqlServer.Dts.SapBw.Connectivity.RFCStructure..ctor(RFCTableColumnCollection Columns)

at Microsoft.SqlServer.Dts.SapBw.Connectivity.RFCParameter.RetrieveColumnsByStructure(R3Connection Connection, String StructureName)

at Microsoft.SqlServer.Dts.SapBw.Connectivity.R3Connection.AddParametersAndTablesToUndefinedFunctionObject(RFCFunction& Dest, String Name)

at Microsoft.SqlServer.Dts.SapBw.Connectivity.R3Connection.CreateFunction(String Name)

at Microsoft.SqlServer.Dts.SapBw.Components.OHSExtractor.CheckMetadata()

at Microsoft.SqlServer.Dts.SapBw.Components.OHSExtractor.ExtractNow(Boolean InRuntimeMode, String GatewayHost, String GatewayService, String ProgramID, String ProcessChain, String DestinationName, String ExecutionMode, String PropertyRequestID, Int32 Timeout)

 

In x64 environment, the error message and the call stack would be:

 

Description: System.ArgumentOutOfRangeException: Non-negative number required.

Parameter name: totalWidth

   at System.String.PadHelper(Int32 totalWidth, Char paddingChar, Boolean isRightPadded)

   at Microsoft.SqlServer.Dts.SapBw.Connectivity.RFCStructure..ctor(RFCTableColumnCollection Columns)

   at Microsoft.SqlServer.Dts.SapBw.Connectivity.RFCParameter.RetrieveColumnsByStructure(R3Connection Connection, String StructureName)

   at Microsoft.SqlServer.Dts.SapBw.Connectivity.R3Connection.AddParametersAndTablesToUndefinedFunctionObject(RFCFunction& Dest, String Name)

   at Microsoft.SqlServer.Dts.SapBw.Connectivity.R3Connection.CreateFunction(String Name)

   at Microsoft.SqlServer.Dts.SapBw.Components.OHSExtractor.CheckMetadata()

   at Microsoft.SqlServer.Dts.SapBw.Components.OHSExtractor.ExtractNow(Boolean InRuntimeMode, String GatewayHost, String GatewayService, String ProgramID, String ProcessChain, String DestinationName, String ExecutionMode, String PropertyRequestID, Int32 Timeout)

 

Cause:

===================

#. There is a reported bug for this component in the Microsoft.SqlServer.SapBiComponents.dll.

 

BUG DETAILS:

============

BUG in SAP Data Connector 1.0

 

RFC#313260

Promoted RFC to QFE 329507

Bug #: 117545

Bug DB: Content Maintenance

 

#. This bug exists till Sql Server 2008 SP1 CU3 build:10.0.2723

 

Resolution:

==============

#. We have a private Fix from the Product group which is available at PSS.

#. The version of the Microsoft.SqlServer.SapBiComponents.dll would be upgraded to 10.0.2729.0

#. We tested this fix for both x86 and x64 systems and the issue was resolved.

 

HOWEVER, IT IS STRONGLY NOT RECOMMENDED TO USE SUCH PRIVATE BUILDS IN PRODUCTION. EVERYONE SHOULD WAIT FOR THE OFFICIAL RELEASE OF THIS FIX WHICH WOULD BE SHIPPED WITH SQL SERVER 2008 SP1 CU4!

 

HOWEVER, IF ANYONE IS FACING THE ISSUE AND WANT TO TEST OUT THE PRIVATE FIX, CONNECT WITH ME OFFLINE TO GET THE PATCHED DLL!

 

Steps to install the Fix:

===========================

Uncompress the attached fix-64bit-release.zip (or the 32 BIT one) to d:\tmp (or any other directory). Run “cmd” under administrator mode:

 

“gacutil /if d:\tmp\Microsoft.SQLServer.SapBiComponents.dll”

 

Gacutil.exe is a .Net utility you could find in your system disk.

 

If you see feedbacks like “Assembly successfully added to the cache”, it means the dll has been replaced:

 

Now the connector should work. To verify it, we will print a log at the beginning of extraction or loading: “This is the private build from PCU Main”.

 

Possible Errors and solutions during replacing the dll

=======================================================

 

1. “Access Denied”: Please make sure run “cmd” under administrator mode if your UAC is on.

2. “failed to validate strong name”: Since the dll is a private build, it has not been fully signed. We should set a flag to let .Net CLR skip the strong name validation. Run the following command:

“sn -Vr *” and then re-run the gacutil command. Sn.exe is also a .net utility you can find in your system disk.

3. If there are some other strange error happens after you replace the dll, make sure what you installed is the latest SAP BI Connector version (April 2009, not October 2008):

 

http://www.microsoft.com/downloads/details.aspx?FamilyID=b33d2c78-1059-4ce2-b80d-2343c099bcb4&displaylang=en

 

Phase 1 Update Dec 12, 2009:

 

CU4 for Sql Server 2008 SP1 is available now:

http://support.microsoft.com/kb/973602 

This has the Dll patched !!

 

Cheers !

Debs