Transaction

 

     

        1. User DML 문장 수행

 

        2. 문법 체크 , 권한 체크 수행

 

        3. DML 문에 대하여 Hash 함수를 적용해서 Hash Value 획득

 

        4. Library Cache Latch 획득 – 동일한 SQL문(LCO)이 있는지 확인

 

        5. 동일 SQL문장이 존재 하지 않으면 Shared Pool Latch 획득 한 후 필요한 Chunk 할당.

 

        6. library cache handle에 대하여 library cache lock 을 exclusive 모드로 획득 한 후에 LCO 생성

 

        7. LCO 생성이 완료 되면 library cache lock 을 null 모드로 변경

 

        8. library cache pin을 exclusive로 획득 후 실행계획 생성.

 

        9. library cache lock , library cache pin 을 shared 로 획득 후  DML문장 실행.

           ( DDL문장 예로 alter table 같은 문장은 library cache lock과 library cache pin을 exclusive 로 획득 )

 

       10. Undo Segment 할당

            (cache buffer lru latch 획득 -> Free Block -> Buffer Lock exclusive -> Undo 블럭 load )

 

       11.  Undo Segment Header에 Transaction  슬롯 생성 후 Transaction ID  생성 ( Undosegment , undo slot , undo sequence )

 

       12. Data Block Load (없을시 있을시 는 buffer lock 만 획득 )

            ( cache buffer lru latch 획득 -> Free Block -> Buffer Lock exclusive -> Data Block Load )

 

       13. Data Block 해더에 ITL( Interested Transaction List )에 트랜잭션 엔트리 등록

 

       14. PGA에 Change Vector 생성 ( UndoHeader + Undo Block + Data Block )

 

       15. PGA의 Change Vector를 Redo Buffer에 복사

            (Redo Copy Latch -> Redo Allocate Latch -> Redo Copy Latch 해제 

 

       16. 해당 Row Lock 

 

       17.  Undo블럭에 Before 이미지 저장

 

       18. Data Block 변경.

 

       19. Commit 발생

 

       20. SCN 할당

 

       21. Commit 정보 Redo Buffer에 저장

 

       22. Undo Segment Header의 트랜잭션 테이블에 Coomit정보 저장

 

       23. Lock 해제 및 ITL에 SCN ,Flag ( C or U ) , Lock Byte가 갱신 됨.

 

       24. LGWR 작동  

By haisins

오라클 DBA 박용석 입니다. haisins@gmail.com 으로 문의 주세요.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다