Thursday, February 21, 2013

FATAL ERROR : An unexpected condition occured in file odbcdriver.cpp line 511

I've got a mapping populating number of MS SQL Server tables. For each of the targets I've got two pipelines: Insert and Update. Upstream, there is a dynamic lookup checking if a paritcular row already exists and fetching its Identity Sequence. Then there is a router that splits the flow into two mentioned:

  • Insert flow does not use the Sequence anymore - the port is not connected as the column uses Identity property so the DB takes care of creating new value
  • Update flow uses the Sequence fetched by the lookup to update the correct target row.
I got the following behavior when I tried to execute the workflow:
  • Session has been initiated
  • Source row have been read
  • Just when I expected target rows to show up, the session failed. The last two lines in the sesssion log were like this:
INFO {Timestamp} {Node} {Thread} {Message Code} Start loading table [TableName] at:
FATAL  {Timestamp} {Node} *********** FATAL ERROR : An unexpected condition occured in file [/export/home/builds/pc9x_root/910HF/build/powrmart/common/odl/msodbc/odbcdriver.cpp] line [511]. Aborting the DTM process.  Contact Informatica Global Customer Support. ***********


It took me a while before finding the root cause. I've been working a lot lately with Sybase and I got used to using 'numeric identity' for a port type when the underlying table column was set to Identity. So after creating the target definition, I switched the port type from 'bigint' to 'numeric identity'. Here is the column definition in DB:
CREATE TABLE [dbo].[TableName] (
   [Sequence] [bigint] IDENTITY(1,1) NOT NULL, ... )


There seems to be an issue with that, because after swiching back to bigint, the workflow run fine.



1 comment:

  1. Thanks! I was going crazy! Your tip totally helped me! THANKS!

    ReplyDelete