🔍 Step 1. 테스트용 테이블 생성
ITL 개수를 결정하는 INITRANS와 MAXTRANS를 가장 낮게 설정하고,
데이터가 여러 블록으로 쪼개지지 않도록 하나의 블록에 최대한 모아서 넣습니다.
1. 테스트 테이블 생성
-- 1. 테스트 테이블 생성 (INITRANS와 MAXTRANS를 최소값인 1과 2로 설정)
CREATE TABLE itl_test_tbl (
id NUMBER,
val VARCHAR2(100)
)
INITRANS 1
MAXTRANS 2 -- Oracle 10g 이후 버전부터 MAXTRANS 값은 내부적으로 무조건 256으로 고정
PCTFREE 0; -- 블록 내 여유 공간을 0으로 만들어 ITL이 동적으로 확장될 공간을 원천 차단
2. 동일한 데이터 블록에 행들이 들어가도록 연속으로 INSERT
INSERT INTO itl_test_tbl VALUES (1, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
INSERT INTO itl_test_tbl VALUES (2, 'BBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
INSERT INTO itl_test_tbl VALUES (3, 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC');
INSERT INTO itl_test_tbl VALUES (4, 'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD');
INSERT INTO itl_test_tbl VALUES (5, 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF');
INSERT INTO itl_test_tbl VALUES (6, 'GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG');
INSERT INTO itl_test_tbl VALUES (7, 'HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH');
INSERT INTO itl_test_tbl VALUES (8, 'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII');
INSERT INTO itl_test_tbl VALUES (9, 'JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ');
INSERT INTO itl_test_tbl VALUES (10, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
INSERT INTO itl_test_tbl VALUES (11, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
INSERT INTO itl_test_tbl VALUES (12, 'BBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
INSERT INTO itl_test_tbl VALUES (13, 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC');
INSERT INTO itl_test_tbl VALUES (14, 'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD');
INSERT INTO itl_test_tbl VALUES (15, 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF');
INSERT INTO itl_test_tbl VALUES (16, 'GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG');
INSERT INTO itl_test_tbl VALUES (17, 'HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH');
INSERT INTO itl_test_tbl VALUES (18, 'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII');
INSERT INTO itl_test_tbl VALUES (19, 'JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ');
INSERT INTO itl_test_tbl VALUES (20, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
INSERT INTO itl_test_tbl VALUES (21, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
INSERT INTO itl_test_tbl VALUES (22, 'BBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
INSERT INTO itl_test_tbl VALUES (23, 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC');
INSERT INTO itl_test_tbl VALUES (24, 'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD');
INSERT INTO itl_test_tbl VALUES (25, 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF');
INSERT INTO itl_test_tbl VALUES (26, 'GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG');
INSERT INTO itl_test_tbl VALUES (27, 'HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH');
INSERT INTO itl_test_tbl VALUES (28, 'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII');
INSERT INTO itl_test_tbl VALUES (29, 'JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ');
INSERT INTO itl_test_tbl VALUES (30, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
INSERT INTO itl_test_tbl VALUES (31, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
INSERT INTO itl_test_tbl VALUES (32, 'BBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
INSERT INTO itl_test_tbl VALUES (33, 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC');
INSERT INTO itl_test_tbl VALUES (34, 'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD');
INSERT INTO itl_test_tbl VALUES (35, 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF');
INSERT INTO itl_test_tbl VALUES (36, 'GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG');
INSERT INTO itl_test_tbl VALUES (37, 'HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH');
INSERT INTO itl_test_tbl VALUES (38, 'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII');
INSERT INTO itl_test_tbl VALUES (39, 'JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ');
INSERT INTO itl_test_tbl VALUES (40, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
INSERT INTO itl_test_tbl VALUES (41, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
INSERT INTO itl_test_tbl VALUES (42, 'BBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
INSERT INTO itl_test_tbl VALUES (43, 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC');
INSERT INTO itl_test_tbl VALUES (44, 'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD');
INSERT INTO itl_test_tbl VALUES (45, 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF');
INSERT INTO itl_test_tbl VALUES (46, 'GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG');
INSERT INTO itl_test_tbl VALUES (47, 'HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH');
INSERT INTO itl_test_tbl VALUES (48, 'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII');
INSERT INTO itl_test_tbl VALUES (49, 'JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ');
INSERT INTO itl_test_tbl VALUES (50, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
INSERT INTO itl_test_tbl VALUES (51, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
INSERT INTO itl_test_tbl VALUES (52, 'BBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
INSERT INTO itl_test_tbl VALUES (53, 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC');
INSERT INTO itl_test_tbl VALUES (54, 'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD');
INSERT INTO itl_test_tbl VALUES (55, 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF');
INSERT INTO itl_test_tbl VALUES (56, 'GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG');
INSERT INTO itl_test_tbl VALUES (57, 'HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH');
INSERT INTO itl_test_tbl VALUES (58, 'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII');
INSERT INTO itl_test_tbl VALUES (59, 'JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ');
INSERT INTO itl_test_tbl VALUES (60, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
INSERT INTO itl_test_tbl VALUES (61, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
INSERT INTO itl_test_tbl VALUES (62, 'BBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
INSERT INTO itl_test_tbl VALUES (63, 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC');
INSERT INTO itl_test_tbl VALUES (64, 'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD');
INSERT INTO itl_test_tbl VALUES (65, 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF');
INSERT INTO itl_test_tbl VALUES (66, 'GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG');
INSERT INTO itl_test_tbl VALUES (67, 'HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH');
INSERT INTO itl_test_tbl VALUES (68, 'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII');
INSERT INTO itl_test_tbl VALUES (69, 'JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ');
INSERT INTO itl_test_tbl VALUES (70, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
INSERT INTO itl_test_tbl VALUES (71, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
INSERT INTO itl_test_tbl VALUES (72, 'BBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
INSERT INTO itl_test_tbl VALUES (73, 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC');
INSERT INTO itl_test_tbl VALUES (74, 'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD');
INSERT INTO itl_test_tbl VALUES (75, 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF');
INSERT INTO itl_test_tbl VALUES (76, 'GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG');
INSERT INTO itl_test_tbl VALUES (77, 'HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH');
INSERT INTO itl_test_tbl VALUES (78, 'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII');
INSERT INTO itl_test_tbl VALUES (79, 'JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ');
INSERT INTO itl_test_tbl VALUES (80, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
INSERT INTO itl_test_tbl VALUES (81, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
INSERT INTO itl_test_tbl VALUES (82, 'BBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
INSERT INTO itl_test_tbl VALUES (83, 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC');
INSERT INTO itl_test_tbl VALUES (84, 'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD');
INSERT INTO itl_test_tbl VALUES (85, 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF');
INSERT INTO itl_test_tbl VALUES (86, 'GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG');
INSERT INTO itl_test_tbl VALUES (87, 'HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH');
INSERT INTO itl_test_tbl VALUES (88, 'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII');
INSERT INTO itl_test_tbl VALUES (89, 'JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ');
INSERT INTO itl_test_tbl VALUES (90, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
INSERT INTO itl_test_tbl VALUES (91, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
INSERT INTO itl_test_tbl VALUES (92, 'BBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
INSERT INTO itl_test_tbl VALUES (93, 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC');
INSERT INTO itl_test_tbl VALUES (94, 'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD');
INSERT INTO itl_test_tbl VALUES (95, 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF');
INSERT INTO itl_test_tbl VALUES (96, 'GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG');
INSERT INTO itl_test_tbl VALUES (97, 'HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH');
INSERT INTO itl_test_tbl VALUES (98, 'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII');
INSERT INTO itl_test_tbl VALUES (99, 'JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ');
commit;
3. 데이터가 실제로 같은 블록에 있는지 확인
SELECT id, dbms_rowid.rowid_block_number(rowid) as block_no
FROM itl_test_tbl;
-- 같은 Block에 저장된 데이터 확인;
* 본 테스트에서는 아래와 같이 id=79 까지는 같은 block에 저장됨
77 613313
78 613313
79 613313
80 613314
81 613314
🔍 Step 2. 동시 다발적 트랜잭션 실행 (여러개의 세션 필요)
MAXTRANS를 256로 설정되기 때문에, 이 블록을 동시에 수정할 수 있는 세션은 테스트 환경마다 상이할 수 있습니다.
⚠️ 주의: 각각 **다른 행(Row)**을 업데이트해야 합니다. 같은 행을 업데이트하면 ITL 부족이 아니라 일반적인 Row Lock(enq: TX - row lock contention)이 걸립니다.
- 세션 1 (Session A):
-
SQL
UPDATE itl_test_tbl SET val = 'WORK_A' WHERE id = 1; -- COMMIT 하지 않고 대기 (ITL 슬롯 1개 점유) - 세션 2 (Session B):
-
SQL
UPDATE itl_test_tbl SET val = 'WORK_B' WHERE id = 2; -- -- COMMIT 하지 않고 대기 (ITL 슬롯 2개 점유) - 세션 3 (Session C):
-
SQL
UPDATE itl_test_tbl SET val = 'WORK_C' WHERE id = 3; -- -- COMMIT 하지 않고 대기 (ITL 슬롯 3개 점유) - 세션 4 (Session D):
- SQL
UPDATE itl_test_tbl SET val = 'WORK_C' WHERE id = 4;
-- -- COMMIT 하지 않고 대기 (ITL 슬롯 4개 점유)
본 테스트에서는 세션 5, 세션 6에서 UPDATE 수행 후 commit 하지 않고 대기
- 세션 7 (Session G):
-
UPDATE itl_test_tbl SET val = 'WORK_G' WHERE id = 7; -- 실행하는 순간 락이 걸리며 세션이 멈춤 (대기 발생!) - SQL
==> UPDATE 가 락이 걸릴 때까지 새로운 session에서 id를 변경하면서 수행
UPDATE itl_test_tbl SET val = 'WORK_G' WHERE id = 7;
본 테스트에서는 7번째 Session 에서 Lock 이 발생함.
🔍 Step 3. 모니터링 세션에서 대기 이벤트 확인
세션이 멈춰있는 상태(본 테스트에서는 7번째 session)에서, 별도의 모니터링 창을 열어 아래 쿼리를 수행합니다.
SELECT
sid,
blocking_session,
event,
p1, p2, p3,
seconds_in_wait
FROM v$session
WHERE event LIKE '%ITL%';
📊 테스트 결과 출력
SID BLOCKING_SESSION EVENT P1 P2 P3 SECONDS_IN_WAIT
389 5,863 enq: TX - allocate ITL entry 1,415,053,316 62,586,881 24,382 30
여기에서 BLOCKING_SESSION은
특징: 일반적인 Row Lock 경합과 달리 blocking_session이 명확하게 지정되지 않을 수 있습니다. 특정 세션이 나를 막은 게 아니라 "블록 자체의 방(ITL)이 꽉 차서" 못 들어가는 것이기 때문입니다.
🔍 추가로 Row lock test
본 테스트에서는 추가로 row lock test를 진행했습니다.
- 세션 8 (Session H):
-
SQL
UPDATE itl_test_tbl SET val = 'WORK_H' WHERE id = 4; -- row lock으로 대기
아래와 같이 ITL lock과 row lock을 확인할 수 있다.
SID BLOCKING_SESSION EVENT SECONDS_IN_WAIT
---------------------------------------------------------
389 5,863 enq: TX - allocate ITL entry 1,937
3,044 5,863 enq: TX - row lock contention 1,689
'ORACLE' 카테고리의 다른 글
| java로 oracle DB 접속 테스트 (0) | 2025.12.04 |
|---|---|
| Oracle HR ERD (0) | 2022.02.03 |
| Oracle hint (0) | 2022.02.02 |
| DBMS_XPLAN 패키지 실행 권한 (0) | 2022.02.01 |
| Oracle - 실행계획 보는 방법 (0) | 2022.01.31 |



