3009 WITH MULTIPLES ACCESS

We have a multiple update in files, I execute in the source a unique End Transaction, one of this files produce a Backout Transaction (3009 subcode 15) when execute the ET, this file not be modified, but the other file yes, How drive adabas the multilple file ET whe one of this give a 3009, how is the integrity of de ET instruction ??

Hi Silvio;

Adabas is Transaction “driven”. A Transaction can contain updates that refer to more than one file. ALL of the updates from a single transaction should either be “finalized” on the database, or none of them should be on the database.

If I understand your question correctly, you have a situation where part of a transaction is on the database and part is not.

One way this might seem to be happening, but really is not:

User 1 READs and HOLDs, and UPDATEs, several records. The ET has not yet been issued by User 1’s program.

User 2 READs, but does not hold ( he cannot) one of the records being held by User 1. User 2 READs an updated (but not yet ET’ed) record

User 1 issues a Backout Transaction (or the system backs them out because of a timeout), which frees the held records, and restores ALL the records to their original state.

User 2 READs and HOLDs the record that was not being held before. Now things might be different depending on whether you are in Report Mode or Structured Mode. In Report Mode you might have a statement such as:

                       UPDATE field1 = #field1
                                    field2 = #field2

and so on. If the values of #field1 and #field2 were from the original READ (after the user 1 UPDATE, but before the BACKOUT TRANSACTION), user 2 might now be “re creating” the UPDATE. This is less likely, but still possible in Structured mode. You would have to have user 2 MOVE #field1 TO VIEW.field1. Possible, but less likely.

steve

I don’t have the list of the subcode of 3009 error, but the subcode 15 occurs in the transaction area, not for multiples user in the transaction, can you undestand me ??
Correctly, a part of update is OK, and other not.
How drive natural the integrity of En Transaction is the question, I read about sinchronism point in the profile manager, but i need know which database include in this point, but I don

Hi Silvio

Here is the Adabas text for subcode 15

The user was backed out because a pending Work area overflow occurred during this operation.

Action: Either reduce the transaction length to lessen the data protection area requirement, or increase the protection area on Work.

I am having a problem understanding how this is happening.

If I understand correctly, no one else could be updating these records. Is that true?

Yes, I know there i only one user in a transaction, but there can be many users, each of which has their own transaction, and they might refer to the same records.

END TRANSACTION does not refer to just one file, it refers to all files that have been UPDATEd since the last END TRANSACTION.

steve

Thanks, can you tell me more about work area ?? There is an area what involved all transaction or only the data base in question.
Other question, can I detect this problem before occurs ???, how ??

Thanks

Thanks, can you tell me more about work area ?? There is an area what involved all transaction or only the data base in question.
Other question, can I detect this problem before occurs ???, how ??

Thanks

Hi Silvio;

Adabas has to keep track of before and after images for all updates until either an END TRANSACTION or a BACKOUT TRANSACTION.

Typically, how many records do you try to UPDATE before issuing an END TRANSACTION?

You cannot detect the problem before it occurs. However, you can usually just issue an END TRANSACTION with greater frequency to avoid Adabas requiring so much space.

steve

Silvio,

I’m still confused as to what it is that you are trying to do. Are you combining records from multiple files into a single transaction, as in the following structure?

M.
READ master ...
  C.
  READ child ...
    G.
    READ granchild ...
      UPDATE (G.)
    END-READ
    UPDATE (C.)
  END-READ
  UPDATE (M.)
  END TRANSACTION
END-READ

Or are you updating a series of individual files?

M.
READ master ...
  UPDATE (M.)
  END TRANSACTION
END-READ
C.
READ child...
  UPDATE (C.)
  END TRANSACTION
END-READ
G.
READ grandchild ...
  UPDATE (G.)
  END TRANSACTION
END-READ

In both examples, I’m demonstrating structure, not production-ready code.

also, are all of the updates going to the same Adabas database, updating different files on the same database, or are the updates going to different Adabas databases?

We are combining records from multiple files into a single transaction, with a UNIQUE End Transaction, example 1.
We are updating different files on the same database and updates going to different Adabas databases too.

We use routines who update the differents files/database and the caller program execute before routines the End Transaction.

For example
callnat ‘routine1’ update base 1 file 22/23
update base 2 file 15
End Transaction

We need sincronicity in the modified the files, and call routine1 to do this.
Understand ??

For example when I see the log of the file we detect in the BI and AI that the file 22 base 1 produced a 3009 error subcode 15, but the file 23 base 1 is ok, and the file 15 base 2 is ok too.

We have differents updates and not sincronicity how i need, undertand me ??

I think we have a problem of integrity of ET instruction …

Thanks for your time.

Hi Silvio;

I can understand your frustration at trying to make yourself understood in a language you are not totally comfortable with. Sometimes, when I find myself in a restaurant where I do not understand the language, and the staff does not speak English, I resort to pointing at what someone else is eating at a nearby table. Works as long as someone else is eating something I would like.

All that said, I think I finally understand your problem. Tell us if this is correct.

You start a logical transaction. Lets say you issue some updates to File 1.

Now you get the 3009 error message, which you “trap” in an ON ERROR clause. At the end of the ON ERROR clause you continue with the logical transaction (lets say you update file 2 next)

The 3009 causes a BACKOUT TRANSACTION, which means that file 1 updates are now “gone”. However, your program has continued with the logical transaction. You now issue updates to file 2, and then issue your END TRANSACTION, so the file 2 updates are on your data base.

Is this what is happening? If so, you would have to change the logic in your ON ERROR clause.

Either way, could you ask your DBA what settings you have for ET, ETIO, ETEOP, ENDBT, and OPRB.

steve

We have a backout transaction by on error.

And do you then continue your logical transaction?

steve