Abnormal termination : ORACI8

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
anupam
Participant
Posts: 172
Joined: Fri Apr 04, 2003 10:51 pm
Location: India

Abnormal termination : ORACI8

Post by anupam »

Hi All,

I am extracting data from Oracle table using ORACI8 stage and writing it to a flat file.

After extracting about 15 Million records, the job is getting aborted. The error message is "Abnormal termination of stage J4XfmNovAnu..Txfm detected".

Each time also the job aborts when the records extracted is somewhere about 15 M and the size of the file is somewhere about 1 G.I have checked the disk space. The mountpoint can have largefiles. There is no problem related to the space available.

Please suggest me to overcome this abnormal termination of Job.
----------------
Rgds,
Anupam
----------------
The future is not something we enter. The future is something we create.
ray.wurlod
Participant
Posts: 54607
Joined: Wed Oct 23, 2002 10:52 pm
Location: Sydney, Australia
Contact:

Post by ray.wurlod »

Reset the job, and look for an event in the log called something like "from previous run...". Alternately, find the records for the job and stage in the &PH& directory (in the project directory on the server). Post your findings. Without them, there is insufficient information for an informed diagnosis.
Also, has any message appeared in the Oracle logs relating to your extraction process?
IBM Software Services Group
Any contribution to this forum is my own opinion and does not necessarily reflect any position that IBM may hold.
anupam
Participant
Posts: 172
Joined: Fri Apr 04, 2003 10:51 pm
Location: India

Post by anupam »

Required Information

From previous run
DataStage Job 1202 Phantom 17860
kgefec: fatal error Abnormal termination of UniVerse.
Fault type is 11. Layer type is BASIC run machine.
Fault occurred in BASIC program JOB.1161750357.DT.1310851132.TRANS1 at address b0.0


JOB.1161750357.DT.1310851132.TRANS1
* Tokens were replaced below as follows:
* Pin%%V0S42P1.Column%%1 <= totxfm.CALLG_PARTY_NO
* Pin%%V0S42P1.Column%%2 <= totxfm.CALLD_PARTY_NO
* Pin%%V0S42P1.Column%%3 <= totxfm.BILL_DURATION
* Pin%%V0S42P1.Column%%4 <= totxfm.CALL_TYPE
* Pin%%V0S42P1.Column%%5 <= totxfm.CALL_DIRECTION
* Pin%%V0S42P1.Column%%6 <= totxfm.MIN_NO
* Pin%%V0S42P1.Column%%7 <= totxfm.START_DATE
* Pin%%V0S42P1.Column%%8 <= totxfm.START_TIME_HOUR
* Pin%%V0S42P1.Column%%9 <= totxfm.START_TIME_MIN
* Pin%%V0S42P1.Column%%10 <= totxfm.START_TIME_SEC
* GET.Pin%%V0S42P1 <= GET.totxfm
* Pin%%V0S42P1.REJECTEDCODE <= totxfm.REJECTEDCODE
* Pin%%V0S42P2.Column%%1 <= tofile.CALLG_PARTY_NO
* Pin%%V0S42P2.Column%%2 <= tofile.CALLD_PARTY_NO
* Pin%%V0S42P2.Column%%3 <= tofile.BILL_DURATION
* Pin%%V0S42P2.Column%%4 <= tofile.CALL_TYPE
* Pin%%V0S42P2.Column%%5 <= tofile.CALL_DIRECTION
* Pin%%V0S42P2.Column%%6 <= tofile.MIN_NO
* Pin%%V0S42P2.Column%%7 <= tofile.START_DATE
* Pin%%V0S42P2.Column%%8 <= tofile.START_TIME_HOUR
* Pin%%V0S42P2.Column%%9 <= tofile.START_TIME_MIN
* Pin%%V0S42P2.Column%%10 <= tofile.START_TIME_SEC
* PUT.Pin%%V0S42P2 <= PUT.tofile
* Pin%%V0S42P2.REJECTED <= tofile.REJECTED
* Pin%%V0S42P2.REJECTEDCODE <= tofile.REJECTEDCODE
*
* Subroutine for active stage J4XfmNovAnu.Txfm generated at 14:18:54 20 NOV 2003
*
SUBROUTINE DSTransformerStage(HANDLES,ERROR)

