728x90
트랜잭션이 지켜야 할 원칙 ACID
- Atomicity 원자성
- 트랜잭션에 포함되는 데이터 변경은 'All or Nothing' 이어야 한다.
- 즉, 트랜잭션은 더 이상 분할할 수 없는 데이터 변경의 최소 단위라는 의미이다.
- Consistency 일관성
- 트랜잭션에 의해 데이터 간 일관성이 어긋나서는 안된다.
- 예를 들어, Customer 테이블의 데이터가 변경되었는데 Customer 테이블의 인덱스 데이터가 변경되지 않은 경우가 없어야 한다는 것이다.
- Isolation 고립성
- 트랜잭션은 다른 트랜잭션을 의식할 필요가 없어야 한다.
- 즉, 트랜잭션은 고립되어 있어 단독 실행이든 다른 트랜잭션과 동시 실행이든 결과는 같아야 한다.
- Durability 지속성
- Commit한 트랜잭션은 장애가 발생하더라도 데이터는 반드시 복구되어야 한다.
Redo, Undo
- Redo : '누군가 무엇을 했다' => Redo 로그를 사용하여 과거의 데이터를 최신화(Roll forward)
- Undo : '어떻게 하면 과거의 상태로 돌아갈 수 있는가' => undo 로그를 이용하여 변경취소(Roll back)
- Undo 테이블 스페이스의 Undo 세그먼트에 보관 => Ring buffer 형태
- Roll back에 쓰임
- 읽기 일관성 유지에 쓰임 - 데이터 조회 시작 후 바뀐 데이터를 조회 시작지점으로 돌리기 위해 undo 사용
- Commit 되지 않은 데이터 읽기에 쓰임(read committed)
- 체크포인트 : 메모리와 디스크의 데이터 동기화 작업 시점
- Roll forward에 걸리는 시간을 줄일 수 있다. 데이터베이스가 비정상 종료되면 마지막 체크포인트 이후의 트랜잭션 로그를 재생하여 복구하는데 체크포인트를 자주 사용하면 복구 대상 로그가 줄어든다.
- 너무 자주 하면 디스크 IO 횟수가 늘어나 시스템 부하가 늘어나는 단점이 있다.
- 인스턴스 복구(Instance Recovery) = Crash Recovery
- 장애 발생 후 redo 로그를 이용하여 데이터를 최신 상태로 갱신
- Redo 로그 파일을 이용해 Roll forward 한다. 이 때, Undo 테이블스페이스도 포함되어 있다.
- 1번에서 Undo 가 최신 상태가 된 undo 세그먼트의 정보를 활용하여 Commit 되지 않은 것은 rollback 한다.
- 장애 발생 후 redo 로그를 이용하여 데이터를 최신 상태로 갱신
728x90
'Computer Science > Database' 카테고리의 다른 글
SQLP 기초 - 1. SQL 처리 과정 : 파싱, 최적화, 캐싱 (0) | 2024.10.07 |
---|---|
그림으로 공부하는 오라클 구조 - Ch10,11. 오라클 백업/복구, 백그라운드 프로세스 (0) | 2024.07.25 |
그림으로 공부하는 오라클 구조 - Ch8. 오라클의 대기와 락 (0) | 2024.07.23 |
그림으로 공부하는 오라클 구조 - Ch7. 오라클의 데이터 구조 (0) | 2024.07.17 |
그림으로 공부하는 오라클 구조 - ch6. 커넥션과 서버 프로세스의 생성 (0) | 2024.07.16 |