상세 컨텐츠

본문 제목

롤백 세그먼트 관리에 대한 지침 사항

프로그래밍/DB

by 라제폰 2008. 12. 23. 13:18

본문


원본출처 : http://www.barn.co.kr/



 

롤백 세그먼트 관리에 대한 지침 사항
  
이 곳에서는 데이터베이스의 롤백 세그먼트를 생성하고 관리하기 전에 고려해야 할 지침 사항을 설명하고 다음 내용을 다룹니다.
  
  1. 다중 롤백 세그먼트 사용
  2. 공용 및 전용 롤백 세그먼트 사이에서 선택
  3. 롤백 세그먼트 자동 획득 지정
  4. 적합한 롤백 세그먼트 크기 설정
  5. 여러 개의 동일 크기 확장 영역을 가지는 롤백 세그먼트 생성
  6. 각 롤백 세그먼트에 대한 최적의 확장 영역 수 설정
  7. 롤백의 저장 영역 위치 설정

모든 데이터베이스는 하나 이상의 롤백 세그먼트를 포함합니다.
롤백 세그먼트는 트랜잭션을 롤백하는 이벤트에서 트랜잭션을 기록하는 데이터메이스의 부분입니다.
롤백 세그먼트를 사용하여 일기 일관성, 롤백 트랜잭션, 데이터베이스 복구를 제공합니다.

    
  

다중 롤백 세그먼트 사용
  
다중 롤백 세그먼트를 사용한다면 많은 세그먼트로 롤백 세그먼트 경합을 분산시키므로 시스템 성능이 향상됩니다.
다음과 같은 상황에서 다중 롤백 세그먼트가 필요합니다.
  
데이터베이스를 생성할 때 SYSTEM이라는 단일 롤백 세그먼트가 SYSTEM테이블스페이스에 생성됩니다.
데이터베이스가 다른 테이블스페이스를 가지면 SYSTEM테이블스페이스에 둘 이상의 롤백 세그먼트가 있어야 합니다.
SYSTEM테이블스페이스에 적어도 하나의 추가 롤백 세그먼트를 만든 후 온라인으로 설정해야 SYSTEM이 아닌 다른 테이블스페이스에서도 개체를 (롤백 세그먼트도) 생성할 수 있습니다.
  
많은 트랜잭션을 동시에 처리할 때 더 많은 롤백 정보가 생성됩니다.
TRANSACTIONS매개변수로는 관리자가 예상하는 인스턴스에 대한 동시 트랜잭션 수를TRANSACTIONS_PER_ROLLBACK_SEGMENT매개변수로는 각 롤백 세그먼트에서 처리해야 할 트랜잭션 수를 지정할 수 있습니다.
그런 다음 인스턴스가 데이터베이스를 열면 데이터베이스는 최대 트랜잭션을 처리하기 위해 TRANSACTIONS / TRANSACTIONS_PER_ROLLBACK_SEGMENT만큼의 롤백 세그먼트를 얻으려고 시도합니다. 따라서 매개변수를 설정한 후에 TRANSACTIONS/TRANSACTIONS_PER_ROLLBACK_SEGMENT만큼의 롤백 세그먼트를 생성합니다.
  
롤백 세그먼트를 SYSTEM테이블스페이스에 추가
초기 롤백 세그먼트 SYSTEM은 데이터베이스를 생성할 때 만들어집니다.
테이블스페이스와 관련된 기본 저장 영역 매개변수를 사용하면 SYSTEM롤백 세그먼트는 SYSTEM테이블스페이스에 생성됩니다. 이 롤백 세그먼트는 삭제할 수 없습니다.

인스턴스는 필요한 다른 롤백 세그먼트뿐 아니라 SYSTEM롤백 세그먼트를 항상 획득합니다. 그러나 다중 롤백 세그먼트가 있으면 특정 시스템 트랜젝션에 대해서만 SYSTEM 롤백 세그먼트를 사용하며 사용자 트랜잭션을 다른 롤백 세그먼트로 분산시킴니다.
SYSTEM이 아닌 다른 롤백 세그먼트에 너무 많은 트랜잭션이 있을 때는 SYSTEM테이블스페이스에 적어도 하나의 추가 롤백 세그먼트를 만듭니다.
  

