Oracle puts locks while performing any DDL or DML operation on oracle tables.When table locks is present on any tables in Oracle we cannot run DDL on those tables.
Some of the locks automatically set by oracle are RS and RX Locks.
SELECT … FOR UPDATE execution results in RS (row share) table lock. When you execute an INSERT, UPDATE or DELETE Oracle puts RX (row exclusive) table lock.
We have to kill the session which holds the lock in order to execute further operations. Follow the below steps to kill the session and forcibly unlock the table.
Let’s assume that 'EMP' table is locked,
SELECT object_id FROM dba_objects WHERE object_name='EMP';
OBJECT_ID
----------
7401242
If there are no locks present for the table 'EMP' this query won’t return any values.
SELECT sid FROM v$lock WHERE id1=7401242
SID
----------
3434
SELECT sid, serial# from v$session where sid=3434
SID SERIAL#
---------- ----------
3434 92193
ALTER SYSTEM KILL SESSION '3434,92193' ;
Once the session is killed you will be able to carry out any DDL activities on EMP table. Also you can check in TOAD if there are any active sessions associated to the SID that we killed, to make sure that the session has been killed.
No comments:
Post a Comment