PostgreSQL에도 Oracle에 있는 Rollback Segment가 있는지 궁금합니다.
오라클의 그놈이 어디에 쓰이는지는 모르겠지만,
아마도 WAL 쪽 이야기인듯합니다.
트랜잭션을 먼저 로그로 기록하고, (Write ahead logging)
그것을 실 자료 파일에 반영(Checkout) 하는 데이터베이스 자료 신뢰도 보장 기법을 그대로 사용하고 있습니다.
이렇게 처리되어 데이터베이스가 갑자기 중지된 경우, commit 되지 않은 자료들이 실 자료에 반영되는 사고를 막고,
이것이 확장되어 트랜잭션 로그 스트리밍 방식의 데이터베이스 복제가 가능하고,
어떤 특정 시점 - 문제는 이게 9.0 이하 버전에서는 시간이라는게 좀 흠이긴 합니다, 사용자의 특정 포인트 이름 같은 것을 지정할 수 있으면 참 좋은데, 이걸 지원하지는 않습니다. (9.1부터 pg_create_restore_point() 함수로 지원하네요) - 으로 데이터베이스 시스템을 복원하기도 가능합니다.
자세한 이야기는
http://www.postgresql.org/docs/9.1/static/continuous-archiving.html
문서를 참조하세요.
begin;
update 또는 delete 쿼리실행
오라클은 이런 상황에 예전 데이터를 롤백세그먼트에 옮기게 되는데요.
rollback시에 사용하기 위해서죠.
postgresql도 이런식으로 동작을 하는건가 해서요.
네, 그것에 대한 처리 기법을 PostgreSQL에서는 로그 선행 기록 기법(write ahead logging)이라고 합니다.
당연히 지원합니다.
오라클에서는 undo라고 해서 도넛츠모양으로해서 데이터 블록을 재사용합니다.(오라클에서는 여러가지 옵션을사용할 수 있지만..)
postgresql은 데이터버퍼 영역에 오라클처럼 cr블록 복사해서 보여줍니다. 그리고 커밋이 발생하면
vaccum 프로세스에 의해서 cr블록은 삭제됩니다~!! (이거는 vacuum쪽 설정값들 보면 지우는 시간 나와있습니다).