공용 및 전용 롤백 세그먼트 사이에서 선택
  
인스턴스가 데이터베이스를 열면 인스턴스는 전용 롤백 세그먼트를 명시적으로 획득합니다.
공용 롤백 세그먼트는 롤백 세그먼트를 필요로 하는 모든 인스턴스가 사용할 수 있는 롤백 세그먼트 풀을 형성합니다.

데이터베이스에 병렬 서버 옵션이 없다면 공용 및 전용 롤백 세그먼트는 동일합니다. 따라서 모든 공용 롤백 세그먼트를 생성할 수 있습니다.
병렬 서버 옵션이 있는 데이터베이스는 데이터베이스를 여는 각 인스턴스가 SYSTEM롤백 세그먼트 외에 적어도 하나의 롤백 세그먼트를 획득할 만큼 충분한 세그먼트를 가지고 있다면 공용 세그먼트만을 가질 수 있습니다.
Oracle병렬 서버를 사용할 때 전용 롤백 세그먼트를 사용할 수도 있습니다.
  
롤백 세그먼트 자동 획득 지정
  
기본적으로 인스턴스를 시작하면 인스턴스는TRANSACTION/TRANSACTIONS_PER_ROLLBACK_SEGMENT만큼의 롤백 세그먼트를 획득합니다.
인스턴스가 특정 크기나 특정 테이블스페이스를 가지는 특정 롤백 세그먼트를 획득하게 하려면 인스턴스의 매개변수 파일에 있는 ROLLBACK_SEGMENTS매개변수에 롤백 세그먼트이름을 지정합니다.

TRANSACTION/TRANSACTIONS_PER_ROLLBACK_SEGMENT만큼의 세그먼트 값만큼의 세그먼트 값보다 많은 롤백 세그먼트를 지정해도 인스턴스는 이 변수에 나열된 모든 롤백 세그먼트를 획득합니다. 롤백 세그먼트는 전용 또는 공용입니다.
  
적합한 롤백 세그먼트 크기 설정
  
전체 롤백 세그먼트 크기는 데이터베이스에서 실행되는 가장 일반적인 트랜잭션 크기를 기반으로 설정해야 합니다.
일반적으로 일괄 작업같이 오래 실행되는 트랜잭션은 큰 롤백 세그먼트에서 수행하는 것이 좋은 반면 데이터베이스가 작은 롤백 세그먼트를 많이 기질 때는 짧은 트랜잭션의 수행 성능이 더 좋습니다.
일반적으로 롤백 세그먼트는 크기에 관계없이 쉽게 트랜잭션을 다룰 수 있지만 트랜잭션이 매우 짧거나 긴 극단적인 경우에는 적합한 크기의 롤백 세그먼트를 원합니다.
  
시스템이 짧은 트랜잭션만 실행하고 있다면 롤백 세그먼트의 크기는 주 메모리에 저장될 수 있도록 작아야 합니다.
롤백 세그먼트 크기가 아주 작으면 LRU알고리즘에 따라 롤백 세그먼트가 SGA에 있을 확률이 높고 디스크 입출력이 적어지므로 데이터베이스 성능이 향상됩니다.
작은 롤백 세그먼트의 주된 단점은 다른 트랜잭션이 자주 갱신하는 레코드를 포함하는 긴 질의를 수행할 때 "snapshot too old"라는 오류가 발생할 확률이 높다는 것입니다.
이 오류는 다른 갱신된 입력 항목이 롤백 세그먼트를 차지하고 있어 읽기 일관성이 필요한 롤백 입력항목을 겹쳐쓰기 때문에 발생합니다.
응용 프로그램의 트랜잭션을 설계할 때 이 사항을 고려하여 트랜잭션을 작은 단위 작업으로 만들면 이 문제를 피할 수 있습니다.
  
