Uncommitted data in replicated database?

Hello,

I have an external system which uses an ODBC connection to periodically retrieve large chunks of data from an OpenEdge database. In order to reduce load on the database and improve overall performance, I have recently introduced Progress Replication Plus to my setup and switched the external system to use the replicated one instead.

A few weeks later I started seeing objects in the external system which do not exist in the OpenEdge database. My suspicion is that those were temporary objects created by some 4GL procedures that were propagated to the replicated database and made their way into the external system, which had no way of knowing not to import them or to eventually delete them. I know for a fact that those non-existent objects were not simply deleted by another user as there is an object change registry maintained in the OpenEdge-based environment.

Is it by any means possible that the replication was configured to use an isolation level (e.g. READ_UNCOMMITTED) which would allow this behavior?
 
Last edited:

Rob Fitzpatrick

ProgressTalk.com Sponsor
Isolation levels are specific to SQL connections. They are not a configuration option for OE Replication targets.
 

TomBascom

Curmudgeon
It is certainly possible that your ODBC connection used uncommitted reads. That would be a potential issue regardless of if ODBC connected to the OE source or the OE target.
 
Thanks for your replies!

Regarding the isolation level used by my ODBC connections — I'm pretty sure I always use READ_COMMITTED, which I believe is the default. Also, they are not initiated with any additional commands (such as SET TRANSACTION ISOLATION LEVEL) and my queries do not contain clauses which could influence it (such as WITH (NOLOCK)). Is there something else that I might be missing?

So if I'm understanding this correctly, uncommitted data can be propagated by replication and there is no way of changing it since isolation levels are on the SQL level. On the other hand, if my queries to the replica maintain the desired isolation level (e.g. READ_COMMITTED) I should not be seeing any uncommitted data. Is this correct?
 
Top