★ LOCK 충돌 및 해결방법
SESSION 1
SQL> UPDATE EMP
2 SET SAL=0
3 WHERE ENAME='SCOTT';
1 행이 갱신되었습니다.
SESSION 2
SQL> UPDATE EMP
2 SET DEPTNO=10
3 WHERE ENAME='SCOTT';
-- LOCK 충돌
** LOCK은 하나의 ROW 단위로 적용되기 때문에 다른 필드값을 변경하려 해도 LOCK 충돌 발생
SQL을 사용하여 lock 충돌 해결
SQL> SELECT SID, SERIAL#
2 FROM V$SESSION
3 WHERE SID IN(SELECT BLOCKING_SESSION FROM V$SESSION);
SID SERIAL#
---------- ----------
199 3167
SQL> ALTER SYSTEM KILL SESSION '199, 3167' IMMEDIATE;
시스템이 변경되었습니다.
★ 데드락(DEADLOCK)
SESSION 1
SQL> CONNECT SCOTT/TIGER
연결되었습니다.
SQL> UPDATE EMP
2 SET SAL=9000
3 WHERE ENAME='JONES';
1 행이 갱신되었습니다.
SQL> UPDATE EMP
2 SET DEPTNO=10
3 WHERE ENAME='SCOTT';
1 행이 갱신되었습니다.
SESSION 2
SQL> CONNECT SCOTT/TIGER
연결되었습니다.
SQL> UPDATE EMP SET SAL = 0
2 WHERE ENAME='SCOTT';
1 행이 갱신되었습니다.
SQL> UPDATE EMP
2 SET DEPTNO=20
3 WHERE ENAME='JONES';
UPDATE EMP
*
1행에 오류:
ORA-00060: 자원 대기중 교착 상태가 검출되었습니다
SQL> COMMIT;
커밋이 완료되었습니다. -- COMMIT 또는 ROLLBACK
COMMIT 이후 결과 - DATA는 모두 다 변경
SQL> SELECT ENAME, DEPTNO, SAL
2 FROM EMP
3 WHERE ENAME IN ('JONES','SCOTT');
ENAME DEPTNO SAL
---------- ---------- ----------
JONES 20 2975
SCOTT 20 0
'DB - ORACLE > Oracle Trouble Shooting' 카테고리의 다른 글
잘못된 password 접속 시도 확인 (0) | 2017.06.26 |
---|---|
unix server uptime 확인 (0) | 2017.05.15 |
ASM 환경에서 Hot Backup 사용 하여 Single DB로 복구 (0) | 2017.04.12 |
corruption 난 block의 data까지 예전 export file 에서 복구하는 방법 (0) | 2017.04.12 |
Oracle SGA 값을 증가 시킬 때 발생 장애 원인 (0) | 2016.01.29 |