반대로 오래 실행되는 트랜잭션은 큰 롤백 세그먼트로 수행되어야 종은데 이것은 오래 실행되는 트랜잭션의 롤백 입력 항목이 사전에 할당된 큰 롤백 세그먼트의 확장 영역에 맞기 때문입니다.

데이터베이스 시스템의 응용 프로그램이 매우 짧은 트랜잭션과 매우 긴 트랜잭션을 혼합하여 동시에 실행할 때 트랜잭션이 트랜잭션/롤백 세그먼트 크기에 준하여 롤백 세그먼트에 명시적으로 지정되면 성능은 최적화 될 수 있습니다.
롤백 세그먼트의 동적 확장 영역 할당과 잘라내기를 최소화할 수 있습니다.
이것은 대부분의 시스템에는 필요하지 않으며 극단적으로 길거나 짧은 트랜잭션의 경우에 해당합니다.

극단적으로 짧거나 긴 트랜잭션을 혼합하여 실행할 때 성능을 최적화하려면 각 트랜잭션 유형(작은 것, 중간, 큰 것)에 대해 적합한 크기를 가진 롤백 세그먼트를 많이 만들어야 합니다.
대부분의 롤백 세그먼트는 전형적인 트랜잭션에 해당되고 적은 수의 롤백 세그먼트가 비전형적인 트랜잭션에 해당되어야 합니다.
롤백 세그먼트의 크기가 증가해야 한다면 롤백 세그먼트가 의도한 크기를 돌려주도록 각각의 롤백 세그먼트에 대해 OPTIMAL을 설정합니다.
  
데이터베이스 관리자는 다른 유형의 트랜잭션에 해당하는 다른 롤백 세그먼트 집합을 사용자에게 알려야 합니다.
트랜잭션을 명시적으로 특정 롤백 세그먼트에 지정하는 것은 좋지 않습니다. 그러나 비전형적인 트랜잭션을 위해 생성한 해당 롤백 세그먼트에 비존형적인 트랜잭션을 지정할 수 있습니다.
예를 들어 큰 롤백 세그먼트에 큰 일괄 작업을 포함하는 트랜잭션을 지정할 수 있습니다.
  
트랜잭션의 혼합이 많이 쓰이지 않는 경우 각 롤백 세그먼트는 데이터베이스에서 가장 큰 테이블 크기의 10%가 되어야 합니다.
대부분의 SQL명령문은 테이블의 10%미만에 영향을 주기 때문입니다. 따라서 이정도 크기의 롤백 세그먼트는 대부분의 SQL명령문이 수행하는 작업을 저장하기에 충분해야 합니다.

일반적으로 롤백 세그먼트에 대해 MAXEXTENTS를 높게 설정해야 합니다.
그러면 롤백 세그먼트는 필요할 때 마다 계속 확장 영역을 할당할 수 있습니다.
  
여러 개의 동일 크기 확장 영역을 가지는 롤백 세그먼트 생성
  
각 롤백 세그먼트의 전체 할당 영역은 동일한 크기를 가지는 여러 개의 확장 영역으로 나누어야 합니다.
일반적으로 최적의 롤백 입출력 수행은 인스턴스의 각 롤백 세그먼트가 10에서 20개의 동일한 크기의 확장 영역을 가질 때 이루어집니다.

원하는 롤백 세그먼트의 전체 초기 크기와 세그먼트에 대한 초기 확장 영역의 수를 결정한 후 다음 공식을 사용하여 롤백 세그먼트의 각 확장 영역 크기를 계산합니다.
  
   T / n = s
  
      T : 바이트 단위의 전체 초기 롤백 세그먼트 크기
      n : 초기에 할당되는 확장 영역 수
      s : 초기에 할당되는 각 확장 영역을 바이트로 계산한 크기

s를 계산한 후 롤백 세그먼트를 생성하고 INITIAL과 NEXT저장 영역 매개변수를 s로, MINEXTENTS를 n으로 지정합니다.
PCTINCREASE는 롤백 세그먼트에 대해서는 지정할 수 없으며 기본값은 0입니다.
또한 확장 영역 크기 s가 데이터 블록 크기의 정확한 배수가 아닌 경우에는 다음 배수로 반올립합니다.
  
