반응형
오라클 데이터베이스에서 ROLLBACK SEGMENT(롤백 세그먼트)는 트랜잭션 처리와 데이터 복구를 위한 중요한 메커니즘입니다. 데이터 무결성과 일관성을 유지하고, 트랜잭션 중 작업 취소(ROLLBACK) 시 데이터를 복구하는 데 사용됩니다. 이 글에서는 ROLLBACK SEGMENT의 역할, 구조, 설정 방법, 그리고 실무 적용 사례를 상세히 설명합니다.
1. ROLLBACK SEGMENT란?
1.1 정의
ROLLBACK SEGMENT는 데이터 변경 이전의 상태(UNDO 데이터)를 저장하는 데이터베이스 객체입니다.
- 트랜잭션이 데이터를 변경할 때, 변경 이전 데이터를 ROLLBACK SEGMENT에 기록합니다.
- 이를 통해 트랜잭션 취소(ROLLBACK) 또는 읽기 일관성을 보장합니다.
1.2 역할
- 트랜잭션 취소 (ROLLBACK):
트랜잭션이 취소되면 ROLLBACK SEGMENT에 저장된 UNDO 데이터를 사용하여 데이터를 이전 상태로 복구합니다. - 읽기 일관성 (Read Consistency):
다른 사용자가 변경 중인 데이터를 읽으려고 할 때, ROLLBACK SEGMENT에 저장된 UNDO 데이터를 제공하여 변경 전의 데이터를 보장합니다. - 시스템 복구:
데이터베이스 장애 발생 시 ROLLBACK SEGMENT를 사용하여 손상된 트랜잭션을 복구합니다.
2. ROLLBACK SEGMENT의 구조
2.1 주요 구성 요소
- Segment Header:
ROLLBACK SEGMENT의 메타데이터를 저장합니다.- 트랜잭션 정보, 사용 가능한 공간 등.
- Transaction Table:
활성 트랜잭션과 관련된 정보를 관리합니다. - Undo Blocks:
실제 변경 이전 데이터를 저장하는 공간입니다.
2.2 ROLLBACK SEGMENT의 작동 원리
- 트랜잭션이 시작되면 ROLLBACK SEGMENT에 UNDO 데이터를 기록할 공간이 할당됩니다.
- 데이터가 변경될 때마다 변경 이전 데이터가 UNDO 블록에 기록됩니다.
- 트랜잭션이 완료되면 COMMIT된 데이터는 ROLLBACK SEGMENT에서 제거됩니다.
3. ROLLBACK SEGMENT 설정
3.1 자동 UNDO 관리
오라클 9i부터는 ROLLBACK SEGMENT 대신 **자동 UNDO 관리(Automatic Undo Management)**를 기본으로 사용합니다.
- 자동 관리 모드에서는 UNDO TABLESPACE를 생성하고 관리합니다.
- ROLLBACK SEGMENT를 수동으로 관리하는 방식은 사용이 제한적이며, 일부 특정 작업에만 사용됩니다.
자동 UNDO 관리 설정
ALTER SYSTEM SET UNDO_MANAGEMENT=AUTO;
UNDO TABLESPACE 생성
CREATE UNDO TABLESPACE undotbs1
DATAFILE '/u01/app/oracle/oradata/undotbs1.dbf'
SIZE 500M
AUTOEXTEND ON;
UNDO TABLESPACE 적용
ALTER SYSTEM SET UNDO_TABLESPACE = undotbs1;
3.2 수동 ROLLBACK SEGMENT 설정
특정 데이터베이스 환경에서 수동으로 ROLLBACK SEGMENT를 설정해야 하는 경우가 있습니다.
ROLLBACK SEGMENT 생성
CREATE ROLLBACK SEGMENT rbs1
TABLESPACE rollback_ts
STORAGE (INITIAL 1M NEXT 1M MINEXTENTS 2 MAXEXTENTS 50);
ROLLBACK SEGMENT 사용
- ROLLBACK SEGMENT를 활성화하려면 데이터베이스를 MANUAL 모드로 전환해야 합니다.
ALTER SYSTEM SET UNDO_MANAGEMENT=MANUAL;
- ROLLBACK SEGMENT를 온라인 상태로 변경합니다.
ALTER ROLLBACK SEGMENT rbs1 ONLINE;
4. 실무에서의 ROLLBACK SEGMENT 관리
4.1 적절한 크기 설정
- ROLLBACK SEGMENT의 크기가 작으면 대규모 트랜잭션 처리 중 공간 부족 문제가 발생할 수 있습니다.
- 적절한 INITIAL, NEXT, MINEXTENTS 값을 설정하여 안정성을 높이세요.
4.2 여러 ROLLBACK SEGMENT 활용
- 대규모 트랜잭션 환경에서는 여러 ROLLBACK SEGMENT를 생성하고 분산 배치하여 성능을 개선할 수 있습니다.
4.3 UNDO 공간 모니터링
- DBA_UNDO_EXTENTS 뷰를 사용하여 UNDO 테이블스페이스와 ROLLBACK SEGMENT의 사용 상태를 모니터링합니다.
SELECT SEGMENT_NAME, TABLESPACE_NAME, STATUS, BYTES
FROM DBA_UNDO_EXTENTS;
5. ROLLBACK SEGMENT와 UNDO TABLESPACE 비교
구분 ROLLBACK SEGMENT UNDO TABLESPACE
관리 방식 | 수동 관리 | 자동 관리 |
도입 시기 | Oracle 8i 및 이전 | Oracle 9i 및 이후 |
설정 복잡성 | 직접 세그먼트 크기 및 공간 설정 필요 | 자동으로 공간 및 크기 관리 |
주요 용도 | 레거시 시스템, 특정 트랜잭션 | 현대적인 데이터베이스 관리에 적합 |
6. 주의사항
6.1 UNDO 공간 부족
UNDO 공간이 부족하면 ORA-01555: Snapshot Too Old와 같은 오류가 발생할 수 있습니다.
- 충분한 공간 할당과 자동 확장 옵션을 활성화하세요.
6.2 적절한 모드 선택
- 대부분의 환경에서는 **UNDO TABLESPACE(AUTO 모드)**를 사용하는 것이 권장됩니다.
- ROLLBACK SEGMENT는 과거 시스템이나 특정 환경에서만 필요합니다.
7. 마무리
ROLLBACK SEGMENT는 데이터베이스 트랜잭션에서 데이터 무결성을 유지하고, 작업 취소나 읽기 일관성을 보장하는 중요한 역할을 합니다. 오라클의 자동 UNDO 관리 도입으로 ROLLBACK SEGMENT의 수동 설정은 줄어들었지만, 여전히 이해하고 관리할 필요가 있습니다. 실무에서의 요구 사항에 따라 적절한 설정과 모니터링으로 안정적인 데이터베이스 환경을 구축하세요!
반응형
'Database' 카테고리의 다른 글
오라클 데이터베이스 성능 튜닝 기초: 쿼리 최적화 (0) | 2024.12.03 |
---|---|
오라클 데이터베이스의 백업 및 복구 기본 (0) | 2024.12.03 |
오라클 데이터베이스 권한 관리: GRANT와 REVOKE의 활용 (0) | 2024.12.03 |
오라클 DB에서 USER 및 SCHEMA의 개념 이해하기 (0) | 2024.12.03 |
오라클 TRIGGER를 활용한 데이터 무결성 유지 (0) | 2024.12.03 |