Dead transactions

Posted by vjug on 08-Feb-2012 08:24

Is there a way to force ending of dead transaction on a database? I have a problem where I managed to disconnect user via promon, but his transaction is stil active (but dead), holding a record. How to resolve this and what is the cause of this behaviour? How to avoid this situation?

All Replies

Posted by Rob Fitzpatrick on 08-Feb-2012 17:01

What Progress version are you using?

As I understand it, a dead transaction *has* ended.  It has either committed or rolled back, but it may still have a corresponding record in _Trans that you see in promon.

If you look at promon record locks, do you see any with the transaction id of the dead transaction?

Posted by vjug on 09-Feb-2012 08:13

Version on the server is 10.2B05. Few of 'dead transactions' have their ID's, most of them don't. Biggest problem is that I've disconnected user to release record lock (to do another transaction) but record is still locked, while the user is succesfully disconnected.

Posted by Tim Kuehn on 09-Feb-2012 10:00

If he's using 2phase commits, it could be a "limbo" transaction in one of the db's. Left alone long enough, it'll bring the db down.

Posted by gus on 10-Feb-2012 09:29

How was the user connected to the database? Self-serving or via TCP/IP?

When you "disconnect" a user in promon, what that does is /request/ that the user disconnect themselves if it is a self-serving connection and for the server to disconnect the user if it is a TCP/IP connection. In either case, the disconnect can take some time because if there is an active transaction it must be rolled back.

It is possible for a user whose last transaction has ended to still own record locks. This can happen when a 4GL program's record scope is longer than the transaction scope. In such cases, an exclusive lock within the transaction may be downgraded to a share lock. And after the transactione nds, the program can of course obtain additional share locks.

This thread is closed