ORACLE

Transaction 작업순서

더킹123 2022. 11. 7. 10:30
728x90

1. 해당 트랜잭션에 대해 언두 세그먼트를 할당한다.
  ->온라인 상태인 언두 세그먼트 3회 획득 시도(실패시)
  -> 오프라인 언두 세그먼트를 온라인화 해서 시도(실패시)
  -> 새로운 언두 세그먼트 생성(실패시)
  -> 이미 사용중인 언두 세그먼트 중 가장 사용량이 적은 것을 사용

2. 언두 세그먼트 헤터에 transaction table slot 을 획득한다.

3. 트랜잭션 테이블을 생성하고나면 TXID(Transaction ID)를 생성하고, 
    현재 트랜잭션에 할당한다. 트랜잭션은 반드시 언두 영역에 할당받은 다음 ID를 부여 받는다.

   -XIDUSN --언두 세그먼트 번호
   -XIDSLOT--슬랏 번호
   -XIDSQN --시퀀스 번호- 슬랏이 재이용

4. 트랜잭션의 대상이 되는 블록들을 Buffer Cache로 적재하고 블록 헤더의 ITL에
    Transaction Entry 를 등록한다.

5. 변경할 블록들의 변경 정보를 PGA에 체인지 벡터라는 이름으로 저장된다.
    프로세스는 PGA에 체인지 벡터들을 리두 레코드라는 이름으로 Redo Buffer로 복사한다.


6. 이전 이미지(Before Image)에 대한 정보를 언두 블록에 기록하고, 데이터 블록을 변경한다.
    변경된 데이터 블록은 Dirty 상태가 된다. 또, 변경된 데이터 블록에 대한CR 블록이

    Buffer Cache에 생성된다.

7. 커밋이 수행되면 트랜잭션에 SCN을 할당하고, 커밋정보는 리두 버퍼에 저장된다.

8. Undo Segment 헤더의 트랜잭션 테이블에 커밋이 이루어졌음을 저장하고,락을 포함한
   모든 리소스에 대한 점유를 해제한다.

9. Redo Buffer의 내용이 리두 로그 파일에 기록된다.
   변경된 블록들은 이후 DBWR에 의해 데이터 파일로 기록된다.

728x90