Running Progress version 9.1D on Linux RedHat.
We're starting to get the following error: "Limit of repeat/undo units per session reached. (9456)"
The problem occurs in a persistent procedure running on an Appserver. This procedure is used to poll the database for changes. Within the procedure several calls to both internal and external procedures are executed.
According to Progress KB ID: P4071 and ID: P8015 this is a known bug in version 9.1, which is caused by a 32 bit integer overflowing.
The knowledgebase talks about rewriting "REPEAT blocks" to "DO WHILE blocks", but this is where my understanding begins to fail.
As far as I understand, every procedure call, and every "transaction" increments this counter. A "FOR EACH" block with NO-LOCK, and without the TRANSACTION keyword is not a repeat/undo block in itself.
But - even though we're using "for each no-lock" without transaction, if the loop updates temp-tables (for return values to the application), the loop will still be a repeat/undo block... or?
To sum things up:
Any input will be greatly appreciated, thanks.
Regards
Mike
We're starting to get the following error: "Limit of repeat/undo units per session reached. (9456)"
The problem occurs in a persistent procedure running on an Appserver. This procedure is used to poll the database for changes. Within the procedure several calls to both internal and external procedures are executed.
According to Progress KB ID: P4071 and ID: P8015 this is a known bug in version 9.1, which is caused by a 32 bit integer overflowing.
The knowledgebase talks about rewriting "REPEAT blocks" to "DO WHILE blocks", but this is where my understanding begins to fail.
As far as I understand, every procedure call, and every "transaction" increments this counter. A "FOR EACH" block with NO-LOCK, and without the TRANSACTION keyword is not a repeat/undo block in itself.
But - even though we're using "for each no-lock" without transaction, if the loop updates temp-tables (for return values to the application), the loop will still be a repeat/undo block... or?
To sum things up:
- What constructs will start a repeat/undo block?
- What constructs should I avoid using?
- How can I recode my procedures to minimize repeat/undo blocks?
- Will the use of NO-UNDO on DEFINE TEMP-TABLE.... have any effect?
- Is FOR EACH ... no-lock without then TRANSACTION keyword, considered a repeat/undo block if updates to temp-tables occur in the loop?
- Will a cursor and constructs like WHILE NOT Q:QUERY-OFF-END DO: be a solution to this problem?
Any input will be greatly appreciated, thanks.
Regards
Mike