Unlocking a locked table/object in Oracle
Oracle put locks on tables when any DML/DDL operations performing. Generally, some internal processes accesses the data and locks the table. So if you want to forcibly unlock the table you can follow the below steps.
- 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';
- 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
- 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.)
- 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'