Oracle 테이블이 잠겨 있는지 확인하는 방법은 무엇입니까?


22

Oracle Enterprise 11gR2에 설치된 BI 소프트웨어 및 리포지토리 데이터베이스를 사용하고 있습니다.

이러한 배치 보고서 중 일부는 여전히 잠겨있을 수있는 데이터베이스 테이블에 액세스하려고합니다. Oracle 테이블이 잠겨 있는지 어떻게 알 수 있습니까? 히스토리 세부 사항과 같이 분석에 표시되는 SQL 문이 있습니까?


특정 시간 간격 내에 물건을 표시하고 싶습니다.
Selahattin

예 : 추가 분석을 위해 02:00:00 PM-05:00:00 PM 사이의 모든 잠긴 테이블을 나열하려고합니다.
Selahattin

일반적으로 oracle에서 잠긴 테이블을 찾고 싶습니다.
Selahattin

1
@Selahattin 응용 프로그램 수준 잠금에 대해 이야기하고 있습니까? 오라클은 일반적으로 직렬화 수준과 디자인으로 인해 테이블 ​​잠금을 수행하지 않습니다
Philᵀᴹ

답변:


32

다음 쿼리는 모든 잠금에 대한 세부 사항을 제공합니다.

SELECT B.Owner, B.Object_Name, A.Oracle_Username, A.OS_User_Name  
FROM V$Locked_Object A, All_Objects B
WHERE A.Object_ID = B.Object_ID

10

다음 스크립트를 사용하여 Oracle 시스템 내의 모든 잠금 오브젝트를 빠르게 식별 할 수 있습니다.

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;

참고 자료 : Burleson Consulting의 오라클 팁 http://www.dba-oracle.com/t_find_oracle_locked_objects.htm


2

V $ LOCKED_OBJECT 에서 현재 잠긴 오브젝트를 조회 할 수 있습니다 .

잠금에 대한 기록은 없지만 모든 잠금을 기록하면 성능 오버 헤드가 커지고 많은 데이터가 저장됩니다.

데이터베이스에 가장 가까운 것은 Active Session history V $ ACTIVE_SESSION_HISTORY , DBA_HIST_ACTIVE_SESS_HISTORY (사용할 수있는 적절한 라이센스가있는 경우)이며 차단 세션, 명령문 및 기타 정보는 볼 수 있지만 잠긴 테이블은 볼 수 없습니다. 그렇지 않으면 적절한 뷰를 쿼리하고 필요한 사용자 정의 스크립트를 사용하여 필요한 데이터를 저장할 수 있습니다.


2

아래 쿼리를 사용하면 테이블에서 잠금을 찾을 수 있습니다.

column oracle_username format a15;
column os_user_name format a15;
column object_name format a37;
column object_type format a37;
select a.session_id,a.oracle_username, a.os_user_name, b.owner "OBJECT OWNER", b.object_name,b.object_type,a.locked_mode from 
(select object_id, SESSION_ID, ORACLE_USERNAME, OS_USER_NAME, LOCKED_MODE from v$locked_object) a, 
(select object_id, owner, object_name,object_type from dba_objects) b
where a.object_id=b.object_id;

차단 잠금


0

잠긴 개체에 대한 잠금을 해제하려면 해당 세션을 종료하십시오.

-- Query to Get List of all locked objects
SELECT B.Owner, B.Object_Name, A.Oracle_Username, A.OS_User_Name  
FROM V$Locked_Object A, All_Objects B
WHERE A.Object_ID = B.Object_ID ; 
-- and A.OS_USER_NAME = 'mahendar' 

-- Query to Get List of locked sessions        
select SID,SERIAL#,INST_ID from gv$session a  where schemaname = 'SYSTEM';
-- and osuser =  'mahendar';
-- o/p: 314 26513   1

-- Statement to Kill the session [pass values in the same order and append @ for inst_id]
alter system kill session '314,26513,@1';

0

테이블 잠금을 확인 v$lock하고 dba_objects볼 수 있습니다. 아래 쿼리는 잠금 세부 정보를 제공합니다.

select a.sid||'|'|| a.serial#||'|'|| a.process
from v$session a, v$locked_object b, dba_objects c
where b.object_id = c.object_id
and a.sid = b.session_id
and OBJECT_NAME=upper('&TABLE_NAME');

QUERY 2 :

select
(select username from v$session where sid=a.sid) blocker,
a.sid,
' is blocking ',
(select username from v$session where sid=b.sid) blockee,
b.sid
from
v$lock a,
v$lock b
where
a.block = 1
and
b.request > 0
and
a.id1 = b.id1
and
a.id2 = b.id2;

아래 쿼리를 사용하면 더 자세한 정보를 얻을 수 있습니다. 테이블 잠금

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.