2014-06-06 7 views
0

오라클 DB 구현에서 "READ COMMITTED"라는 격리 수준이 어떻게 제공되는지 알고 있다는 것은 흥미로운 일입니다. 나는 이미 DB가 REDO 로그에 레코드를 작성한다는 것을 알고 있지만, REDO 로그는 트랜잭션 중에 예기치 않은 충돌이 발생할 경우에만 트랜잭션을 반복하는 데 사용됩니다. 또한 DBWR은 REDO 로그 파일이 가득 찰 때마다 "더티 블록"을 작성한다는 것을 알고 있습니다. 하지만 제 질문은 : DBWR이 디스크에 "더티"(변경된 블록)를 쓰는 경우 격리 수준 "READ COMMITTED"가 제공되는 방법입니다. DBWR이 데이터 파일에 직접 쓰거나 현재의 트랜잭션에서 보이고 다른 트랜잭션에서 보이지 않는 디스크의 특정 "장소"에 데이터를 쓰는 것을 의미합니까? 따라서 COMMIT 후에이 "장소"가 보입니다. 그게 전부입니까? 어떻게 이것이 실제로 효과가 있나? 나쁜 영어를 유감스럽게 생각합니다."READ COMMITED"분리 수준은 Oracle DB에서 어떻게 작동합니까?

+3

개념 설명서를 확인하십시오. http://docs.oracle.com/cd/E11882_01/server.112/e40540/consist.htm#CNCPT88964 –

+1

또한이 도움말은 도움이 될 것입니다. http : // www. oracle.com/technetwork/issue-archive/2005/05-nov/o65asktom-082389.html – vav

답변

2

REDO 로그 외에도 UNDO 테이블 스페이스가 있습니다.

데이터를 업데이트 할 때 이전 값은 UNDO 테이블 공간에 저장됩니다. 오라클은 레코드에 대해 커밋되지 않은 데이터를 읽는 것을 보았을 때 거기에서 이전 값을 재구성합니다.

UNDO는 데이터베이스 복구 중에도 사용됩니다. 크래시 전에 데이터베이스 파일에 커밋되었지만 커밋되지 않은 쓰기를 다시 적용하는 것 외에도 커밋되지 않은 변경 사항을 데이터베이스 파일로 롤백합니다. 추락하기 전에 일어났다.

관련 문제