Oracle Database의 커밋 vs 빠른 커밋 vs 커밋 정리


12

Oracle Database와 관련된 3 가지 용어의 차이점에 대한 이해를 누군가가 확인할 수 있는지 궁금합니다.

많은 출처들이이 용어들을 혼동하고 자세하게 설명하지 않기 때문에 정보를 찾기가 약간 어려웠습니다.

내가 수집 한 것에서 :

  1. 커밋과 빠른 커밋은 완전히 동일하며 모든 커밋은 빠른 커밋입니다.
  2. 빠른 커밋은 기본적으로 실행 취소 / 롤백 세그먼트 헤더의 트랜잭션 테이블에서 플래그를 업데이트하여 트랜잭션이 커밋되었음을 나타냅니다. 그러나 실제 블록은 재검토되지 않습니다. 즉, 데이터 블록의 헤더에있는 관심있는 트랜잭션 목록 (ITL)의 UBA (Undo 바이트 주소)는 여전히 해당 Undo 세그먼트의 트랜잭션 테이블을 가리 킵니다. 또한 해당 행의 잠금 바이트가 해제되지 않고 ITL의 잠금 수가 변경되지 않습니다 (행은 여전히 ​​잠겨 있음).
  3. 커밋 정리에서 블록 다시 방문되고 ITL이 커밋 SCN으로 업데이트됩니다. 그러나 ITL의 잠금 수와 각 행과 함께 저장된 잠금 바이트는 여전히 업데이트되지 않으며 (행은 여전히 ​​빠른 커밋 에서처럼 잠김) 블록이 변경 되어도 다시 실행을 생성하지 않습니다.
  4. 정상적으로 커밋 된 블록 (== 빠른 커밋)은 다음에 닿을 때 지연된 블록 정리를 수행하고 다시 실행합니다.
  5. 커밋 정리가 완료된 블록은 다음에 닿을 때 지연 로깅 블록 정리가 수행되며 다시 실행됩니다.

누군가가이 점들을 확인할 수 있기를 바랍니다! 감사!

답변:


6

당신은 기본 권리가 있습니다. 한 가지 유형의 커밋이 있습니다 ( 일반 , 빠름 ...).

로부터 개념 문서 :

트랜잭션이 커밋되면 다음 작업이 수행됩니다.

  • COMMIT에 대한 시스템 변경 번호 (SCN)가 생성됩니다.

    트랜잭션이 커밋 한 연관된 ​​실행 취소 테이블 스페이스 레코드의 내부 트랜잭션 테이블 트랜잭션의 해당 고유 SCN이 트랜잭션 테이블에 지정되고 기록됩니다. "직렬화 가능한 격리 수준"을 참조하십시오.

  • 로그 기록기 (LGWR) 프로세스는 리두 로그 버퍼에 남아있는 리두 로그 항목을 온라인 리두 로그에 기록하고 트랜잭션 SCN을 온라인 리두 로그에 기록합니다. 이 아토믹 이벤트는 트랜잭션 커밋을 구성합니다.

  • Oracle Database는 행과 테이블에 고정 된 잠금을 해제합니다.

    커밋되지 않은 트랜잭션이 보유한 잠금을 대기 한 사용자는 작업을 진행할 수 있습니다.

  • Oracle 데이터베이스는 저장 점을 삭제합니다.

  • Oracle Database는 커밋 정리를 수행합니다.

    커밋 된 트랜잭션의 데이터를 포함하는 수정 된 블록이 여전히 SGA에 있고 다른 세션에서 수정하지 않는 경우 데이터베이스는 블록에서 잠금 관련 트랜잭션 정보를 제거합니다. 이상적으로 COMMIT는 후속 SELECT가이 작업을 수행 할 필요가 없도록 블록을 정리합니다.

블록이 여전히 SGA에있는 경우 커밋 중에 정리 (다시 실행으로 가득 참)가 수행됩니다.

활성 시스템에서는 커밋되지 않은 트랜잭션이있는 블록을 디스크에 쓰고 SGA에서 플러시하는 것이 일반적입니다. 이 경우 블록은 그대로 유지되며 블록에 닿는 다음 쿼리는 지연된 블록 정리를 수행합니다 (포인트 5는 모든 경우에 발생하지 않음).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.