OCI - Job aborts but records still commit

Post questions here relative to DataStage Server Edition for such areas as Server job design, DS Basic, Routines, Job Sequences, etc.

Moderators: chulett, rschirm, roy

Post Reply
chulett
Charter Member
Charter Member
Posts: 43085
Joined: Tue Nov 12, 2002 4:34 pm
Location: Denver, CO

OCI - Job aborts but records still commit

Post by chulett »

Having an odd issue I've never seen before and wondering if perhaps anyone else has. Hopefully I can lay this out in such a manner as to make it fairly easy to digest... we shall see. Sorry, but it's going to be kinda long. :wink:

At a very high level I'm finding that uncommitted rows can still be committed even if the job aborts. :shock: When the problem was first brought to me I said "no way" but we confirmed it and then I was able to replicate it. The tests I've run are for a very specific error - ORA-01400 Cannot insert null - but my gut tells me that this would happen for any error.

When Oracle pushes an error back up from OCI into a Server job's log, it actually logs three warnings for each occurrence. For me, those were:

Code: Select all

W) TestOCICommit..TEST_OCI: The value of the row is: TEST_ROW = NULL RUN_DATE = 2009-08-13 09:51:42
W) TestOCICommit..TEST_OCI: ORA-01400: cannot insert NULL into ("DM_DSS_STAGE"."TEST_OCI"."TEST_ROW")
W) TestOCICommit..TEST_OCI: DBMS.CODE=ORA-01400
After all of these have been logged, you get one final warning from the stage:

Code: Select all

W) TestOCICommit..TEST_OCI.Insert_New: DSP.Close Error -100 in $DSP.Close.
We routinely use a Transaction Size of 0 in the OCI stage to get an "all or nothing" load and expect an abort to roll everything back. What I'm finding is that certain combinations of the input record count, the Array Size and the Warning Limit you use to run the job can affect that and make things work in an 'unexpected' manner. Specifically...

The issue seems to center around how a "partially filled" array is handled when you only send that one array of data to the database. Using an Array Size of 1 means you'll never see this issue. If the count of rows you are sending to Oracle are greater than the Array Size you'll never see this issue. But if the first array is also the last array of rows you send and it is only partially full, that is when I can see this issue. My specific problem reported was for loading 49 rows where 1 (the last row) was bad with an Array Size of 128. So the first array was the last array and it wasn't full. Now, it may be very unlikely that your record count is smaller than the Array Size but it can happen for small volumes, hence my concern.

The baffling part is the fact that this is further complicated by the Warning Limit you use when you run the job - i.e. how many Warnings will cause a Fatal error to be logged and abort the job. Set too high (or gawdforbid to Unlimited) you won't see this problem as the warnings don't abort the job. What's extremely perplexing to me is that if I set the Warning Limit to 1 or 2 everything works as expected and I get an appropriate rollback. Here's an example where it was set to 2:

Code: Select all

W) TestOCICommit..TEST_OCI: The value of the row is: TEST_ROW = NULL RUN_DATE = 2009-08-12 17:02:07 
W) TestOCICommit..TEST_OCI: ORA-01400: cannot insert NULL into ("DM_DSS_STAGE"."TEST_OCI"."TEST_ROW")
F) Job Aborted after 2 errors logged.
W) Attempting to Cleanup after ABORT raised in stage TestOCICommit..TEST_OCI
The third log entry shown above is the Fatal one. The Array Size was 128, Transaction Size was 0 and all records were rolled back.

This is not what happens when the Warning Limit is 3 with no other changes made to the job or settings. I get a very similar string of messages logged:

Code: Select all

