Database

Unit Objective:

The objective of the unit to cover various concurrency and locking methods of database using practical implementation. 

6.1 Concurrency Control

In a single-user database, the user can modify data in the database without concern for other users modifying the same data at the same time. However, in a multiuser database, the statements within multiple simultaneous transactions can update the same data. Transactions executing at the same time need to produce meaningful and consistent results. Therefore, control of data concurrency and data consistency is vital in a multiuser database.

  • Data concurrency means that many users can access data at the same time.
  • Data consistency means that each user sees a consistent view of the data, including visible changes made by the user's own transactions and transactions of other users.
  • Data integrity means the data and structures must reflect all changes made to them in the correct sequence.

6.2 Locking

Locks are mechanisms that prevent destructive interaction between transactions accessing the same resource. Using locks it will provide,

•              Prevent multiple sessions from changing the same data at the same time

•              Are automatically obtained at the lowest possible level for a given statement

•              Do not escalate, lock escalation which occurs when numerous locks are held at one level of granularity (for example, rows) and a database raises the locks to a higher level of granularity (for example, table). If a user locks many rows in a table, then some databases automatically escalate the row locks to a single table. The number of locks decreases, but the restrictiveness of what is locked increases.

Resources include two general types of objects:

·                     User objects, such as tables and rows (structures and data)

·                     System objects not visible to users, such as shared data structures in the memory and data dictionary rows.


6.3 Lock Modes

The Lock table statement syntax is 

LOCK TABLE table-Name IN { SHARE | EXCLUSIVE } MODE 

In general there is two modes of locking in a  multi user database:

Exclusive Lock Mode

The locked data can only be displayed or edited by a single user i.e the owner of the object. A request for another exclusive lock or for a shared lock is rejected, if it is roll back then it will accept.

Share Lock Mode

When a statement reads data without making any modifications, its transaction obtains a shared lock on the data. But a transaction that tries to update the data will be prevented from doing so until the shared lock is released. More than one user can access the locked data at the same time in display mode. A request for another shared lock is accepted, even if it comes from another user. An exclusive lock is rejected.


Locking Mode
fig6-1.jpgLocking Mode

Locking Mode

Using SYS user created table lockacc and insertd the below given values:

create and insert lockacc table
3.jpgcreate and insert lockacc table

create and insert lockacc table


grant privilege to scott and hr
6-4_grant_prvilege_to_scott_and_hr.jpggrant privilege to scott and hr

grant privilege to scott and hr

Exclusive mode- practical

dml operation using exclusive mode for owner of the object
6-17__exclusive_mode.jpgdml operation using exclusive mode for owner of the object

dml operation using exclusive mode for owner of the object

If the table is locked exclusive mode, the owner of the object can do DML operation. Here SYS user is locked the table exclusive mode and he is allow to update the table.


fig 6-12
6-12_-_in_Exclusive_mode_unable_to_process_DML_OPERATION_BY_other_users_i1Vo5p2.jpgfig 6-12

fig 6-12

In Figure 6-12,  the SYS user checks how many session are currently available using V$SESSION and then locking the table using exclusive mode. In the second screen scott user can access the locked table, but he is unable to do DML operation in the exclusive lock mode.


fig 6-18
6-18_In_exclusive_mode_other_lock_mode_is_not_allowed_kF8T2vY.jpgfig 6-18

fig 6-18

In Figure 6-18, the user SYS lock the table in exclusive mode and the same table another session the user HR is trying to lock in share mode. This is difference between share and exclusive, exclusive mode not allow any other lock mode if it is already applied, but in share mode it is possible.

Share Mode - Practical

Fig 6-16
6-16_share_mode_both_can__lock_the_same_table_at_a_time_dADamrr.jpgFig 6-16

Fig 6-16

Fig 6.16 the first session is by HR user and second screen session is SYS user, both can lock the table using share mode.

VIEW LOCK TABLE

Display list of locked object
6-8_view_locked_object.jpgDisplay list of locked object

Display list of locked object

UNLOCK THE TABLE

Unlocking table follow the steps given below

step1 : Using SYS user, find out object_id for lockacc table using dba_objects data dictionary view. After that find out SID (session id) of the object using V$lock, how many session lock occurred.

STEP 1 - UNLOCK TABLE
fig_6-13_unlock_step1.jpgSTEP 1 - UNLOCK TABLE

STEP 1 - UNLOCK TABLE

STEP 2: Using ALTER SYSTEM statement kill the session, then lock will be released.  Killing session you can't kill current session of SYS USER, but you can kill another user scott (the same object is locked by scott user). i.e error message 