$INCLUDE DSINCLUDE DSD_RTCONFIG.H
$INCLUDE DSINCLUDE DSD_STAGE.H
$INCLUDE DSINCLUDE DSD_BCI.H

$INCLUDE DSINCLUDE JOBCONTROL.H
DEFFUN DSRLoadString(Num,Text,Args) CALLING '*DataStage*DSR_LOADSTRING'
$DEFINE Pin%%V0S42P1.Column%%1 STAGECOM.ARR(1)
$DEFINE Pin%%V0S42P1.Column%%2 STAGECOM.ARR(2)
$DEFINE Pin%%V0S42P1.Column%%3 STAGECOM.ARR(3)
$DEFINE Pin%%V0S42P1.Column%%4 STAGECOM.ARR(4)
$DEFINE Pin%%V0S42P1.Column%%5 STAGECOM.ARR(5)
$DEFINE Pin%%V0S42P1.Column%%6 STAGECOM.ARR(6)
$DEFINE Pin%%V0S42P1.Column%%7 STAGECOM.ARR(7)
$DEFINE Pin%%V0S42P1.Column%%8 STAGECOM.ARR(8)
$DEFINE Pin%%V0S42P1.Column%%9 STAGECOM.ARR(9)
$DEFINE Pin%%V0S42P1.Column%%10 STAGECOM.ARR(10)
$DEFINE GET.Pin%%V0S42P1 CALL $DSP.GetNext(1,Pin%%V0S42P1.REJECTEDCODE)
$DEFINE Pin%%V0S42P2.Column%%1 STAGECOM.ARR(1)
$DEFINE Pin%%V0S42P2.Column%%2 STAGECOM.ARR(2)
$DEFINE Pin%%V0S42P2.Column%%3 STAGECOM.ARR(3)
$DEFINE Pin%%V0S42P2.Column%%4 STAGECOM.ARR(4)
$DEFINE Pin%%V0S42P2.Column%%5 STAGECOM.ARR(5)
$DEFINE Pin%%V0S42P2.Column%%6 STAGECOM.ARR(6)
$DEFINE Pin%%V0S42P2.Column%%7 STAGECOM.ARR(7)
$DEFINE Pin%%V0S42P2.Column%%8 STAGECOM.ARR(8)
$DEFINE Pin%%V0S42P2.Column%%9 STAGECOM.ARR(9)
$DEFINE Pin%%V0S42P2.Column%%10 STAGECOM.ARR(10)
$DEFINE PUT.Pin%%V0S42P2 CALL $DS.SEQPUT(2, Pin%%V0S42P2.REJECTEDCODE)

UPDATE.COUNT = STAGECOM.RATE



LOOP
REJECTED = @TRUE
* Get next row from primary input pin totxfm
STAGECOM.PINNO = 1
GET.Pin%%V0S42P1
ERROR = Pin%%V0S42P1.REJECTEDCODE
WHILE NOT(ERROR)

STAGECOM.PINNO = 2
IF @TRUE THEN
* Column derivation code for pin tofile
Pin%%V0S42P2.REJECTED = @FALSE
PUT.Pin%%V0S42P2
IF NOT(Pin%%V0S42P2.REJECTEDCODE) THEN
REJECTED = @FALSE
END ELSE
Pin%%V0S42P2.REJECTED = @TRUE
END
END
ELSE
Pin%%V0S42P2.REJECTED = @TRUE
Pin%%V0S42P2.REJECTEDCODE = 0
END


UPDATE.COUNT -= 1
IF UPDATE.COUNT LE 0 THEN CALL DSD.Update(HANDLES);UPDATE.COUNT = STAGECOM.RAT
E
REPEAT
RETURN
END

Could not found anything in /u20/app/datastage/product/Ascential/DataStage/Projects/ric_dss_prdadhoc/&PH& directory
----------------
Rgds,
Anupam
----------------
The future is not something we enter. The future is something we create.
mhester
Participant
Posts: 622
Joined: Tue Mar 04, 2003 5:26 am
Location: Phoenix, AZ
Contact:

Post by mhester »

Anupam,

Are you calling any custom routines or transforms during processing?

If you do, could you verify if you are manipulating the input argument like -

