S
scosens
Guest
Hi, I've discovered a problem I'm hoping someone can advice on an easy solution for. In short, the replication processor dosen't appear to handle record locks on ReplQueue. I'm guessing it's by design, as it should only ever be locked by the processor itself, but I've discovered a situation where it could remain locked by the front end GUI....this is occurring on a database with ~2000 tables, and every one of them is replicated to an MS SQL DB, running real time. 1. Transaction started. 2. A record is created or updated on TableA 3. The program which made this change has a "Release TableA." command. 4. Then a period of time occurs before the transactions is committed. The 'Release' command in step 3 is instigating the triggers attached to TableA, which is creating the ReplQueue record, but leaving all records locked, including the ReplQueue record. The replication engine detects the ReplQueue entry, performs the push to SQL, then tries to delete the ReplQueue record, but can't because it's still locked by the Users session, leaving the replication engine stuck until it either crashes due to wait time expire or the transaction is committed. There are 2 problems here, (although I'm thinking there's one solution) the first is that the replication engine is then hanging until the user clears the lock or it crashes, and the second is that if the transaction is never committed, it will actually leave replicated record in the SQL database, until either (if it was a create event) a new record is created with the same RECID, or (if it was an update event) a subsequent event occurs on that record which then refreshes the SQL version of the record. Ideally I'd like to see the Replication engine skip records that are locked, as this would prevent both problems. Unfortunately I can't change the GUI coding to avoid pending transactions from staying open, which regardless of this problem isn't a great idea. Any advice greatly appreciated, Thanks, Sam
Continue reading...
Continue reading...