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?
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?
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.
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.
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.