'lock'에 해당되는 글 3건

  1. 2009.01.30 오라클 테이블 락 ( Table lock )
  2. 2009.01.30 ORA-28000 발생시 해결법 (2)
  3. 2008.07.08 with (nolock) 란?

오라클 테이블 락 ( Table lock )

DATABASE/Oracle 2009. 1. 30. 02:32

### Lock 확인 쿼리
SELECT do.object_name, do.owner, do.object_type,do.owner, vo.xidusn, vo.session_id,
vo.locked_mode
FROM v$locked_object vo , dba_objects do
WHERE vo.object_id = do.object_id ;

####  어떤 object에 어떤 lock이 걸렸는지 확인
SELECT  T1.object_name, DECODE(locked_mode, 2, 'ROW SHARE', 3, 'ROW EXCLUSIVE',  4, 'SHARE', 5, 'SHARE ROW EXCLUSIVE', 6, 'EXCLUSIVE', 'UNKNOWN') lock_mode
FROM  dba_objects T1, v$locked_object T2
WHERE T1.object_id = T2.object_id;

#### session 확인
select * from v$session where status = 'ACTIVE'

#### cursor 확인
v$open_cursor

#### 테이블의 lock 확인
SELECT A.SID, A.SERIAL#, B.TYPE, C.OBJECT_NAME
FROM V$SESSION A, V$LOCK B, DBA_OBJECTS C
WHERE A.SID=B.SID
AND B.ID1=C.OBJECT_ID
AND B.TYPE='TM'
AND C.OBJECT_NAME IN ('<테이블이름>');

/*******************************************************************************
* LOCK 관련
*******************************************************************************/
--V$LOCK 을 사용한 잠금 경합 모니터링
SELECT s.username, s.sid, s.serial#, s.logon_time,
  DECODE(l.type, 'TM', 'TABLE LOCK',
         'TX', 'ROW LOCK',
      NULL) "LOCK LEVEL",
  o.owner, o.object_name, o.object_type
FROM v$session s, v$lock l, dba_objects o
WHERE s.sid = l.sid
AND o.object_id = l.id1
AND s.username IS NOT NULL   

--락이 걸린 세션 자세히 알아보기
select a.sid, a.serial#,a.username,a.process,b.object_name,
decode(c.lmode,2,'RS',3,'RX',4,'S',5,'SRX',8,'X','NO') "TABLE LOCK",
decode (a.command,2,'INSERT',3,'SELECT',6,'UPDATE',7,'DELETE',12,'DROP TABLE',26,'LOCK TABLE','UNknown') "SQL",
decode(a.lockwait, NULL,'NO wait','Wait') "STATUS"
from v$session a,dba_objects b, v$lock c
where a.sid=c.sid and b.object_id=c.id1
and c.type='TM'

--락이 걸린 세션 간단히 알아보기
select a.sid, a.serial#, b.type, c.object_name, a.program, a.lockwait,
      a.logon_time, a.process, a.osuser, a.terminal
from v$session a, v$lock b, dba_objects c
where a.sid = b.sid
  and b.id1 = c.object_id
  and b.type = 'TM';

select a.sid, a.serial#, a.username, a.process, b.object_name
from v$session a , dba_objects b, v$lock c
where a.sid=c.sid and b.object_id = c.id1
and c.type = 'TM'

--락이 걸린 세션을 찾아 내어 세션을 죽이려고 해도 죽지 않는 경우
--아래 쿼리문으로 OS단의 PROCESS ID를 찾아내어 OS에서 죽인다
--kill -9 프로세스아이디
select substr(s.username,1,11) "ORACLE USER", p.pid "PROCESS ID",
s.sid "SESSION ID", s.serial#, osuser "OS USER",
p.spid "PROC SPID",s.process "SESS SPID", s.lockwait "LOCK WAIT"
from v$process p, v$session s, v$access a
where a.sid=s.sid and
p.addr=s.paddr and
s.username != 'SYS'

--위 쿼리문의 결과가 있다면 락이 걸린 세션이 있다는것이므로 아래의 쿼리문으로 세션을 죽인다
ALTER SYSTEM KILL SESSION '11,39061'

/**************************************************************************************/

출처 : http://cocoroworld.com/blog/root/entry/오라클-락lock

