by-nc-sa     개발자, DBA가 함께 만들어가는 구루비 지식창고!

Transaction 처리




1. Transaction 처리 순서

1) 트랜잭션 시작은 첫 번째 DML이 수행되면서 시작


① 언두 세그먼트 바인딩
② 언두 세그먼트 할당(사용 가능한 언두 세그먼트가 있어야 함)
③ 트랜잭션 테이블 슬롯 할당(트랜잭션 테이블 슬롯 중, 가장 오래 전에 커밋된 트랜잭션 테이블 재사용)
④ 할당된 트랜잭션 ID로 exclusive TX lock 획득
⑤ 언두 블록 할당
⑥ 데이터 블록 변경 발생
⑦ 커밋

2) Operation Codes
  • Block에 대해 수행된 Operation을 표현
    ☞ 오라클 9i 기준으로 130여 개의 OP가 존재함
  • 각각의 Operation은 layer code와 sub code(e.g 11.2)로 구성
    layer의 Operation Code
    Row Operations layer의 Sub Code
3) Transaction 처리
  • UPDATE 문 #1 수행
  • 리두 로그에 언두 헤더에 대한 체인지 벡터 #1이 생성됨
  • 트랜잭션 수행을 위해 할당 받은 언두 헤더 내의 트랜잭션 테이블의 슬롯 STATUS를 10으로 변경



  • 리두 로그에 언두 블록에 대한 체인지 벡터 #2가 생성됨

  • 리두 로그에 데이터 블록에 대한 체인지 벡터 #3이 생성됨
  • 데이터 블록에 변경된 값을 저장
  • UPDATE 문 #2 수행




  • 리두 로그에 커밋에 대한 체인지 벡터 #1이 생성

  • 트랜잭션 테이블의 슬롯 상태를 9로 변경

2. Single Row Insert

1) 프로세스
내용

① 리두 로그에 트랜잭션(INSERT) 수행을 위해 언두 헤더를 할당 받음
② 언두에 원래 값을 저장함
③ 리두에 데이터의 변경을 기록함(OP CODE : 11.2(insert single row))
④ 이미 언두 헤더를 할당 받았기 때문에 리두에 원래 값과 데이터 변경 값만을 기록하면 됨
⑤ COMMIT; (리두에 변경 된 데이터 내용을 디스크에 입력(레코드 단위 기록) 트랜잭션 종료)

3. Multi Row INSERT

1) 프로세스
내용

① 리두 로그에 트랜잭션(INSERT) 수행을 위해 언두 헤더를 할당 받음
② 언두에 원래 값을 저장
③ 리두에 데이터의 변경을 기록(OP CODE : 11.11(insert multiple row))
④ COMMIT;(변경 된 데이터 내용을 디스크에 기록(SQL 단위 기록) 트랜잭션 종료)

문서에 대하여

문서정보

Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.