W) TestOCICommit..TEST_OCI: The value of the row is: TEST_ROW = NULL RUN_DATE = 2009-08-12 17:14:32 
W) TestOCICommit..TEST_OCI: ORA-01400: cannot insert NULL into ("DM_DSS_STAGE"."TEST_OCI"."TEST_ROW")
W) TestOCICommit..TEST_OCI: DBMS.CODE=ORA-01400
F) Job Aborted after 3 errors logged.
W) Attempting to Cleanup after ABORT raised in stage TestOCICommit..TEST_OCI
Now the fourth entry is the fatal one. Much to my surprise, in spite of the job aborting, the 48 good rows were committed! I see a similar outcome if we leave the Array Size as 128 but change the Transaction Size to 10. When the bad row was the 49th row, 48 rows were committed even if the job aborted when there should have been 40. When the bad row was the 15th row, 19 records were committed - 10 from the first true commit and then 9 from the second when there really should have only been 10 rows left standing after the bomb went off.

I am at a complete loss to explain why this rolls everything back when the Warning Limit is 1 or 2 but the records commit if the Warning Limit is set to 3. The job aborts in either case but somehow allowing that one more wafer-thin warning to be logged lets the commit happen regardless. And to recap this is only the case when the Array Size is larger than the incoming record count so you've only sent one incomplete array to OCI.

I don't know if this is a DataStage bug in their OCI code or something I can pin on Oracle, perhaps a bug in the client is all that comes to mind. I wish I could get them to upgrade the client software so I can see if that changes the behaviour but I don't really see that happening. So I post here in hopes of someone having been down this path before who can shed some light on the issue.

Thanks for reading all the way to the end!

