Estos pasos son los que se pueden seguir cuando hay una tarea que está bloqueada sobre una tabla de oracle, el material fue suministrado por paviles.
1. Se ingresó a la base de datos de Oracle en modo super usuario:sqlplus system/********** AS SYSDBA
2. Nos encontramos que la tabla estaba bloqueada al tratar de borrarla normalmente:DROP TABLE MYSCHEME.REP_RACK_CAPACIDAD;
DROP TABLE MYSCHEME.REP_RACK_CAPACIDAD
*
ERROR at line 1:
ORA-00054: resource busy and acquire with NOWAIT specified
3. Se intenta bloquear la tabla en modo exclusivo, sin éxito:LOCK TABLE MYSCHEME.REP_RACK_CAPACIDAD IN EXCLUSIVE MODE NOWAIT;
LOCK TABLE MYSCHEME.REP_RACK_CAPACIDAD IN EXCLUSIVE MODE NOWAIT*
ERROR at line 1:
ORA-00054: resource busy and acquire with NOWAIT specified
4. Para ver si hay tareas bloqueadas (lock) en reservas se utiliza el siguiente comando:select mode_held from dba_dml_locks where owner='MYSCHEME';
MODE_HELD
-------------
Row-X (SX)
Row-X (SX)
Row-X (SX)
Row-X (SX)
Row-X (SX)
Row-X (SX)
Row-X (SX)
Row-X (SX)
5. Se constata que hay tareas bloqueadas. El siguiente paso es ver la información relacionada con esas tareas, para ver si es sobre la tabla en cuestión:SQL> set linesize 130
SQL> set pages 100
SQL> col username format a20
SQL> col sess_id format a10
SQL> col object format a25
SQL> col mode_held format a10
SQL> select oracle_username || ' (' || s.osuser || ')' username
, s.sid || ',' || s.serial# sess_id
, owner || '.' || object_name object
, object_type
, decode( l.block
, 0, 'Not Blocking'
, 1, 'Blocking'
, 2, 'Global') status
, decode(v.locked_mode
, 0, 'None'
, 1, 'Null'
, 2, 'Row-S (SS)'
, 3, 'Row-X (SX)'
, 4, 'Share'
, 5, 'S/Row-X (SSX)'
, 6, 'Exclusive', TO_CHAR(lmode)) mode_held
from v$locked_object v
, dba_objects d
, v$lock l
, v$session s
where v.object_id = d.object_id
and v.object_id = l.id1
and v.session_id = s.sid
order by oracle_username
, session_id
/
6. La consulta anterior arrojó la siguiente información:USERNAME SESS_ID OBJECT OBJECT_TYPE STATUS MODE_HELD
-------------------- ---------- --------------------------- ------------------- ------------ ----------MYSCHEME (daraya) 54,21757 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (daraya) 54,21757 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (daraya) 54,21757 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (daraya) 54,21757 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (daraya) 54,21757 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (daraya) 54,21757 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (daraya) 54,21757 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (daraya) 66,51052 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (daraya) 66,51052 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (daraya) 66,51052 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (daraya) 66,51052 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (daraya) 66,51052 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (daraya) 66,51052 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (daraya) 66,51052 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (oracle) 70,53090 MYSCHEME.DATO_ENTRADA TABLE Not Blocking Row-X (SX)MYSCHEME (oracle) 77,25741 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (oracle) 77,25741 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (oracle) 77,25741 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (oracle) 77,25741 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (oracle) 77,25741 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (oracle) 77,25741 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (oracle) 77,25741 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (oracle) 79,64909 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (oracle) 79,64909 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (oracle) 79,64909 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (oracle) 79,64909 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (oracle) 79,64909 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (oracle) 79,64909 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (oracle) 79,64909 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (daraya) 107,41701 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (daraya) 107,41701 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (daraya) 107,41701 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (daraya) 107,41701 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (daraya) 107,41701 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (daraya) 107,41701 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (daraya) 107,41701 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (daraya) 131,21045 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (daraya) 131,21045 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (daraya) 131,21045 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (daraya) 131,21045 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (daraya) 131,21045 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (daraya) 131,21045 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (daraya) 131,21045 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (daraya) 134,52439 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (daraya) 134,52439 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (daraya) 134,52439 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (daraya) 134,52439 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (daraya) 134,52439 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (daraya) 134,52439 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (daraya) 134,52439 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)
50 rows selected.
7. Por lo que las tareas a eliminar son:MYSCHEME (daraya) 54,21757 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (daraya) 66,51052 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (oracle) 77,25741 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (oracle) 79,64909 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (daraya) 107,41701 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (daraya) 131,21045 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)MYSCHEME (daraya) 134,52439 MYSCHEME.REP_RACK_CAPACIDAD TABLE Not Blocking Row-X (SX)
8. Para eliminar las tareas se ejecutan los siguientes comandos:SQL> alter system kill session '54,21757';
System altered.
SQL> alter system kill session '66,51052';
System altered.
...
SQL> alter system kill session '79,64909';
alter system kill session '79,64909'
*
ERROR at line 1:
ORA-00031: session marked for kill
9. Todas excepto la tarea '79,64909' se pudieron borrrar. Se prueba mandando a eliminar la tarea con un IMMEDIATE para forzar la interrupción:SQL> alter system kill session '79,64909' IMMEDIATE;
alter system kill session '79,64909' IMMEDIATE
*
ERROR at line 1:
ORA-00031: session marked for kill
10. Utilizar el IMMEDIATE fracasa, por lo que se debe eliminar la tarea desde sistema operativo. Para lo cual, debe verse primero cuál es el SID de la tarea de oracle:SQL> SELECT s.sid, p.spid, s.osuser, s.program
FROM v$process p, v$session s
WHERE p.addr = s.paddr;
2 3 4 5 6 7
SID SPID OSUSER PROGRAM
---------- ------------ ------------------------------ ------------------------------------------------
170 18417 oracle oracle@server2 (PMON)
169 18419 oracle oracle@server2 (PSP0)
168 18421 oracle oracle@server2 (MMAN)
167 18423 oracle oracle@server2 (DBW0)
166 18425 oracle oracle@server2 (LGWR)
165 18427 oracle oracle@server2 (CKPT)
164 18429 oracle oracle@server2 (SMON)
163 18431 oracle oracle@server2 (RECO)
162 18433 oracle oracle@server2 (CJQ0)
161 18435 oracle oracle@server2 (MMON)
160 18437 oracle oracle@server2 (MMNL)
79 28173 oracle oracle@server2 (J000)
84 17591 oracle oracle@server2 (J001)
90 17621 daraya Control_de_Jobs.exe
149 18509 oracle oracle@server2 (QMNC)
82 16598 oracle sqlplus@server2 (TNS V1-V3)
145 18537 oracle emagent@server2 (TNS V1-V3)
144 18540 oracle emagent@server2 (TNS V1-V3)
140 18546 oracle oracle@server2 (q000)
134 17060 OMS
139 18551 oracle oracle@server2 (q001)
70 17381 oracle oracle@server1 (TNS V1-V3)
50 14842 daraya SQL Developer
158 18631 OMS
59 9905 Administrator meteoroparser.exe
156 18637 OMS
143 18643 OMS
88 11406 Administrator meteoroparser.exe
108 16883 daraya VB6.EXE
133 16885 daraya VB6.EXE
58 rows selected.
11. Se logra identificar la tarea con el id de oracle (79), y se debe ir al sistema operativo para eliminar la tarea 28173:SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
oracle@pantera:/usr/local/oracle/oracle/product/10.2.0/db_1/bin> exit
logout
pantera:~ # kill -9 28173
12. Luego se debe ingresar a oracle como super usuario y borrar la tabla (eso era lo que se quería hacer desde un principio):SQL> drop table reservas.REP_RACK_CAPACIDAD;
Table dropped.