'DATABASE > Oracle' 카테고리의 다른 글

[Oracle]현재월의 첫 특정요일, 마지막 주 특정요일 가져오기  (0) 2009.03.20
Full Outer Join  (0) 2009.02.24
오라클 테이블 락 ( Table lock )  (0) 2009.01.30
ORA-28000 발생시 해결법  (2) 2009.01.30
Enqueue 와 Latch  (0) 2008.11.19
Materialized view  (0) 2008.01.16
tags : lock, Oracle, session
Trackbacks 0 : Comments 0

Write a comment


ORA-28000 발생시 해결법

DATABASE/Oracle 2009. 1. 30. 02:18

ORA-28000에러는 일정 회수이상 로그인 실패시 계정에 lock이 걸리면서
"ORA-28000: the account is locked"
라는 메시지를 뱉어낸다.
(10g일 경우 설치 후 처음 scott계정을 사용할 때도 이런 에러가 뜬단다. 난 본적이 없어 모르겠다^^;)

1. 일단 sysdba로 접속한다.
sqlplus "/ as sysdba"

2. lock걸린 user를 찾아낸다.
SELECT username, account_status, to_char(lock_date,'yy/mm/dd hh24:mi') lock_date
FROM dba_users;

사용자 삽입 이미지


user가 MODELINGWORLD인 놈이 lock이 걸린걸 확인할 수 있다.

3. lock을 해제한다.
ALTER USER MODELINGWORLD account unlock;

4. 패스워드변경(아무래도 찜찜하니 패스워드도 변경해야겠지)
ALTER USER SYSTEM IDENTIFIED BY ****;


- 문
그럼 도대체 몇번 로그인을 실패하면 lock이 걸리는 거냐?

- 답
SQL> SELECT p.profile, p.resource_name, p.limit
  2  FROM dba_users u, dba_profiles p
  3  WHERE p.profile = u.profile
  4  AND username='modelingworld';
위와 같은 쿼리를 날리면
결과 중에 'FAILED_LOGIN_ATTEMPTS' 컬럼이 제한 개수이다.

그럼 제한을 풀 수도 있지않을까? 당근 있다.
ALTER profile default limit FAILED_LOGIN_ATTEMPTS UNLIMITED;

'DATABASE > Oracle' 카테고리의 다른 글

Full Outer Join  (0) 2009.02.24
오라클 테이블 락 ( Table lock )  (0) 2009.01.30
ORA-28000 발생시 해결법  (2) 2009.01.30
Enqueue 와 Latch  (0) 2008.11.19
Materialized view  (0) 2008.01.16
Clustring Factor에 대한 考察  (0) 2007.08.27
tags : lock, Oracle, 에러
Trackbacks 0 : Comments 2
  1. 지나다.. 2014.08.11 22:41 Modify/Delete Reply

    고맙습니다. 잘 배우고 갑니다.
    복 받으실겁니다.

Write a comment


with (nolock) 란?

DATABASE/SQLServer 2008. 7. 8. 18:40
SQL Server의 기본 격리 수준(isolation level)은 read committed 입니다.
그래서 데이터를 읽을 때는 공유 잠금이 유지됩니다.
그러므로, 쉽게 설명하자면 SELECT문이 실행 중인 동안에
같은 row혹은 table에 insert나 update하는 작업은 block됩니다.
거꾸로 같은 row, data page 혹은 테이블에 데이터를 insert, update하는 동안 SELECT문은 block되게 됩니다. 이렇게 되면 데이터베이스 성능이 현저히 떨어지게 됩니다.
그러므로 일반적으로 단순 조회 쿼리에는 with (nolock)문을 추가하여 사용합니다.

- 사용법-
SELECT  * FROM dbo.Jobs with(nolock)
WHERE...

'DATABASE > SQLServer' 카테고리의 다른 글

카탈로그내에서 특정 컬럼을 참조하는 SP조회  (0) 2008.11.13
[MSSQL]테이블 소유자 변경하기  (0) 2008.08.20
MSSQL 괜찮은 명령어들  (0) 2008.07.30
Trigger  (0) 2008.07.30
SET IDENTITY_INSERT  (0) 2008.07.09
with (nolock) 란?  (0) 2008.07.08
tags : lock, msSQL
Trackbacks 0 : Comments 0

Write a comment