각 롤백 세그먼트에 대한 최적의 확장 영역 수 설정
  
각 롤백 세그먼트의 OPTIMAL매개변수를 설정할 때 시스템이 실행할 트랜잭션 종류를 조심스럽게 평가해야 합니다.
오래 실행되는 트랜잭션을 자주 실행하는 시스템의 경우 OPTIMAL이 큰 값이어야 확장 영역을 환원하여 자주 할당하지 않아도 됩니다. 또한 현재 사용하는 데이터에 긴 질의를 실행하는 시스템의 경우에는 "snapshot too old"라는 오류가 발생하는 것을 막기 위해 OPTIMAL이 큰 값이어야 합니다.
주로 짧은 트랜잭션과 질의를 하는 시스템에서는 OPTIMAL이 작은 값이어야 롤백 세그먼트가 메모리에 저장될 수 있도록 유지하고 시스템의 성능이 향상됩니다.

MONITOR ROLLBACK기능을 사용하여 롤백 세그먼트의 OPTIMAL설정 효과를 볼 수 있습니다.
  
Size, High Water : 롤백 세그먼트에 할당된 가장 큰 영역으로 바이트 단위 크기
Size, Optimal : 바이트 단위로 표현된 롤백 세그먼트의 OPTIMAL크기
Occurrences, Wraps : 트랜잭션이 롤백 세그먼트의 한 확장 영역에서 다른 기존 확장 영역까지 계속 작성하는 누적 횟수
Occurrences, Extends : 새 확장 영역이 롤백 세그먼트에 할당되는 누적 횟수
Shrinks : Oracle이 롤백 세그먼트에서 확장 영역을 잘라내는 횟수
Average Sizes, Shrunk : Oracle이 롤백 세그먼트에서 잘라낸 영역의 평균 크기로 바이트 단위
Average Sizes, Active : 현재 롤백 세그먼트에서 사용 중인 확장 영역의 평균 바이트 수를 시간에 따라 측정한 것

인스턴스가 동등한 크기의 확장 영역이 있는 동일한 크기의 롤백 세그먼트를 가진다면 부여된 롤백 세그먼트의 OPTIMAL매개변수는 Average Sizes, Active보다 조금 더 높게 설정되어야 합니다.

현재 OPTIMAL설정의 효과 분석
  

Shrinks

AverageSize,Shrunk

분석 권장

Low

Low

Average Sizes, Active Size, Optimal 가까우면 OPTIMAL설정은 정확합니다. 그렇지 않으면 OPTIMAL 너무 큽니다. 확장 영역이 충분히 환원되지 않습니다.

Low

High

우수 : 좋은 OPTIMAL설정

High

Low

OPTIMAL 너무 작습니다. 확장 영역이 너무 많이 환원되었습니다.

High

High

주기적인 트랜잭션이 이러한 통계를 야기합니다. Shrinks 낮아질 때까지 매개변수 OPTIMAL 높게 설정합니다.

롤백 저장 영역 위치 설정
  
가능하다면 SYSTEM테이블스페이스에서 필요로 하는 두 개의 롤백 세그먼트 외에 모든 롤백 세그먼트를 유지하는 하나의 테이블스페이스를 특별히 생성합니다.
이러한 방법으로 모든 롤백 세그먼트 데이터는 다른 유형의 데이터와는 별도로 저장됩니다. 이 "롤백 세그먼트"테이블스페이스를 생성하면 다음과 같은 이점이 있습니다.
  
롤백 세그먼트를 유지하는 테이블스페이스는 항상 온라인으로 유지할 수 있습니다. 따라서 롤백 세그먼트를 조합한 저장 영역의 크기는 항상 최대가 됩니다. 일부 롤백 세그먼트를 사용할 수 없으면 전체 데이터베이스 작업이 영향을 받을 수 있습니다.
  
