Question: What
is the difference between the pessimistic and optimistic
Oracle locking method? I understand that pessimistic
locking is good in same situations while optimistic Oracle
locking is useful in other conditions. What are the
defaults for locking, pessimistic or optimistic, and how do
I use them?
Answer: Oracle allows you to
choose the strategy for locking, either pessimistic or
optimistic, depending on your needs. This is the issue
of pessimistic vs. optimistic locking:
Pessimistic locking:
The developer must declare their intent to update
the row set. This is done with the SELECT xxx FOR
UPDATE clause.
Optimistic locking:
You re-read data and only update it if it did not
change since the initial fetch.
When managing web-based Oracle databases, the traditional
"select for update" locking is inappropriate, and Oracle
professionals have struggled with alternative mechanisms to
maintain data integrity using an "optimistic" coding
strategy:
Re-read - When an update
comes in from the internet, the Oracle code re-reads the
data to ensure that there are no changes since the data was
originally delivered.
Timestamp -
Some Oracle shops add a timestamp column to enforce serial
updates and prevent accidental overlaying of data. Now
in Oracle 10g and beyond we see the new rowscn pseudo-column
and the rowdependencies clause.
Also, the ora_rowscn provides the System Change Number
(SCN) associated with each individual row in a table when it
was read.
One thing to note, by default Oracle will
not track SCN's at the row level in a table, so you need to
enable row level dependency tracking by using the
ROWDEPENDENCIES keyword in the CREATE TABLE command.
create table customer (
cust_id number(10) not
null,
cust_name varchar2(50) not null
ROWDEPENDENCIES
tablespace users;
This
rowdependencies clause changes the default behavior of
Oracle to put an SCN on every row within the tables, and not
just one SCN for every physical data block. This is an
answer to the optimistic strategy, much preferred over the
pessimistic locking approach.
Also see my notes on
row level locking.
|
|
|
Oracle Training from Don Burleson
The best on site
"Oracle
training classes" are just a phone call away! You can get personalized Oracle training by Donald Burleson, right at your shop!
|
|
|
|
|
Burleson is the American Team
Note:
This Oracle
documentation was created as a support and Oracle training reference for use by our
DBA performance tuning consulting professionals.
Feel free to ask questions on our
Oracle forum.
Verify
experience!
Anyone
considering using the services of an Oracle support expert should
independently investigate their credentials and experience, and not rely on
advertisements and self-proclaimed expertise. All legitimate Oracle experts
publish
their Oracle
qualifications.
Errata?
Oracle technology is changing and we
strive to update our BC Oracle support information. If you find an error
or have a suggestion for improving our content, we would appreciate your
feedback. Just
e-mail:
and include the URL for the page.
Copyright © 1996 - 2020
All rights reserved by
Burleson
Oracle ®
is the registered trademark of Oracle Corporation.
|
|