STEP 2 UNLOCK TABLE
FIG_6-13_-_STEP_2_UNLOCK_TABLE.jpgSTEP 2 UNLOCK TABLE

STEP 2 UNLOCK TABLE

step 3: if you kill another user scott session in SYS user session it will display the message.

step 3 - unlock table
fig_6-13_-_step_13_unlock_table.jpgstep 3 - unlock table

step 3 - unlock table

UNLOCK TABLE TO ACTIVE

Once you kill the session, connect the session and again grant privilege to scott user.   Then only user can access and execute the table.

unlock to active
fig_6-14_unlock_table_to_active.jpgunlock to active

unlock to active


6.4  Oracle Automatic Locking Categories

Oracle Database locks are divided into the following categories.


Automatic Oracle Locking categories
fig6-2.jpgAutomatic Oracle Locking categories

Automatic Oracle Locking categories


Automatic Lock category modes
FIG6-3.jpgAutomatic Lock category modes

Automatic Lock category modes


6.5 DML Lock

DML lock obtained for Insert, Update and Delete operation of the table. It cannot be used for Drop table and create index statement. For example, if three users are modifying data in same table, then three entries would be required. If three users are modifying data in two different tables, then six entries would be required.  Exclusive mode of locking table cannot be used in DML lock.

    • Readers never wait for writers
    • Writers never wait for readers unless the reader uses the select…for update statement
    • Writers wait for other writers only if they are attempting to update the same row

The screen was scott user and bottom is HR user session, both are accessing the same data of SYS user lockacc table. 


Reader never wait for writer
7_4MQEGnB.jpgReader never wait for writer

6-7 Reader never wait for writer

Enqueue Mechanism

The Oracle locking methodology is based on the concept of an enqueue. To enqueue a lock request means to place that request on the queue for the lock. The enqueue mechanism keeps track of sessions waiting for locks, the lock mode requested, and the order in which locks were requested.

When several sessions need to update the same row at the same time, the first session to update the row will acquire the exclusive row lock, and each session will acquire a shared table lock (to prevent DDL operations on the table). The enqueue mechanism keeps track of which transaction holds the row lock, and an ordered list of which ones wait for it. This ordered list is processed in FIFO order, meaning that the first to request the lock, will be the first to be serviced once that lock becomes available.

The value of the ENQUEUE_RESOURCES initialization parameter sets the number of resources that can be concurrently locked within the database.

6.6 DDL Lock

A data dictionary (DDL) lock prevent objects from being altered or dropped before procedure compilation is complete.

An exclusive DDL lock prevents other session from obtaining a DDL or DML lock.

For example, a DROP TABLE operation is not allowed to drop a table while an ALTER TABLE operation is adding a column to it, and vice versa. However, a query against the table is not blocked.

A share DDL lock for a resource prevents destructive interference with conflicting DDL operations, but allows data concurrency for similar DDL operations.

select * from dba_ddl_locks;

6.7 System Lock

prevent multiple processes from running the same application code in the database more than once at the same time. long wait latches are held for long periods of time.  Short wait latches are such that processes dependent on them do not have a long period to wait before acquiring the latch

6.8 Dead Lock

Unit Summary


Unit 6- Exercise

Worker Table

Worker_id

Wname

Status

Salary

Experience

11 MJED Security_officer 4500 25
12 AHLAM Asst_security 3500 18
13 Laila Asst_security 3500

16

14 Hamood Junior_security 2000

8


create table worker(worker_id number(5) primary key, wname varchar2(15), status varchar2(25),salary number(6), exp number(4));

insert into worker values(11,'MJED','Security_officer',4500,25);

insert into worker values(12,'AHLAM','Asst_security',3500,18);

insert into worker values(13,'Laila','Asst_security',3500,16);

insert into worker values(14,'Hamood','Junior_security',2000,8);


1. Lock the worker table by hr and sys user. 

2. Display the locked information. 

3. Unlock the worker table. 

4) Users Hiba and Nawaf are locking the worker table with appropriate lock mode. 

5) Nawaf want to display the record where worker_id is 11 and at the same time another session Hiba also deleting the record of worker_id is 14.

6) Login as Sys user and display locked session id information.

Video Tutorial Link

Lecture Notes For Unit-6

Questions

References

1. http://docs.oracle.com/cd/E11882_01/server.112/e41084/ap_locks001.htm#SQLRF55502

2. https://www.toadworld.com/platforms/oracle/w/wiki/1315.dml-locks

3. http://www.datadisk.co.uk/html_docs/oracle/locking.htm

4.http://www.dba-oracle.com/t_latches.htm

5. http://www.databasejournal.com/features/oracle/oracle-mutexes.html


Return to top