database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Tutorials 9060 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 9060
Rollback segment의 status가 FULL로 되는 경우와 조치 사항
작성자
정재익(advance)
작성일
2001-12-25 14:18
조회수
6,084

때때로 v$rollstat view에서 rollback segment의 status가 FULL로 나타나는

경우를 볼 수 있다. rollback segment가 FULL인 동안은 그 rollback segment를

사용할 수 없게 된다. 여기에서는 이렇게 rollback segment가 FULL이 되는

원인과 조치방법을 간단히 살펴본다.

 

1. STATUS가 FULL이 되는 경우

 

rollback segment가 FULL 이 되는 경우는 해당 rollback segment가 extent를

확장하려고 시도하는데 남은 공간이 없어서 ORA-1562(failed to extend rollback

segment number)를 만난 경우이다.

 

트랜잭션이 rollback segment를 사용하다 ORA-1562를 만난다는 것은 해당

rollback segment의 active한 트랜잭션이 사용하지 않는 공간은 이미 모두

사용하고도 추가적인 확장이 필요한 경우이기 때문에, 이렇게 FULL인 동안은

다른 transaction이 이 rollback segment를 사용할 수가 없게 된다. 실제로

FULL로 mark하는 이유도 사용하는 user에게 FULL인 것을 알리려는 것이 아니라

오라클이 내부적으로 이 rollback segment가 새로운 transaction에 할당되는

것을 막기 위한 것이다.

 

이렇게 ORA-1562가 발생하고 일부의 rollback segment가 FULL인 경우라도

transaction을 다시 수행시키면 다른 rollback segment를 잡고 사용할 수는 있다.

그러나 transaction이 batch성 작업이어서 다른 rollback segment를 이용하여

작업하다가 마찬가지로 space가 부족한 경우를 만나서 모든 rollback segment가

FULL이 되면 ORA-1552(cannot use system rollback segment for non-system

tablespace '%s)가 발생하게 된다.

 

2. FULL이 해제되는 경우

 

(1) FULL status를 가진 rollback segment 내의 모든 transaction들이

commit되는 경우

예를 들어, sqlplus 상에서 ORA-1562를 만난 sql문 수행 문 위에

commit 문장을 수행하거나, 오류를 만난 program을 완전히 종료하는 경우들이

해당된다.

이렇게 되면 v$rollstat의 xacts (active transactions)값이 0이 된다.

 

(2) 해당 rollback segment를 OFFLINE혹은 ONLINE으로 변경하는 경우

v$rollstat의 xacts값이 1이상일 때 OFFLINE하게 되면 status가 OFFLINE

PENDING상태가 되고, 모든 transaction이 완전히 rollback이 되거나

commit되어 clear되어 xacts가 0가 되면 OFFLINE PENDING이 OFFLINE 상태로

변경된다.

XACTS가 1이상일 때 OFFLINE시켜 OFFLINE PENDING이 된상태에서 다시

alter rollback segment문장을 이용해 ONLINE시키면 이제는 FULL이 아닌

ONLINE상태로 status가 변경된다. 그러나 여전히 이 rollback segment를

차지한 모든 transaction들이 commit이 되지 않았다면 이 rollback

segment를 사용하려는 시도는 실패하고 다른 rollback segment를

사용하게 된다.

 

rollback segment (예를 들어 r01) 를 online이나 offline으로 변경시키는

명령은 다음과 같다.

 

alter rollback segment r01 offline;

alter rollback segment r01 online;

 

(3) set transaction use rollback segment ;

문장을 사용하는 경우 STATUS가 FULL이더라도 지정된 rollback segment를

사용하려고 시도한다. 일단 rollback segment가 FULL이 된 후에 일부

transaction이 rollback되거나 commit이 종료된다면 일부분의 extents가

inactive가 되어 다른 transaction이 사용할 수 있는 공간을 확보하는

경우도 있을 수 있다.

단, 이 문장을 수행한다고 해서 FULL status가 변경되지는 않는다.

 

3. ORA-1562를 만난 transaction을 성공적으로 수행하기 위한 방법

 

rollback segment가 FULL이 되었다는 것은 이 rollback segment를 사용한

transaction이 문제의 rollback segment를 사용하다가 추가적인 extent를

발생 시 오류가 발생하였다는 것을 나타내므로, 일단 RBS tablespace에 free

space가 전혀 없다는 것을 나타낸다.

이러한 경우 ORA-1562를 만나 실패한 transaction이 성공적으로 재수행

되기 위해서 다음과 같은 방법이 가능하다.

 

(1) RBS를 확장하는 방법

가장 간단하게는 RBS tablespace의 크기를 늘려 rollback segment가

충분히 extend할 수 있도록 하는 것이다. RBS의 datafile을 늘리거나 (7.2 이상),

새로운 datafile을 하나 더 추가할 수 있다.

 

- size를 50m에서 100m로 증가시키는 경우

alter database datafile '/mnt3/rctest73/server/oradata/rbs01.dbf'

resize 100m;

- 50m 짜리 datafile을 하나 더 추가하는 경우

alter tablespace rbs add datafile '/mnt3/rctest73/server/oradata/rbs02.dbf' size 50m;

 

(2) RBS tablespace를 확장하지 않고 해결하는 방법

다음 문장을 수행하여 보아 FULL이 아닌 충분한 크기가 확보된 rollback

segment가 존재한다면 그 rollback segment를 지정하여 오류가 발생한

transaction을 재수행할 수 있다.

 

select usn, rssize from v$rollstat;

select * from v$rollstat;

 

여기에서 나타난 rssize값이 확보된 rollback segment의 영역이다.

 

첫번째로는 이 중 일부분의 rollback segment를 drop 후 다시 create하거나

shrink시켜 free space를 확보하여 다른 rollback segment가 extend

가능하도록 할 수 있으며, 두번째 방법으로는 이 중 rssize가 FULL된

rollback segment보다 충분히 큰 rollback segment를 지정하여

transaction을 수행시킬 수 있다.

 

각각의 syntax는 다음과 같다(예를 들어 r01).

- rollback segment drop 방법

alter rollback segment r01 offline;

drop rollback segment r01;

 

- rollback segment shrink 방법

alter rollback segment r01

 

- rollback segment를 지정하여 사용하는 방법

(r02의 rssize가 충분히 크고 FULL이 아니라면)

set transaction use rollback segment r02;

 

좀 더 자세한 자료는 Bulletin:10823(ORA-1562 분석 및 해결 방법)을 참조하도 록 한다.

[Top]
No.
제목
작성자
작성일
조회
9066오라클로 connect하는 시간이 너무 오래 걸리거나 혹은...
정재익
2001-12-25
5604
9063tnsping은 되는데, 실데 Program에서 DB 접속이 안되는경우
정재익
2001-12-25
5275
9061NT 에서 자동 백업을 받을 수 있는 방법
정재익
2001-12-25
6953
9060Rollback segment의 status가 FULL로 되는 경우와 조치 사항
정재익
2001-12-25
6084
9059PIPE 와 COMPRESS 를 사용한 export
정재익
2001-12-25
4808
9058EXCEPTION TABLE을 이용하여 중복된 자료를 확인하는 방법 [1]
정재익
2001-12-25
6592
9057ORA-1555에 관해
정재익
2001-12-25
5127
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.024초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다