티스토리 뷰

DB, Storage/oracle

transaction 개요

卽興詩人 2013. 12. 1. 21:20

사용자가  DML (tx) 를 실행하게 되면 오라클은 내부적으로 다음과 같은 순서로 작업을 진행한다

 

해당 tx 에 대해 undo segment 를 할당한다

언두 세그먼트의 선택은 랜덤하게 이루어지며 다른 tx 가 사용중이라면 3번까지 재시도한다

이 과정이 실패하면 오프라인 상태의 언두 세그먼트를 활성해서 사용하고 실패하면 새로운 언두세그먼트를 할당한다

그래도 실패하면 롤백 세그먼트 알고리즘을 사용한다

 

언두 세그먼트를 할당 받으면 언두 세그먼트 헤더에 tx 테이블 슬롯을 생성한다

트랜젝션 테이블을 생성하고 나면 txid 를생성하고 현재 트랜젝션에 할당한다

트랜젝션의 대상이 되는 블록들을 버퍼개시로 적재하고 블록헤더의 ITL 에 트랜젝션 엔트리를 등록한다

변경한 블록들의 변경정보는 PGA 에 체인지 벡터라는 이름으로 저장된다 보통 하나의 로우가 변경되는 경우 각각 언두 헤더블록 언두블록 데이터블록에 해당하는 체인지 벡터들이 생긴다 . 프로세스는 PGA의 체인지 벡터들을 리두 레코드라는 이름으로 리두버퍼로 복사한다

이전이미지에 대한 정보를 언두 블록에 기록하고 데이터블록을 변경한다 변뎡된 데이터 블록은 더티상태가 된다 또한 변경된 데이터 블록에 대한 CR 블록이 버퍼캐시에 생성된다 만일 변경하고자 하는 로우가 현재 다른 트랜젝션에 의해 변경중이라면 해당 트랜젝션이 종료되기를 기다려야하며 tx-rowlock contention 이벤트를 대기한다

 

커밋이 수행되면 트랜젝션에 SCN 을 할당한다 커밋정보는 리두버퍼에 저장된다

언두 세그먼트 헤더의 트랜젝션 테이블에 커밋이 이루어졌음을 저장하고 락을 포함한 모든 리소스에 대한 점유를 해제한다

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

'DB, Storage > oracle' 카테고리의 다른 글

SQL 수행시 작업  (0) 2013.12.01
대기이벤트  (0) 2013.11.29
latch 와 lock  (0) 2013.11.26
undo 와 redo 의 차이  (0) 2013.11.25
system and sysaux tablespaces  (0) 2013.11.20
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함