현재 사용 중인 롤백 세그먼트를 가지는 테이블스페이스는 오프라인으로 설정할 수 없으므로 데이터베이스의 모든 롤백 세그먼트를 유지하는 테이블스페이스를 지정하면 다른 테이블스페이스에 저장된 데이터를 데이터베이스의 롤백 세그먼트에 신경쓰지 않고 오프라인으로 설정할 수 있도록 보장합니다.
  
테이블스페이스가 확장 영역을 자주 할당하고 해제하는 롤백 세그먼트를 포함한다면 테이블스페이스의 빈 확장 영역은 더욱 단편화될 것입니다.
  
롤백 세그먼트 생성
  
롤백 세그먼트를 생성하려면 CREATE ROLLBACK SEGMENT시스템 권한이 있어야 합니다.
SQL명령어 CREATE ROLLBACK SEGMENT를 사용하여 데이터베이스에 추가 롤백 세그먼트를 생성합니다. 새 롤백 세그먼트를 포함하는 테이블스페이스는 온라인이어야 합니다.
  
USERS테이블스페이스의 기본 저장 영역 매개변수를 사용하여 USERS테이블스페이스에USERS_RS공용 롤백 세그먼트를 생성하는 명령문은 다음과 같습니다.
  
    CREATE PUBLIC ROLLBACK SEGMENT user_rs TABLESPACE users;
  
새 롤백 세그먼트를 온라인으로 설정
  
전용 롤백 세그먼트를 생성하면 새 롤백 세그먼트 이름을 데이터베이스의 매개변수 파일에 있는 ROLLBACK_SEGMENTS매개변수에 추가해야 합니다.
그러면 인스턴스를 시작할 때 인스턴스는 전용 롤백 세그먼트를 획득할 수 있습니다.
예를 들어 두 개의 새 롤백 세그먼트를 만들고 이름을 RS1과 RS2로 한다면 매개변수 파일의 ROLLBACK_SEGMENTS매개변수는 다음과 같아야 합니다.
  
    ROLLBACK SEGMENTS= (RS1, RS2)
   
롤백 세그먼트에 대한 저장 영역 매개변수 지정
   
이 곳에서는 롤백 세그먼트 저장 영역 매개변수 지정을 설명하고 다음 내용을 다룹니다.
   
  1. 롤백 세그먼트 생성 시 저장 영역 매개변수 설정
  2. 롤백 세그먼트의 저장 영역 매개변수 변경
  3. 롤백 세그먼트의 형식 변경
  4. 롤백 세그먼트 직접 환원
롤백 세그먼트 생성 시 저장 영역 매개변수 설정
  
저장 영역 매개변수와 다음의 최적 크기를 가지는 DATA1_RS 공용 롤백 세그먼트를 생성한다고 합시다.
  
롤백 세그먼트에 50K의 초기 확장 영역을 할당합니다.
롤백 세그먼트에 50K의 두 번째 확장 영역을 할당합니다.
롤백 세그먼트의 최적 크기는 750K입니다.
세그먼트 생성 시 초기에 할당된 확장 영역 수와 최소 확장 영역 수는 15입니다.
롤백 세그먼트가 할당할 수 있는 최대 확장 영역 수는 초기 확장 영역을 포함하여 100입니다.

이러한 특성을 가지는 롤백 세그먼트를 생성하는 명령문은 다음과 같습니다.
  
    CREATE PUBLIC ROLLBACK SEGMENT data1_rs TABLESPACE users
        STORAGE (
              INITIAL 50K
              NEXT 50K
             OPTIMAL 750K
             MINEXTENTS 15
             MAXEXTENTS 100 )
      /

롤백 세그먼트의 저장 영역 매개변수 변경
  
롤백 세그먼트를 생성한 후 롤백 세그먼트의 저장 영역 매개변수를 변경할 수 있습니다.
그러나 현재 롤백 세그먼트에 할당된 확장 영역의 크기는 변경할 수 없습니다. 나중에 생성될 확장 영역에만 영향을 줄 수 있습니다.
SQL명령어 ALTER ROLLBACK SEGMENT를 사용하여 롤백 세그먼트의 저장 영역 매개변수를 변경합니다.
DATA1_RS롤백 세그먼트가 할당될 수 있는 최대 확장 영역 수를 변경하는 명령문은 다음과 같습니다.
  
    ALTER PUBLIC ROLLBACK SEGMENT data1_rs STORAGE ( MAXEXTENTS 120 ) ;

