8/9/2019 Oracle 10g Admin workshops PPTLess 17
1/16
Copyright 2004, Oracle. All rights reserved.
Monitoring and ResolvingLock Conflicts
8/9/2019 Oracle 10g Admin workshops PPTLess 17
2/16
17-2 Copyright 2004, Oracle. All rights reserved.
Objectives
After completing this lesson you should be able to do
the following:
Detect and resolve lock conflicts
Manage deadlocks
8/9/2019 Oracle 10g Admin workshops PPTLess 17
3/16
17-3 Copyright 2004, Oracle. All rights reserved.
Locks
Prevent multiple sessions from changing the same
data at the same time
Automatically obtained at the lowest possible
level for a given statement
Transaction 1
SQL> UPDATE hr.employees
2 SET salary=salary*1.1
3 WHERE employee_id=100;
SQL> UPDATE hr.employees
2 SET salary=salary+100
3 WHERE employee_id=100;
Transaction 2
8/9/2019 Oracle 10g Admin workshops PPTLess 17
4/16
17-4 Copyright 2004, Oracle. All rights reserved.
Locking Mechanism
High level of data concurrency
Row-level locks for inserts, updates, and deletes
No locks required for queries
Automatic queue management
Locks held until transaction ends (with commit or
rollback operation)
Transaction 1
SQL> UPDATE hr.employees
2 SET salary=salary*1.1
3 WHERE employee_id=101;
SQL> UPDATE hr.employees
2 SET salary=salary+100
3 WHERE employee_id=100;
Transaction 2
8/9/2019 Oracle 10g Admin workshops PPTLess 17
5/16
17-5 Copyright 2004, Oracle. All rights reserved.
Data Concurrency
Time:
09:00:00
Transaction 1 UPDATE hr.employeesSET salary=salary+100
WHERE employee_id=100;
Transaction 2 UPDATE hr.employeesSET salary=salary+100WHERE employee_id=101;
Transaction 3 UPDATE hr.employeesSET salary=salary+100
WHERE employee_id=102;
... ...
Transactionx UPDATE hr.employeesSET salary=salary+100
WHERE employee_id=xxx;
8/9/2019 Oracle 10g Admin workshops PPTLess 17
6/16
17-6 Copyright 2004, Oracle. All rights reserved.
Data Concurrency
Full Notes Page
8/9/2019 Oracle 10g Admin workshops PPTLess 17
7/16
17-7 Copyright 2004, Oracle. All rights reserved.
DML Locks
Transaction 1
SQL> UPDATE employees
2 SET salary=salary*1.1
3 WHERE employee_id= 106;1 row updated.
SQL> UPDATE employees
2 SET salary=salary*1.1
3 WHERE employee_id= 107;1 row updated.
Transaction 2
Each DML transaction must acquire two locks:
Row-exclusive lock for the row or rows being
updated Shared table-level lock for the table containing
the rows
8/9/2019 Oracle 10g Admin workshops PPTLess 17
8/16
17-8 Copyright 2004, Oracle. All rights reserved.
Enqueue Mechanism
The enqueue mechanism keeps track of:
Sessions waiting for locks
The requested lock mode
The order in which sessions requested the lock
8/9/2019 Oracle 10g Admin workshops PPTLess 17
9/16
17-9 Copyright 2004, Oracle. All rights reserved.
Lock Conflicts
UPDATE hr.employees SET
salary=salary+100 WHERE
employee_id=100;
1 row updated.
9:00:00 UPDATE hr.employees SET
salary=salary+100 WHERE
employee_id=101;
1 row updated.
UPDATE hr.employees SET
COMMISION_PCT=2 WHERE
employee_id=101;
Session waits enqueue due
to lock conflict.
9:00:05 SELECT sum(salary) FROMhr.employees;
SUM(SALARY)
-----------
692634
Session still waiting!
16:30:00
Many selects, inserts, updates,
and deletes during the last 7.5hours, but no commits or
rollbacks!
1 row updated.
Session continues.
16:30:01 commit;
Transaction 1 Transaction 2Time
8/9/2019 Oracle 10g Admin workshops PPTLess 17
10/16
17-10 Copyright 2004, Oracle. All rights reserved.
Possible Causes of Lock Conflicts
Uncommitted changes
Long-running transactions
Unnecessarily high locking levels
8/9/2019 Oracle 10g Admin workshops PPTLess 17
11/16
17-11 Copyright 2004, Oracle. All rights reserved.
Detecting Lock Conflicts
Select Blocking Sessions from the Performance page.
Click the Session ID link to view information about the
locking session, including the actual SQL statement.
8/9/2019 Oracle 10g Admin workshops PPTLess 17
12/16
17-12 Copyright 2004, Oracle. All rights reserved.
Resolving Lock Conflicts
To resolve a lock conflict:
Have the session holding the lock commit or roll
back.
Terminate the session holding the lock as a lastresort.
8/9/2019 Oracle 10g Admin workshops PPTLess 17
13/16
17-13 Copyright 2004, Oracle. All rights reserved.
Deadlocks
Transaction 2Transaction 1
UPDATE employeesSET salary = salary x 1.1
WHERE employee_id = 1000;
UPDATE employees
SET salary = salary x 1.1
WHERE employee_id = 2000;
ORA-00060:Deadlock detected while
waiting for resource
UPDATE employeesSET manager = 1342
WHERE employee_id = 2000;
UPDATE employees
SET manager = 1342
WHERE employee_id = 1000;
9:00
9:15
9:16
8/9/2019 Oracle 10g Admin workshops PPTLess 17
14/16
17-14 Copyright 2004, Oracle. All rights reserved.
Summary
In this lesson you should have learned how to:
Detect and resolve lock conflicts
Manage deadlocks
8/9/2019 Oracle 10g Admin workshops PPTLess 17
15/16
17-15 Copyright 2004, Oracle. All rights reserved.
Practice 17:
Locks in the Oracle Database
This practice covers common administrative tasks
relating to locks in Oracle Database 10g, including:
Detecting which session is causing the locking
conflict Resolving locking conflicts
8/9/2019 Oracle 10g Admin workshops PPTLess 17
16/16
17-16 Copyright 2004, Oracle. All rights reserved.
Practice Lesson 17
Full Notes Page