I have an Oracle database that I access using Devart and Entity Framework.
There's a table called IMPORTJOBS
with a column STATUS
.
I also have multiple processes running at the same time. They each read the first row in IMPORTJOBS
that has status 'REGISTERED'
, put it to status 'EXECUTING'
, and if done put it to status 'EXECUTED'
.
Now because these processes are running in parallel, I believe the following could happen:
- process A reads row 10 which has status
REGISTERED
, - process B also reads row 10 which has still status
REGISTERED
, - process A updates row 10 to status
EXECUTING
.
Process B should not be able to read row 10 as process A already read it and is going to update its status.
How should I solve this? Put read and update in a transaction? Or should I use some versioning approach or something else?
Thanks!
EDIT: thanks to the accepted answer I got it working and documented it here: http://ludwigstuyck.wordpress.com/2013/02/28/concurrent-reading-and-writing-in-an-oracle-database.