롤백 세그먼트의 설정을 변경할 수 있는 것처럼 OPTIMAL매개변수를 변경하여 SYSTEM롤백 세그먼트의 설정을 변경할 수 있습니다.
  
주 : 공용 롤백 세그먼트를 변경하려면 ALTER ROLLBACK SEGMENT명령어에 PUBLIC키워드가 있어야 합니다.
  
롤백 세그먼트의 형식 변경
  
롤백 세그먼트를 변경하려면 ALETR ROLLBACK SEGMENT 시스템 권한이 있어야 합니다.
롤백 세그먼트의 제한 또는 무제한 형식을 정의할 수 있습니다. 제한 또는 무제한 형식으로 변환할 때 롤백 세그먼트를 오프라인으로 설정해야 합니다.
롤백 세그먼트의에 무제한 형식을 정의하려면 세그먼트의 확장 영역은 최소한 4개의 데이터 블록을 가져야 합니다.
따라서 제한된 형식의 롤백 세그먼트가 확장 영역에 4개 이하의 데이터 블록을 가진다면 무제한 형식으로 변환될 수 없습니다. 제한 형식에서 무제한 형식으로 변환하고자 하는데 확장 영역에 4개 이하의 데이터 블록이 있는 경우 롤백 세그먼트를 삭제하고 재생성하는 것이 유일한 방법입니다.
  
롤백 세그먼트 직접 환원
  
롤백 세그먼트를 환원하려면 ALETR ROLLBACK SEGMENT 시스템 권한이 있어야 합니다.
SQL명령어 ALTER ROLLBACK SEGMENT를 사용하여 직접 롤백 세그먼트의 크기를 줄일 수 있습니다. 환원할 롤백 세그먼트는 온라인 이어야 합니다.

RBS1롤백 세그먼트를 100K로 환원하는 명령문은 다음과 같습니다.
  
   ALTER ROLLBACK SEGMENT rbs1 SHRINK TO 100K;
  
롤백 세그먼트 온라인 및 오프라인으로 설정
  
이 곳에서는 롤백 세그먼트를 온라인이나 오프라인으로 설정하는 내용을 설명하고 다음 내용을 다룹니다.
  
  1. 롤백 세그먼트 온라인으로 설정
  2. 롤백 세그먼트 오프라인으로 설정

롤백 세그먼트는 트랜잭션이 사용할 수 있는 상태인 온라인이거나 사용할 수 없는 상태인 오프라인입니다.
일반적으로 롤백 세그먼트는 온라인으로 트랜잭션이 사용할 수 없습니다.

다음과 같은 상황에서는 온라인 롤백 세그먼트를 오프라인으로 설정하고자 할 것입니다.

  1. 테이블스페이스를 오프라인으로 설정하고자 하며 테이블스페이스가 롤백 세그먼트를 포함할 때 테이블스페이스가 트랜잭션이 현재 사용하고 있는 롤백 세그먼트를 포함하는 경우에는 테이블스페이스를 오프라인으로 설정할 수 없습니다.
    관련된 롤백 세그먼트를 사용하지 않으려면 테이블스페이스를 오프라인으로 설정하기 전에 롤백 세그먼트를 오프라인으로 설정해야 합니다.
      
  2. 롤백 세그먼트를 삭제하고 싶지만 트랜잭션이 현재 이를 사용하기 때문에 삭제할 수 없습니다.
    롤백 세그먼트를 사용하지 않으려면 롤백 세그먼트를 삭제하기 전에 오프라인으로 설정해야 합니다.

주 : SYSTEM롤백 세그먼트는 오프라인으로 설정할 수 없습니다.
  