(you *did* read the whole post, didn't you?)
-craig

"You can never have too many knives" -- Logan Nine Fingers
ray.wurlod
Participant
Posts: 54607
Joined: Wed Oct 23, 2002 10:52 pm
Location: Sydney, Australia
Contact:

Post by ray.wurlod »

Maybe the third fatal did not occur until after the 128th row (first array) had been processed?
IBM Software Services Group
Any contribution to this forum is my own opinion and does not necessarily reflect any position that IBM may hold.
chulett
Charter Member
Charter Member
Posts: 43085
Joined: Tue Nov 12, 2002 4:34 pm
Location: Denver, CO

Post by chulett »

That basically does seem to be what is going on. There actually seem to be two warnings logged for every error, not three as I originally thought. That "third" one seems to be a "wrapping up here's the warning I'm going to report back" kind of thing so a warning limit of 2 kills it after the first sign of trouble while 3 actually issues the kill after the commit has already happened. Turned on trace and pulled these summaries from the phantom directory via the 'From previous run...' log entry after resetting the job.

First, with the warning level set to 3:

Code: Select all

TestOCICommit..TEST_OCI: OCIInitialize - Initialized the OCI process
TestOCICommit..TEST_OCI: OCIEnvInit - allocated an environment handle
TestOCICommit..TEST_OCI: OCIHandleAlloc - allocated an OCI_HTYPE_ERROR handle
TestOCICommit..TEST_OCI: OCIHandleAlloc - allocated an OCI_HTYPE_SERVER handle
TestOCICommit..TEST_OCI: OCIServerAttach - created an access path to a data source
TestOCICommit..TEST_OCI: OCIHandleAlloc - allocated an OCI_HTYPE_SVCCTX handle
TestOCICommit..TEST_OCI: OCIAttrSet - set the server context
TestOCICommit..TEST_OCI: OCIHandleAlloc - allocated an OCI_HTYPE_SESSION handle
TestOCICommit..TEST_OCI: OCIAttrSet - set the username context
TestOCICommit..TEST_OCI: OCIAttrSet - set the password context
TestOCICommit..TEST_OCI: OCISessionBegin - Create a user session
TestOCICommit..TEST_OCI: OCIAttrSet - set the session context
TestOCICommit..TEST_OCI: DSD.ReplaceParams called.
TestOCICommit..TEST_OCI: DSD.ReplaceParams called.
TestOCICommit..TEST_OCI: DSD.ReplaceParams called.
TestOCICommit..TEST_OCI: DSD.ReplaceParams called.
TestOCICommit..TEST_OCI: DSD.ReplaceParams called.
TestOCICommit..TEST_OCI: DSD.ReplaceParams called.
TestOCICommit..TEST_OCI: DSD.ReplaceParams called.
TestOCICommit..TEST_OCI: DSD.ReplaceParams called.
TestOCICommit..TEST_OCI: DSD.ReplaceParams called.
TestOCICommit..TEST_OCI: DSD.ReplaceParams called.
TestOCICommit..TEST_OCI: DSD.ReplaceParams called.
TestOCICommit..TEST_OCI: DSD.ReplaceParams called.
TestOCICommit..TEST_OCI: Clearing the table of all records
TestOCICommit..TEST_OCI: OCIHandleAlloc - allocated an OCI_HTYPE_STMT handle
TestOCICommit..TEST_OCI: OCIStmtPrepare - SQL statement has been prepared
TestOCICommit..TEST_OCI: TRUNCATE TABLE TEST_OCI
TestOCICommit..TEST_OCI: OCIStmtExecute - SQL statement has been executed
TestOCICommit..TEST_OCI: OCIHandleFree - deallocated an OCI_HTYPE_STMT handle
TestOCICommit..TEST_OCI: OCIHandleAlloc - allocated an OCI_HTYPE_STMT handle
TestOCICommit..TEST_OCI: OCIStmtPrepare - SQL statement has been prepared
TestOCICommit..TEST_OCI: INSERT INTO TEST_OCI(TEST_ROW, RUN_DATE) VALUES(:1, TO_DATE(:2, 'YYYY-MM-DD HH24:MI:SS'))
TestOCICommit..TEST_OCI: OCIBindByName - OCI has bound a variable 
TestOCICommit..TEST_OCI: OCIBindByName - OCI has bound a variable 
TestOCICommit..TEST_OCI: OCIHandleAlloc - allocated an OCI_HTYPE_STMT handle
TestOCICommit..TEST_OCI: OCIStmtPrepare - SQL statement has been prepared
TestOCICommit..TEST_OCI: select Computer, SoftwareProduct, DataStore from MetaStage_Loc_Info
TestOCICommit..TEST_OCI: OCIDefineByPos - defined a variable on a select-list item
TestOCICommit..TEST_OCI: OCIDefineByPos - defined a variable on a select-list item
TestOCICommit..TEST_OCI: OCIDefineByPos - defined a variable on a select-list item
TestOCICommit..TEST_OCI: ORA-00942: table or view does not exist
TestOCICommit..TEST_OCI: OCIHandleFree - deallocated an OCI_HTYPE_STMT handle
TestOCICommit..TEST_OCI: OCIHandleAlloc - allocated an OCI_HTYPE_STMT handle
TestOCICommit..TEST_OCI: OCIStmtPrepare - SQL statement has been prepared
TestOCICommit..TEST_OCI: select GLOBAL_NAME from GLOBAL_NAME
TestOCICommit..TEST_OCI: OCIDefineByPos - defined a variable on a select-list item
TestOCICommit..TEST_OCI: OCIStmtExecute - SQL statement has been executed
TestOCICommit..TEST_OCI: OCIHandleFree - deallocated an OCI_HTYPE_STMT handle
Output Pin Insert_New, Handle = 1
Stage Name	TestOCICommit.TEST_OCI
Open Subroutine	DSP.Open
Get Subroutine	
Put Subroutine	$DSP.Put
Close Subroutine	DSP.Close
TestOCICommit..xform3: DSD.InWave called. Resources = TestOCICommit..TEST_OCI.Insert_New, Wave = 1
TestOCICommit..xform3: DSD.EndOfTrans - end of transmission block 1
TestOCICommit..TEST_OCI.Insert_New: DSP.Close called. Handle = 1.
TestOCICommit..TEST_OCI: OCIAttrGet - return the number of rows processed
TestOCICommit..TEST_OCI: The value of the row is: TEST_ROW = NULL RUN_DATE = 2009-08-13 16:29:03 
TestOCICommit..TEST_OCI: ORA-01400: cannot insert NULL into ("DM_DSS_STAGE"."TEST_OCI"."TEST_ROW")
TestOCICommit..TEST_OCI: OCIBindByName - OCI has bound a variable 
TestOCICommit..TEST_OCI: OCIBindByName - OCI has bound a variable 
TestOCICommit..TEST_OCI: OCIAttrGet - return the number of rows processed
TestOCICommit..TEST_OCI: OCIStmtExecute - SQL statement has been executed
TestOCICommit..TEST_OCI: OCITransCommit - commited the transaction
TestOCICommit..TEST_OCI: DSD.ReplaceParams called.
TestOCICommit..TEST_OCI: DSD.ReplaceParams called.
TestOCICommit..TEST_OCI: OCIHandleFree - deallocated an OCI_HTYPE_STMT handle
TestOCICommit..TEST_OCI: OCITransCommit - commited the transaction
TestOCICommit..TEST_OCI: OCISessionEnd - terminated a user session
TestOCICommit..TEST_OCI: OCIServerDetach - Delete an access path to a data source
TestOCICommit..TEST_OCI: OCIHandleFree - deallocated an OCI_HTYPE_SESSION handle
TestOCICommit..TEST_OCI: OCIHandleFree - deallocated an OCI_HTYPE_SERVER handle
TestOCICommit..TEST_OCI: OCIHandleFree - deallocated an OCI_HTYPE_SVCCTX handle
TestOCICommit..TEST_OCI: OCIHandleFree - deallocated an OCI_HTYPE_ERROR handle
TestOCICommit..TEST_OCI: OCIHandleFree - deallocated an OCI_HTYPE_ENV handle
TestOCICommit..TEST_OCI: DBMS.CODE=ORA-01400
Job Aborted after 3 errors logged.
Program "DSD.WriteLog": Line 201, Abort.
Attempting to Cleanup after ABORT raised in stage TestOCICommit..TEST_OCI
Attempting to Cleanup after ABORT raised in stage TestOCICommit..TEST_OCI
TestOCICommit..TEST_OCI.Insert_New: DSP.Close called. Handle = 1.
TestOCICommit..TEST_OCI.Insert_New: Output Closed.

DataStage Phantom Aborting with @ABORT.CODE = 1
You can see the two ORA warnings logged and then a commit is issued. After that the singleton warning hits the threshold and the job aborts.

Death occurs right at the error point and an rollback gets issued instead when the limit is set to 2:

Code: Select all

TestOCICommit..TEST_OCI: OCIInitialize - Initialized the OCI process
TestOCICommit..TEST_OCI: OCIEnvInit - allocated an environment handle
TestOCICommit..TEST_OCI: OCIHandleAlloc - allocated an OCI_HTYPE_ERROR handle
TestOCICommit..TEST_OCI: OCIHandleAlloc - allocated an OCI_HTYPE_SERVER handle
TestOCICommit..TEST_OCI: OCIServerAttach - created an access path to a data source
TestOCICommit..TEST_OCI: OCIHandleAlloc - allocated an OCI_HTYPE_SVCCTX handle
TestOCICommit..TEST_OCI: OCIAttrSet - set the server context
TestOCICommit..TEST_OCI: OCIHandleAlloc - allocated an OCI_HTYPE_SESSION handle
TestOCICommit..TEST_OCI: OCIAttrSet - set the username context
TestOCICommit..TEST_OCI: OCIAttrSet - set the password context
TestOCICommit..TEST_OCI: OCISessionBegin - Create a user session
TestOCICommit..TEST_OCI: OCIAttrSet - set the session context
TestOCICommit..TEST_OCI: DSD.ReplaceParams called.
TestOCICommit..TEST_OCI: DSD.ReplaceParams called.
TestOCICommit..TEST_OCI: DSD.ReplaceParams called.
TestOCICommit..TEST_OCI: DSD.ReplaceParams called.
TestOCICommit..TEST_OCI: DSD.ReplaceParams called.
TestOCICommit..TEST_OCI: DSD.ReplaceParams called.
TestOCICommit..TEST_OCI: DSD.ReplaceParams called.
TestOCICommit..TEST_OCI: DSD.ReplaceParams called.
TestOCICommit..TEST_OCI: DSD.ReplaceParams called.
TestOCICommit..TEST_OCI: DSD.ReplaceParams called.
TestOCICommit..TEST_OCI: DSD.ReplaceParams called.
TestOCICommit..TEST_OCI: DSD.ReplaceParams called.
TestOCICommit..TEST_OCI: Clearing the table of all records
TestOCICommit..TEST_OCI: OCIHandleAlloc - allocated an OCI_HTYPE_STMT handle
TestOCICommit..TEST_OCI: OCIStmtPrepare - SQL statement has been prepared
TestOCICommit..TEST_OCI: TRUNCATE TABLE TEST_OCI
TestOCICommit..TEST_OCI: OCIStmtExecute - SQL statement has been executed
TestOCICommit..TEST_OCI: OCIHandleFree - deallocated an OCI_HTYPE_STMT handle
TestOCICommit..TEST_OCI: OCIHandleAlloc - allocated an OCI_HTYPE_STMT handle
TestOCICommit..TEST_OCI: OCIStmtPrepare - SQL statement has been prepared
TestOCICommit..TEST_OCI: INSERT INTO TEST_OCI(TEST_ROW, RUN_DATE) VALUES(:1, TO_DATE(:2, 'YYYY-MM-DD HH24:MI:SS'))
TestOCICommit..TEST_OCI: OCIBindByName - OCI has bound a variable 
TestOCICommit..TEST_OCI: OCIBindByName - OCI has bound a variable 
TestOCICommit..TEST_OCI: OCIHandleAlloc - allocated an OCI_HTYPE_STMT handle
TestOCICommit..TEST_OCI: OCIStmtPrepare - SQL statement has been prepared
TestOCICommit..TEST_OCI: select Computer, SoftwareProduct, DataStore from MetaStage_Loc_Info
TestOCICommit..TEST_OCI: OCIDefineByPos - defined a variable on a select-list item
TestOCICommit..TEST_OCI: OCIDefineByPos - defined a variable on a select-list item
TestOCICommit..TEST_OCI: OCIDefineByPos - defined a variable on a select-list item
TestOCICommit..TEST_OCI: ORA-00942: table or view does not exist
TestOCICommit..TEST_OCI: OCIHandleFree - deallocated an OCI_HTYPE_STMT handle
TestOCICommit..TEST_OCI: OCIHandleAlloc - allocated an OCI_HTYPE_STMT handle
TestOCICommit..TEST_OCI: OCIStmtPrepare - SQL statement has been prepared
TestOCICommit..TEST_OCI: select GLOBAL_NAME from GLOBAL_NAME
TestOCICommit..TEST_OCI: OCIDefineByPos - defined a variable on a select-list item
TestOCICommit..TEST_OCI: OCIStmtExecute - SQL statement has been executed
TestOCICommit..TEST_OCI: OCIHandleFree - deallocated an OCI_HTYPE_STMT handle
Output Pin Insert_New, Handle = 1
Stage Name	TestOCICommit.TEST_OCI
Open Subroutine	DSP.Open
Get Subroutine	
Put Subroutine	$DSP.Put
Close Subroutine	DSP.Close
TestOCICommit..xform3: DSD.InWave called. Resources = TestOCICommit..TEST_OCI.Insert_New, Wave = 1
TestOCICommit..xform3: DSD.EndOfTrans - end of transmission block 1
TestOCICommit..TEST_OCI.Insert_New: DSP.Close called. Handle = 1.
TestOCICommit..TEST_OCI: OCIAttrGet - return the number of rows processed
TestOCICommit..TEST_OCI: The value of the row is: TEST_ROW = NULL RUN_DATE = 2009-08-13 16:45:23 
TestOCICommit..TEST_OCI: ORA-01400: cannot insert NULL into ("DM_DSS_STAGE"."TEST_OCI"."TEST_ROW")
Job Aborted after 2 errors logged.
Program "DSD.WriteLog": Line 201, Abort.
Attempting to Cleanup after ABORT raised in stage TestOCICommit..TEST_OCI
Attempting to Cleanup after ABORT raised in stage TestOCICommit..TEST_OCI
TestOCICommit..TEST_OCI.Insert_New: DSP.Close called. Handle = 1.
TestOCICommit..TEST_OCI: OCITransRollback - rollbacked the transaction
TestOCICommit..TEST_OCI: OCIHandleFree - deallocated an OCI_HTYPE_STMT handle
TestOCICommit..TEST_OCI: OCITransRollback - rollbacked the transaction
TestOCICommit..TEST_OCI: OCISessionEnd - terminated a user session
TestOCICommit..TEST_OCI: OCIServerDetach - Delete an access path to a data source
TestOCICommit..TEST_OCI: OCIHandleFree - deallocated an OCI_HTYPE_SESSION handle
TestOCICommit..TEST_OCI: OCIHandleFree - deallocated an OCI_HTYPE_SERVER handle
TestOCICommit..TEST_OCI: OCIHandleFree - deallocated an OCI_HTYPE_SVCCTX handle
TestOCICommit..TEST_OCI: OCIHandleFree - deallocated an OCI_HTYPE_ERROR handle
TestOCICommit..TEST_OCI: OCIHandleFree - deallocated an OCI_HTYPE_ENV handle
TestOCICommit..TEST_OCI: Current process-wide memory usage = 137228K
TestOCICommit..TEST_OCI.Insert_New: Output Closed.

DataStage Phantom Aborting with @ABORT.CODE = 1
So, if your Warning Limit kills the job while the actual warnings are still being generated for your bad data, all is well. But if fate doesn't smile on you and your actual bad data warnings take you right up to the threshold and it's only the last 'wrapping upping' warning that triggers the abort, you are SOL - your data has already been committed. And only then if you're only sending a single array to the job and it's not "full". [sigh]

So this seems like a bug in the OCI code to me. I guess I should see about reporting this to IBM and seeing if there's anything that has already been done (or could be done) about this?

(edited to snip out some of the identical startup trace messages that don't add anything to the conversation)
-craig

"You can never have too many knives" -- Logan Nine Fingers
chulett
Charter Member
Charter Member
Posts: 43085
Joined: Tue Nov 12, 2002 4:34 pm
Location: Denver, CO

Post by chulett »

I thought I would also add an example of the same data being processed when the only change is to make the Array Size 10. Otherwise, all else is the same as the first example posted above, including the Transaction Size of 0 and a Warning Limit of 3:

Code: Select all

TestOCICommit..TEST_OCI: OCIInitialize - Initialized the OCI process
TestOCICommit..TEST_OCI: OCIEnvInit - allocated an environment handle
TestOCICommit..TEST_OCI: OCIHandleAlloc - allocated an OCI_HTYPE_ERROR handle
TestOCICommit..TEST_OCI: OCIHandleAlloc - allocated an OCI_HTYPE_SERVER handle
TestOCICommit..TEST_OCI: OCIServerAttach - created an access path to a data source
TestOCICommit..TEST_OCI: OCIHandleAlloc - allocated an OCI_HTYPE_SVCCTX handle
TestOCICommit..TEST_OCI: OCIAttrSet - set the server context
TestOCICommit..TEST_OCI: OCIHandleAlloc - allocated an OCI_HTYPE_SESSION handle
TestOCICommit..TEST_OCI: OCIAttrSet - set the username context
TestOCICommit..TEST_OCI: OCIAttrSet - set the password context
TestOCICommit..TEST_OCI: OCISessionBegin - Create a user session
TestOCICommit..TEST_OCI: OCIAttrSet - set the session context
TestOCICommit..TEST_OCI: DSD.ReplaceParams called.
TestOCICommit..TEST_OCI: DSD.ReplaceParams called.
TestOCICommit..TEST_OCI: DSD.ReplaceParams called.
TestOCICommit..TEST_OCI: DSD.ReplaceParams called.
TestOCICommit..TEST_OCI: DSD.ReplaceParams called.
TestOCICommit..TEST_OCI: DSD.ReplaceParams called.
TestOCICommit..TEST_OCI: DSD.ReplaceParams called.
TestOCICommit..TEST_OCI: DSD.ReplaceParams called.
TestOCICommit..TEST_OCI: DSD.ReplaceParams called.
TestOCICommit..TEST_OCI: DSD.ReplaceParams called.
TestOCICommit..TEST_OCI: DSD.ReplaceParams called.
TestOCICommit..TEST_OCI: DSD.ReplaceParams called.
TestOCICommit..TEST_OCI: Clearing the table of all records
TestOCICommit..TEST_OCI: OCIHandleAlloc - allocated an OCI_HTYPE_STMT handle
TestOCICommit..TEST_OCI: OCIStmtPrepare - SQL statement has been prepared
TestOCICommit..TEST_OCI: TRUNCATE TABLE TEST_OCI
TestOCICommit..TEST_OCI: OCIStmtExecute - SQL statement has been executed
TestOCICommit..TEST_OCI: OCIHandleFree - deallocated an OCI_HTYPE_STMT handle
TestOCICommit..TEST_OCI: OCIHandleAlloc - allocated an OCI_HTYPE_STMT handle
TestOCICommit..TEST_OCI: OCIStmtPrepare - SQL statement has been prepared
TestOCICommit..TEST_OCI: INSERT INTO TEST_OCI(TEST_ROW, RUN_DATE) VALUES(:1, TO_DATE(:2, 'YYYY-MM-DD HH24:MI:SS'))
TestOCICommit..TEST_OCI: OCIBindByName - OCI has bound a variable 
TestOCICommit..TEST_OCI: OCIBindByName - OCI has bound a variable 
TestOCICommit..TEST_OCI: OCIHandleAlloc - allocated an OCI_HTYPE_STMT handle
TestOCICommit..TEST_OCI: OCIStmtPrepare - SQL statement has been prepared
TestOCICommit..TEST_OCI: select Computer, SoftwareProduct, DataStore from MetaStage_Loc_Info
TestOCICommit..TEST_OCI: OCIDefineByPos - defined a variable on a select-list item
TestOCICommit..TEST_OCI: OCIDefineByPos - defined a variable on a select-list item
TestOCICommit..TEST_OCI: OCIDefineByPos - defined a variable on a select-list item
TestOCICommit..TEST_OCI: ORA-00942: table or view does not exist
TestOCICommit..TEST_OCI: OCIHandleFree - deallocated an OCI_HTYPE_STMT handle
TestOCICommit..TEST_OCI: OCIHandleAlloc - allocated an OCI_HTYPE_STMT handle
TestOCICommit..TEST_OCI: OCIStmtPrepare - SQL statement has been prepared
TestOCICommit..TEST_OCI: select GLOBAL_NAME from GLOBAL_NAME
TestOCICommit..TEST_OCI: OCIDefineByPos - defined a variable on a select-list item
TestOCICommit..TEST_OCI: OCIStmtExecute - SQL statement has been executed
TestOCICommit..TEST_OCI: OCIHandleFree - deallocated an OCI_HTYPE_STMT handle
Output Pin Insert_New, Handle = 1
Stage Name	TestOCICommit.TEST_OCI
Open Subroutine	DSP.Open
Get Subroutine	
Put Subroutine	$DSP.Put
Close Subroutine	DSP.Close
TestOCICommit..xform3: DSD.InWave called. Resources = TestOCICommit..TEST_OCI.Insert_New, Wave = 1
TestOCICommit..xform3: OCIAttrGet - return the number of rows processed
TestOCICommit..xform3: OCIStmtExecute - SQL statement has been executed
TestOCICommit..xform3: OCIAttrGet - return the number of rows processed
TestOCICommit..xform3: The value of the row is: TEST_ROW = NULL RUN_DATE = 2009-08-14 07:40:28 
TestOCICommit..xform3: ORA-01400: cannot insert NULL into ("DM_DSS_STAGE"."TEST_OCI"."TEST_ROW")
TestOCICommit..xform3: OCIBindByName - OCI has bound a variable 
TestOCICommit..xform3: OCIBindByName - OCI has bound a variable 
TestOCICommit..xform3: OCIAttrGet - return the number of rows processed
TestOCICommit..xform3: OCIStmtExecute - SQL statement has been executed
TestOCICommit..xform3: DBMS.CODE=ORA-01400
Job Aborted after 3 errors logged.
Program "DSD.WriteLog": Line 201, Abort.
Attempting to Cleanup after ABORT raised in stage TestOCICommit..xform3
Attempting to Cleanup after ABORT raised in stage TestOCICommit..xform3
TestOCICommit..xform3.Insert_New: DSP.Close called. Handle = 1.
TestOCICommit..xform3: OCITransRollback - rollbacked the transaction
TestOCICommit..xform3: OCIHandleFree - deallocated an OCI_HTYPE_STMT handle
TestOCICommit..xform3: OCITransRollback - rollbacked the transaction
TestOCICommit..xform3: OCISessionEnd - terminated a user session
TestOCICommit..xform3: OCIServerDetach - Delete an access path to a data source
TestOCICommit..xform3: OCIHandleFree - deallocated an OCI_HTYPE_SESSION handle
TestOCICommit..xform3: OCIHandleFree - deallocated an OCI_HTYPE_SERVER handle
TestOCICommit..xform3: OCIHandleFree - deallocated an OCI_HTYPE_SVCCTX handle
TestOCICommit..xform3: OCIHandleFree - deallocated an OCI_HTYPE_ERROR handle
TestOCICommit..xform3: OCIHandleFree - deallocated an OCI_HTYPE_ENV handle
TestOCICommit..xform3: Current process-wide memory usage = 137228K
TestOCICommit..xform3.Insert_New: Output Closed.

DataStage Phantom Aborting with @ABORT.CODE = 1
So here everything behaves itself when more than one array of data is sent down the link. :?
-craig

"You can never have too many knives" -- Logan Nine Fingers
sukrishnan
Participant
Posts: 2
Joined: Tue Mar 17, 2009 1:12 am
Location: Perth

Post by sukrishnan »

Hi Craig,

Just wondering if you managed to solve the problem. I'm experiencing the same issue, where the job aborts but records still commit.


Regards,
Sushant
chulett
Charter Member
Charter Member
Posts: 43085
Joined: Tue Nov 12, 2002 4:34 pm
Location: Denver, CO

Post by chulett »

Trying to recall... I no longer have access to any of those email communications. Went round and round with IBM but did manage to get them a reproducible test case and they acknowledged the behaviour was not correct. Pretty sure they said it was something they corrected (or would correct) in a later 8.x release and I believe they offered to patch it in our current release but we'd moved on and never pulled the trigger on that. From what I recall.

Sorry I don't have more information for you.
-craig

"You can never have too many knives" -- Logan Nine Fingers
Post Reply