롤백 세그먼트(rollback segment)란 트랜잭션 수정 전의 데이터를 일시적으로 저장하는 세그먼트입니다. 롤백 세그먼트에는 데이터를 수정했을 때 테이블 데이터가 수정되는 것뿐만 아니라, 수정 전의 데이터가 복사됩니다. 데이터베이스에는 한 개 이상의 롤백 세그먼트가 필요하며, 복수 테이블스페이스가 있을 때는 2개 이상의 롤백 세그먼트가 필요합니다. 롤백 세그먼트에는 다음에 나타나는 3가지 주요 역할이 있습니다. ㆍ트랜잭션의 롤백 ㆍ리드 컨시턴시(read consistency) ㆍ데이터베이스의 복구 롤백 세그먼트는 세그먼트의 일종이므로 테이블, 또는 색인과 마찬가지로 범위의 집합입니다. 테이블과의 차이점은 범위의 수가 적어도 2개라는 점입니다. 트랜잭션을 시작하면 오라클은 임의의 롤백 세그먼트를 자동으로 할당합니다. SET TRANSACTION문을 사용하여 사용할 롤백 세그먼트를 지정할 수도 있습니다. 트랜잭션을 완결하면 그 롤백 세그먼트는 해제되지만 바로 덮어쓰지는 않습니다. 다음 트랜잭션은 주로 공백이 있는 블록에서부터 순서대로 사용하기 때문입니다. 롤백 세그먼트의 내부 작동에 대해서 포인트를 간단히 정리합니다. ㆍ하나의 트랜잭션은 하나의 롤백 세그먼트만 기록할 수 있습니다. ㆍ하나의 롤백 세그먼트는 복수의 트랜잭션에서 사용할 수 있습니다. ㆍ블록 단위로 할당되므로, 하나의 범위를 복수의 트랜잭션에서 사용할 수 있습니다. ㆍ큰 트랜잭션에서 영역이 부족했을 때는 새로운 범위가 할당됩니다. ㆍ롤백 세그먼트의 PCTINCREASE는 항상 0이고, 수정할 수 없습니다. ㆍ수정의 최소 값은 2입니다. 롤백 세그먼트와 REDO 로그 파일은 물리적으로는 전혀 다르지만, 수정 로그를 저장한다는 의미에서는 비슷합니다. 그렇기 때문에 롤백 세그먼트와 REDO 로그 파일에는 동일한 내용이 기록되어 있다고 생각하는 사람도 있습니다. 그러나, 실제로 기록되어 있는 내용은 아주 다릅니다. 예를 들어 INSERT를 실행할 때, REDO 로그 파일에는 그 INSERT문이 기록됩니다. 그에 반해 롤백 세그먼트에서는 그 데이터를 롤백하는 정보만 있으면 되므로 입력 장소의 ROWID만 기록됩니다. 롤백 세그먼트에 저장되는 것은 수정 전의 테이블 데이터뿐입니다. 그에 반해 REDO 로그 파일에는 테이블 데이터뿐만 아니라, 색인 데이터와 DDL까지 포함되어 있습니다. 롤백 세그먼트의 크기는 데이터베이스 관리자에게 있어서 무척 고민되는 문제입니다. 롤백 세그먼트의 크기를 초과하는 대량의 데이터를 삭제했을 때 등 다음의 에러가 발생하는 경우가 있습니다. ORA-01562: 롤백 세그먼트 번호 n을 확장할 수 없습니다. ORA-01628: 최대 범위 n에 도달했습니다. 원인은 롤백 세그먼트의 범위가 너무 작다는 것입니다. 큰 트랜잭션이 발생하는 애플리케이션에서는 범위의 크기를 신중하게 검토해야 합니다. 또, 롤백 세그먼트에서는 성능면에서 다음 사항이 권장됩니다. ㆍ롤백 세그먼트는 I/O가 많고, 범위의 확보ㆍ해제가 많으므로 전용 테이블스페이스를 사용합니다. ㆍ단편화(fragment)를 방지하기 위해 INITIAL과 NEXT의 값을 동일하게 합니다. ㆍ범위의 개수를 20~30의 범위로 모읍니다. Oracle9i에서는 롤백 세그먼트의 이후로 UNDO 영역이 도입되었습니다. 롤백 세그먼트에서는 롤백 세그먼트의 크기와 개수 등 상세한 설정이 필요했지만, UNDO 영역에서는 전용 테이블스페이스를 지정하기만 하면 됩니다. 그 다음은 오라클이 자동으로 롤백 데이터를 기록합니다. Oracle9i에서는 UNDO 영역을 사용하거나 종래의 롤백 세그먼트를 사용하도록 지정할 수 있습니다. ※ UNDO 영역 Oracle9i에서는 롤백 세그먼트의 관리를 자동화하기 위해 자동 UNDO 관리 기능이 추가되어 있습니다. '자동 UNDO 관리'란 종래의 롤백 세그먼트를 대신하는 새로운 관리 방법으로, 많은 롤백 세그먼트를 생성하는 것이 아니라 UNDO 영역을 기록하기 위한 UNDO 테이블스페이스를 할당합니다. 그러면 오라클은 자동으로 UNDO 세그먼트의 생성과 삭제를 실행하고, 관리자는 롤백 세그먼트와 같은 상세 설정으로부터 해제됩니다. Oracle9i에서는 종래의 롤백 세그먼트를 사용할지, 자동 UNDO 관리를 사용할지의 여부를 초기화 파라미터인 UNDO_MANAGEMENT에서 선택합니다. 또, 초기화 파라리터 UNDO_RETENTION으로 완결 완료된 UNDO 세그먼트의 저장 기간을 지정할 수 있습니다. Oracle9i 신기능인 '플래시백 질의(flash back query)'는 자동 UNDO 관리 기능을 이용하고 있습니다. |