나중에 트랜잭션이 롤백 세그먼트를 사용할 수 있도록 오프라인 롤백 세그먼트를 다시 온라인으로 설정하고자 할 수도 있습니다.
롤백 세그먼트가 생성될 때 오프라인으로 초기화되므로 인스턴스의 트랜잭션이 사용하기 전에 새로 만들어진 롤백 세그먼트를 명시적으로 온라인으로 설정해야 합니다. 롤백 세그먼트를 포함하는 데이터베이스를 액세스하는 인스턴스를 통해 오프라인 롤백 세그먼트를 온라인으로 설정할 수 있습니다.

롤백 세그먼트 온라인으로 설정
  
현재 상테(DBA_ROLLBACK_SEGS 데이터 딕셔너리 뷰에 나타난 갓처럼)가 OFFLINE이나 PARTLY AVAILABLE의 롤백 세그먼트만을 온라인으로 설정할 수 있습니다.
SQL명령어 ALTER ROLLBACK SEGMENT에 ONLINE옵션을 사용하여 오프라인 롤백 세그먼트를 온라인으로 설정합니다.
  
PARTLY AVAILABLE롤백 세그먼트 온라인으로 설정
  
PARTLU AVAILABLE상태인 롤백 세그먼트는 미확정이거나 복구된 분산 트랜잭션의 데이터를 포함하지만 복구된 트랜잭션은 아닙니다.
DBA_ROLLBACK_SEGS데이터 딕셔너리 뷰를 보변 PARTLY AVALIABLE상태임을 알수 있습니다.
트랜잭션을 RECO가 자동으로 해결하거나 DBA가 직접 해결할 때까지 롤백 세그먼트는 보통 이 상태에 있게됩니다. 그러나 모든 롤백 세그먼트가 PARTLY AVALIABLE상태일 수도 있습니다.
이 경우 위에서 설명한 대로 PARTLY AVALIABLE세그먼트를 온라인으로 설정할 수 있습니다.

미확정 트랜잭션에 대해 롤백 세그먼트가 사용하는 자원은 트랜잭션이 해결될 때까지 액세스할 수 없습니다.
결과적으로 롤백 세그먼트에 할당된 다른 트랜잭션이 추가 영역을 필요로 한다면 롤백 세그먼트는 증가되어야 합니다.
  
PARTLY AVALIABLE세그먼트를 온라인으로 설정하는 대안으로 미확정 트랜잭션이 해결될 때까지 새 롤백 세그먼트를 임시로 생성하는 것이 쉬울 것 입니다.
  
롤백 세그먼트를 자동으로 온라인으로 설정
  
데이터베이스를 시작할 때마다 롤백 세그먼트를 자동으로 온라인으로 설정하려면 세그먼트 이름을 데이터베이스 매개변수 파일의 ROLLBACK SEGMENTS매개변수에 추가해야 합니다.
  
롤백 세그먼트 오프라인으로 설정
  
온라인 롤백 세그먼트를 오프라인으로 설정하려면 ALTER ROLLBACK SEGMENT명령어에 OFFLINE옵션을 사용합니다.
DBA_ROLLBACK_SEGS데이터 딕셔너리 뷰의 롤백 세그먼트 상태는 "ONLINE" 이어야 하며 현재 인스턴스가 롤백 세그먼트를 획득할 수 있어야 합니다.
  
현재 사용 중인 롤백 입력 항목을 포함하지 않는 롤백 세그먼트를 오프라인으로 설정하려면 즉시 세그먼트를 오프라인으로 설정하고 상태을 "OFFLINE"으로 변경합니다.
  
반대로 현재 사용하는 트랜잭션의 (지역, 분산, 또는 원격)롤백 데이터를 포함하는 롤백 세그먼트를 오프라인으로 설정하려면 이후의 트랸잭션이 롤백 세그먼트를 액세스하지 못하게 하고 롤백 세그먼트를 사용하는 모든 트랜잭션이 끝난 후에 오프라인으로 설정합니다.
롤백 세그먼트는 트랜잭션이 끝날 때까지 자신을 오프라인으로 설정하려는 인스턴스가 아닌 다른 인스턴스에 의해 온라인으로 설정될 수 없습니다.
이 기간 동안DBA_ROLLBACK_SEGS뷰에 있는 롤백 세그먼트 상태는 ONLINE으로 유지됩니다.
그러나 변경한 인스턴스는 언제든 롤백 세그먼트를 다시 온라인으로 설정할 수 있습니다. 롤백 세그먼트가 다시 온라인으로 설정되면 정상적으로 작동할 것입니다.
  
