SQL> create table t1(c1 number, c2 number);
테이블이 생성되었습니다.
SQL> insert into t1 values(1 , 1);
1 개의 행이 만들어졌습니다.
SQL> insert into t1 values(2 , 2);
1 개의 행이 만들어졌습니다.
SQL> commit;
커밋이 완료되었습니다.
-- 각 세션에 테이블 권한 주기
SQL> grant select, insert, update, delete on t1 to testuser;
권한이 부여되었습니다.
SQL> grant select, insert, update, delete on t1 to scott;
권한이 부여되었습니다.
-- 세션#1
SQL> create synonym t1 for sys.t1;
동의어가 생성되었습니다.
SQL> update t1 set c2 = 2 where c1 = 1;
1 행이 갱신되었습니다.
-- 세션#2
SQL> create synonym t1 for sys.t1;
동의어가 생성되었습니다.
SQL> update t1 set c2 = 2 where c1 = 2;
1 행이 갱신되었습니다.
-- 세션#1
SQL> update t1 set c2 = 2 where c1 = 2;
...(대기 중)...
-- 세션#2
SQL> update t1 set c2 = 2 where c1 = 1;
...(대기 중)...
-- 세션#1
SQL> update t1 set c2 = 2 where c1 = 2;
update t1 set c2 = 2 where c1 = 2
*
1행에 오류:
ORA-00060: 자원 대기중 교착 상태가 검출되었습니다
트레이스 파일 조회
DEADLOCK DETECTED ( ORA-00060 )
[Transaction Deadlock]
The following deadlock is not an ORACLE error. It is a
deadlock due to user error in the design of an application
or from issuing incorrect ad-hoc SQL. The following
information may aid in determining the deadlock:
Deadlock graph:
---------Blocker(s)-------- ---------Waiter(s)---------
Resource Name process session holds waits process session holds waits
TX-00090002-00002a10 20 123 X 28 112 X
TX-0002000f-0000293a 28 112 X 20 123 X
session 123: DID 0001-0014-00000104 session 112: DID 0001-001C-00000011
session 112: DID 0001-001C-00000011 session 123: DID 0001-0014-00000104
Rows waited on:
Session 123: obj - rowid = 00014864 - AAAUhkAABAAA7SKAAB
(dictionary objn - 84068, file - 1, block - 242826, slot - 1)
Session 112: obj - rowid = 00014864 - AAAUhkAABAAA7SKAAA
(dictionary objn - 84068, file - 1, block - 242826, slot - 0)
----- Information for the OTHER waiting sessions -----
Session 112:
sid: 112 ser: 37 audsid: 6670546 user: 89/TESTUSER flags: 0x100045
pid: 28 O/S info: user: SYSTEM, term: MYMAIN, ospid: 904
image: ORACLE.EXE (SHAD)
client details:
O/S info: user: MYMAIN\Administrator, term: MYMAIN, ospid: 2828:2832
machine: MSHOME\MYMAIN program: sqlplus.exe
application name: SQL*Plus, hash value=3669949024
Current SQL Statement:
update t1 set c2 = 2 where c1 = 1
----- End of information for the OTHER waiting sessions -----
Information for THIS session:
----- Current SQL Statement for this session (sql_id=6sj55xg10kudc) -----
update t1 set c2 = 2 where c1 = 2
-- 오브젝트 번호로 테이블명 조회
SQL> select object_name from dba_objects where data_object_id = 84068;
OBJECT_NAME
------------------------------
T1
-- 로우 아이디에 해당하는 로우 조회
SQL> select * from t1 where rowid = 'AAAUhkAABAAA7SKAAB';
C1 C2
---------- ----------
2 2
ORA- 04020 : deadlock detected while trying to lock object <OBJECT NANE>
----------------------------------------------------------
Object waiting waiting blocking blocking
handle session lock mode session lock mode
-------- -------- -------- ---- -------- -------- ----
797992F8 7AA06C48 79FA5554 X 7AA06C48 79F8B3DO X
----------------------------------------------------------
- 강좌 URL : http://www.gurubee.net/lecture/4307
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.