#lock#oracle#tibero
select
count(1)
from
v$locked_object vo
, dba_objects do
where vo.object_id = do.object_id;
[한줄표시] select count(1) from v$locked_object vo, dba_objects do where vo.object_id = do.object_id;
※ 지정된 계정에 대해 검색시 접속계정명도 조건에 추가
select * from v$locked_object
where oracle_username = '{접속계정명}';
select
vs.sid
, vs.serial#
from
v$session vs
, v$lock vl
, dba_objects do
where vs.sid = vl.sid and vl.id1=do.object_id and vl.type='TM';
>>> 락걸린 테이블명을 알고 있으면 아래 조건을 추가하면 된다.
and do.object_name = '{table name}'
[한줄표시] select vs.sid,vs.serial# from v$session vs,v$lock vl, dba_objects do where vs.sid = vl.sid and vl.id1=do.object_id and vl.type='TM';
※ 실제 락이 걸려 있는거 외 장기적으로 실행중인 쿼리일 가능성 포함
select
distinct vo.session_id
,vss.serial#
,do.object_name
,vss.machine
,vss.terminal
,vss.program
,vsql.address
,vsql.piece
,vsql.sql_text
from
v$locked_object vo
,v$session vss
,v$sqltext vsql
,dba_objects do
where
1=1
and vo.session_id = vss.sid
and vo.object_id = do.object_id
and vss.sql_address = vsql.address
order by vsql.address, vsql.piece;
[한줄표시] select distinct vo.session_id,vss.serial#,do.object_name,vss.machine,vss.terminal,vss.program,vsql.address,vsql.piece,vsql.sql_text from v$locked_object vo,v$session vss,v$sqltext vsql,dba_objects do where 1=1 and vo.session_id = vss.sid and vo.object_id = do.object_id and vss.sql_address = vsql.address order by vsql.address, vsql.piece;
alter system kill session 'sid, serial#';
alter system kill session '1954, 63611';
ERROR at line 1:
ORA-00031: session marked for kill
※ 오래지나면 사라지나 바로 해제하고 싶으면
select vs.sid,vs.username,vs.osuser,vs.process fg_pid,vp.spid bg_pid from v$session vs,v$process vp where vs.paddr=vp.addr;
※ 위와 같이 쿼리실행해 나온 PID 를 KILL 한다. (종류 후 실행)
# KILL -9 {PID}