트랜잭션을 롤백 세그먼트에 명시적으로 지정
  
SET TRANSACTION 명령어에 USE ROLLBACK SEGMENT매개변수를 사용하여 트랜잭션을 특정 세그먼트에 명시적으로 지정할 수 있습니다. 트랜잭션은 다음과 같은 이유로 롤백 세그먼트에 명시적으로 지정됩니다.
  
  1. 트랜잭션이 생성하는 롤백 정보의 예측량은 지정된 롤백 세그먼트의 현재 확장 영역에 맞을 수 있습니다.
  2. 롤백 세그먼트에 대해 추가 확장 영역을 동적으로 할당하고 계속 잘라버리지 않아도 됩니다. 추가 확장 영역의 동적 할당은 시스템의 전체 성능을 저하시킴니다.

트랜잭션을 롤백 세그먼트에 명시적으로 지정하려면 롤백 세그먼트는 현재 인스턴스에 대해 온라인이어야 하며 SET TRANSACTION USE ROLLBACK SEGMENT명령문이 트랜잭션의 첫 번째 명령문이어야 합니다.
특정 롤백 세그먼트가 온라인이 아니거나 SET TRANSACTION USE ROLLBACK SEGMENT명령문이 트랜잭션의 첫 번째 명령문이 아니라며 오류를 돌려줍니다.

트랜잭션을 커밋한 후 사용자가 세 트랜잭션을 특정 롤백 세그먼트에 명시적으로 지정하지 않으면 Oracle은 자동으로 다음 트랜잭션을 사용 가능한 트랜잭션에 지정합니다.
  

롤백 세그먼트 삭제
  
세그먼트의 확장 영역이 디스크 상에서 너무 단편화되었거나 세그먼트를 다른 테이블스페이스에 재위치시켜야 할 때는 롤백 세그먼트를 삭제할 수 있습니다.

롤백 세그먼트를 삭제하기 전에 롤백 세그먼트 상태사 OFFLINE인지 확인합니다. 삭제할 롤백 세그먼트가 현재 OFFLINE, PARTLY AVAILABLE, NEEDS RECOVERY나 INVALID상태면 삭제할 수 없습니다.
상태가 INVALID면 세그먼트는 이미 삭제된 것입니다. 롤백 세그먼트를 삭제하기 전에 오프라인으로 설정해야 합니다.

롤백 세그먼트를 삭제하려면 DROP ROLLBACK SEGMENT시스템 권한이 있어야 합니다.

DROP ROLLBACK SEGMENT명령어를 사용한다면 PUBLIC키워드를 포함하거나 생략하여 삭제할 롤백 세그먼트의 정확한 유형을 공용 또는 전용으로 나타냅니다.

주 : ROLLBACK SEGMENT에 지정된 롤백 세그먼트가 삭제되면 데이터베이스 매개변수 목록에서 제거합니다. 다음 인스턴스를 시작하기 전에 이 단계가 수행되지 않으면 삭제된 롤맥 세그먼트를 획득할 수 없으므로 다음 인스턴스를 사작할 수 없습니다.

롤백 세그먼트가 삭제되면 상태가 INVALID로 변경됩니다. 다음 롤백 세그먼트를 생성할 때 가능하다면 삭제된 롤백 세그먼트가 사용했던 열을 사용하고 삭제된 롤백 세그먼트의 행은 더 이상 DBA_ROLLBACK_SEGS뷰에 나타나지 않습니다.
 

 


문의나 의견 있으시면 담당자(mailto:webmaster@mail.barn.co.kr)에게 메일 주십시요
Last modified: 5월 26, 1999
Copyright © 1998 바른인포테크(주)

관련글 더보기