Arg1 = Arg1 * 10

If you are then this might/could be causing your problem. This can cause an abnormal termination of UniVerse and produce results like you are seeing.

If you are then the above statement would be more correct like -

NewArg = Arg1 * 10

Regards,

Michael Hester
ray.wurlod
Participant
Posts: 54607
Joined: Wed Oct 23, 2002 10:52 pm
Location: Sydney, Australia
Contact:

Post by ray.wurlod »

If you execute the UniVerse (DataStage Engine) command

Code: Select all

VLIST RT_BP1202 JOB.1161750357.DT.1310851132.TRANS1 
you will be able to determine the statement that is executing at address b0. This may assist your diagnosis.
IBM Software Services Group
Any contribution to this forum is my own opinion and does not necessarily reflect any position that IBM may hold.
kduke
Charter Member
Charter Member
Posts: 5227
Joined: Thu May 29, 2003 9:47 am
Location: Dallas, TX
Contact:

Post by kduke »

Ray

Jeez you going to teach assembler next. VLIST is pretty low level stuff. I do think it will help debug their problem.

Kim.
Mamu Kim
anupam
Participant
Posts: 172
Joined: Fri Apr 04, 2003 10:51 pm
Location: India

Post by anupam »

Ray,

At line B0:
01E Call "$DSP.GetNext" _T0000 Pin%%VOS42PI.REJECTEDCODE

I am unable to understand what this means,

Please suggest...
----------------
Rgds,
Anupam
----------------
The future is not something we enter. The future is something we create.
ray.wurlod
Participant
Posts: 54607
Joined: Wed Oct 23, 2002 10:52 pm
Location: Sydney, Australia
Contact:

Post by ray.wurlod »

No, you wouldn't be expected to understand. $DSP.GetNext is the subroutine that retrieves the next row from the source. For some reason this has generated a fault type 11. _T0000 is the name of a temporary variable, and REJECTEDCODE is assigned in the event of an error.
It's at this point you need to contact your support provider to get official help in diagnosing exactly what's wrong with your particular case.
IBM Software Services Group
Any contribution to this forum is my own opinion and does not necessarily reflect any position that IBM may hold.
kcbland
Participant
Posts: 5208
Joined: Wed Jan 15, 2003 8:56 am
Location: Lutz, FL
Contact:

Post by kcbland »

Here's something you may consider if you are extracting a significant number of rows from a table and writing to a sequential file.

Pick a column, one that is numeric such as a primary key. You want one that when used with a MOD statement can give you an even distribution of the data. Add two job parameters: PartitionNumber and PartitionCount. Add #PartitionNumber# to the output sequential file name.

Set PartitionNumber to default to 1, and for this example set PartitionCount to 5. Modify the select query to have a WHERE clause with

Code: Select all

MOD(WhateverColumnYouPicked, #PartitionCount#) = #PartitionNumber# - 1
Save this job as YourJob1.

Now, save the job 4 more times as YourJob2 thru YourJob5, each time setting PartitionNumber parameter to the suffix number.

Start all 5 jobs running. You should be 5X faster pulling the data out of the table, plus you end up with 5 output files. You can concatenate them together to achieve a complete file.

Once you get to DS 5.2 or higher, you can use job instantiation instead of the manual clones I described here. If you have more than 5 cpus, and the source Oracle instance has the ability to sustain more processes, increase the PartitionCount value to achieve better results, making sure you run 1 to N jobs.

I don't know quite what your problem is, but I suspect it's the size of your file. The approach I described here should get you your results much faster into smaller files, and the point is to get the job done.
Kenneth Bland

Rank: Sempai
Belt: First degree black
Fight name: Captain Hook
Signature knockout: right upper cut followed by left hook
Signature submission: Crucifix combined with leg triangle
1stpoint
Participant
Posts: 165
Joined: Thu Nov 13, 2003 2:10 pm
Contact:

Possible Memory Leak

Post by 1stpoint »

I seem to remember there being a problem with ORAOCI8 leaking memory. to diagnose this you will need to run the job and while it's running interrogate the process memory (ps -aux) and see if it is exceeding your allocated memory for a process (out of process memory will cause the ORAOCI8 to Abort Abnormally).

Best of Luck
Post Reply