Tuesday 13 March 2012

UnLock the Locked Objects


First Method
1. The below query can be used for determining the if any object locked in an oracle database.
Sql.

SELECT c.owner
      ,c.object_name
      ,c.object_type
      ,b.SID
      ,b.serial#
      ,b.status
      ,b.osuser
      ,b.machine
FROM   v$locked_object a, v$session b, dba_objects c
WHERE  b.SID = a.session_id AND a.object_id = c.object_id;
2. And if you need to kill any session you can use the below query to do the same.
Sql.
ALTER SYSTEM KILL SESSION sid,serial#’;
Ex:
ALTER SYSTEM KILL SESSION '697,13641'
Second Method

  1. Get the Object ID from the dba_objects table. All of your tables will be assigned a unique id and stores a reference in dba_objects table. This table is useful in finding the basic information about each object stored on your Oracle instance, and not only tables.
    Here is the SQL statement to get the object id of the locked table.

    SELECT object_id FROM dba_objects WHERE object_name='YOUR TABLE NAME';
  2. Get the SID for the corresponding Object ID we have obtained from the step 1. You can get the SID from v$lock table. Here is the query.

    SELECT sid FROM v$lock WHERE id1=OBJECT ID FROM STEP1
  3. Note down all sid values from step 2. Get the sid, serial number pairs from the v$session table using the SID obtained from the step 2. Here is the query.

    SELECT sid, serial# from v$session where sid in (COMMA SEPARATED LIST OF SIDs FROM STEP2.)
  4. Note down the information from step 3. Now we have to kill the sessions that locked the object we require. Below is the query to do that.

    ALTER SYSTEM KILL SESSION ‘SID,SERIAL#’ pair values from step 3
    e.g. ALTER SYSTEM KILL SESSION '231,23454'

No comments:

Post a Comment