1. WareValley
http://www.WareValley.com
Database Audit and Protection [ DB 접근통제 ]
Database Encryption [ DB 암호화 ]
Database Vulnerability Assessment [ DB 취약점 분석 ]
Database SQL Query Approval [ DB 작업결재 ]
Database Performance Monitoring and Management [ DB 성능관리 및 개발 ]
WareValley
Oracle Lock
오렌지팀 윤석준 선임연구원
2. Database security and management, WareValley.
http://www.WareValley.com
Oracle Lock의 종류
Latch : SGA에서 사용되는 자료구조를 보호할 목적의 가벼운 Lock
(대기자 개념이 없어서 Wait Event로… 등의 자세한 설명은 이미 앞에서…)
Buffer Lock : Buffer Block에 대한 액세스를 직렬화
Library Cache Lock : Library Cache Object에 대한 Handle 보호
Library Cache Pin : Library Cache Objecy의 실제 내용이 담긴 Heap을 보호
DML Lock
- DML Table Lock : Enqueue Lock 으로 구현
- DML Row Lock : Row 단위 Lock 과 Transaction Lock 을 조합하여 구현
(TX Lock은 Enqueue Lock 으로 구현되어 있음)
3. Database security and management, WareValley.
http://www.WareValley.com
Enqueue Lock
Shared Resource에 대한 액세스를 관리하는 Lock Mechanism
Table, Transaction, Tablespace, Sequence, Temp Segment 등을 보호
획득 순서가 보장되는 Queue 구조
Enqueue resource 에 할당 (v$resource 에서 확인 가능)
- TYPE : TX, TM, TS 등… ( 2개의 문자로 구성 )
- ID1, ID2 : Lock Type 별로 다른 정보
e.g. ) TM Lock : TM – ObjectID – 0
TX Lock : TX – Undo segment 번호 + Transaction 번호 – Transaction slot
4. Database security and management, WareValley.
http://www.WareValley.com
Enqueue Lock
Enqueue resource 구조체
(Hash bucket 으로 되어 있으며 Hash 값이 같은 것은 Linked list로… 등등… 자세한 설명은 Pass)
http://wiki.gurubee.net/pages/viewpage.action?pageId=3902548
5. Database security and management, WareValley.
http://www.WareValley.com
TX Lock ( = Transaction Lock )
Transaction을 시작 시 Undo Segment Head에 위치한
Transaction Table에서 Slot을 할당
진행중인 Transaction에서 변경을 가한 Block을 읽을려면
-> Slot 확인 후 필요하다면 CR 생성 ( 즉, 갱신중에도 Blocking 없이 작업 진행 가능)
But, 변경 중인 Record를 변경할려면 TX Lock을 이용하여 액세스 직렬화 진행
-> TX Lock : Transaction이 첫 번째 변경을 시작할 때 설정하고,
Commit or Rollback 할 때 해제
7. Database security and management, WareValley.
http://www.WareValley.com
TX Lock 예제 ( Scenario )
Tx 1 Tx 2
UPDATE SCOTT.EMP
SET SAL = SAL + 10
WHERE EMPNO = 7566;
UPDATE SCOTT.EMP
SET SAL = SAL + 10
WHERE EMPNO = 7499;
UPDATE SCOTT.EMP
SET SAL = SAL + 10
WHERE EMPNO = 7369;
UPDATE SCOTT.EMP
SET SAL = SAL + 10
WHERE EMPNO = 7499;
UPDATE SCOTT.EMP
SET SAL = SAL + 10
WHERE EMPNO = 7521;
Tx 1 을 먼저 실행한 뒤
Commit을 하지 않고,
Tx 2 를 순서대로 실행
누가 봐도 7499에서
Block 된다고 예상 가능