2026년 07월 24일 | DBMS Error 가이드
이 글에서 다루는 내용
ORA-01557 에러의 원인 분석, 해결 SQL, 예방 방법을 실무 관점에서 정리합니다.
ORA-01557 cannot create rollback segment, tablespace must be online 는?
ORA-01557 에러는 Oracle 데이터베이스에서 롤백 세그먼트(Rollback Segment)를 생성하려고 할 때, 해당 롤백 세그먼트가 저장될 테이블스페이스가 오프라인(OFFLINE) 상태이거나 접근 불가능한 상태일 때 발생하는 에러입니다. 이 에러는 주로 데이터베이스 기동 과정, 수동 롤백 세그먼트 생성, 또는 언두(UNDO) 관련 설정 변경 시 빈번하게 나타납니다. Oracle 9i 이전의 수동 롤백 세그먼트 관리 환경이나 UNDO_MANAGEMENT=MANUAL 설정 환경에서 특히 자주 발생하며, 잘못된 테이블스페이스 상태 관리가 핵심 원인입니다.
주요 발생 원인
1. 롤백 세그먼트가 속한 테이블스페이스가 OFFLINE 상태인 경우
가장 흔한 원인으로, ROLLBACK SEGMENT가 정의된 테이블스페이스가 어떤 이유로든 OFFLINE 상태로 전환된 경우입니다. 데이터베이스 기동(STARTUP) 시 init.ora 또는 spfile에 정의된 ROLLBACK_SEGMENTS 파라미터에 나열된 세그먼트의 테이블스페이스가 마운트는 되었지만 ONLINE 상태가 아닐 때 이 에러가 발생합니다. 특히 DBA가 유지보수를 위해 테이블스페이스를 오프라인으로 전환한 후 이를 복구하지 않은 채 DB를 재기동하면 반드시 마주치게 됩니다.
2. 데이터 파일 손상 또는 누락으로 인한 테이블스페이스 접근 불가
롤백 세그먼트 테이블스페이스에 속한 데이터 파일(datafile)이 OS 레벨에서 삭제되었거나, 물리적으로 손상된 경우 Oracle은 해당 테이블스페이스를 정상적으로 온라인 상태로 만들 수 없습니다. 이 경우 데이터베이스는 테이블스페이스를 자동으로 OFFLINE 혹은 RECOVER 상태로 처리하며, 그 안에 있는 롤백 세그먼트를 생성하려 할 때 ORA-01557이 트리거됩니다. 백업 없이 데이터 파일을 이동하거나 삭제하는 운영 실수가 주된 원인입니다.
3. ROLLBACK_SEGMENTS 파라미터 잘못된 설정
init.ora 또는 spfile의 ROLLBACK_SEGMENTS 파라미터에 존재하지 않거나 다른 테이블스페이스에 있는 롤백 세그먼트 이름이 잘못 기재된 경우 에러가 발생합니다. DBA가 테이블스페이스를 재구성하거나 롤백 세그먼트를 이전한 후 파라미터 파일을 업데이트하지 않으면, 데이터베이스 기동 시 존재하지 않는 테이블스페이스 또는 오프라인 테이블스페이스를 참조하게 됩니다. 이 경우 실제 물리적 문제는 없지만 설정 불일치로 인해 에러가 발생하므로 파라미터 점검이 필수입니다.
해결 방법
원인 1 해결: 테이블스페이스를 ONLINE으로 전환
현재 테이블스페이스 상태를 먼저 확인하고, OFFLINE 상태인 경우 ONLINE으로 전환합니다.
-- 현재 테이블스페이스 상태 확인
SELECT tablespace_name, status
FROM dba_tablespaces
WHERE tablespace_name LIKE '%RBS%' OR tablespace_name LIKE '%UNDO%';
-- 롤백 세그먼트의 테이블스페이스 확인
SELECT segment_name, tablespace_name, status
FROM dba_rollback_segs;
-- 테이블스페이스를 ONLINE으로 전환
ALTER TABLESPACE RBS_TS ONLINE;
-- 전환 후 롤백 세그먼트 상태 확인
SELECT segment_name, status
FROM dba_rollback_segs
WHERE tablespace_name = 'RBS_TS';
데이터베이스가 MOUNT 상태에서만 기동되는 경우 아래와 같이 처리합니다.
-- DB가 MOUNT 상태일 때 데이터 파일 상태 확인
SELECT file#, name, status
FROM v$datafile
WHERE ts# IN (
SELECT ts# FROM v$tablespace WHERE name = 'RBS_TS'
);
-- 데이터 파일을 ONLINE으로 변경
ALTER DATABASE DATAFILE '/oracle/oradata/RBS01.DBF' ONLINE;
-- 이후 테이블스페이스 ONLINE
ALTER TABLESPACE RBS_TS ONLINE;
-- 데이터베이스 OPEN
ALTER DATABASE OPEN;
원인 2 해결: 데이터 파일 복구
데이터 파일이 손상되었거나 누락된 경우, 백업에서 복구하거나 데이터 파일 재생성이 필요합니다.
-- RMAN을 이용한 데이터 파일 복구
RMAN> RESTORE DATAFILE '/oracle/oradata/RBS01.DBF';
RMAN> RECOVER DATAFILE '/oracle/oradata/RBS01.DBF';
-- 아카이브 로그 기반 미디어 복구 (SQL*Plus)
-- DB MOUNT 상태에서 수행
RECOVER DATAFILE '/oracle/oradata/RBS01.DBF';
-- 복구 후 ONLINE 전환
ALTER DATABASE DATAFILE '/oracle/oradata/RBS01.DBF' ONLINE;
ALTER TABLESPACE RBS_TS ONLINE;
만약 롤백 세그먼트 데이터가 불필요하고 재생성이 가능한 상황이라면, 오프라인 드롭 후 재생성하는 방법도 사용할 수 있습니다.
-- 롤백 세그먼트 강제 오프라인 후 DROP (복구 불가 시)
ALTER ROLLBACK SEGMENT RBS1 OFFLINE;
DROP ROLLBACK SEGMENT RBS1;
-- 테이블스페이스 재생성 후 롤백 세그먼트 재생성
CREATE ROLLBACK SEGMENT RBS1
TABLESPACE RBS_TS
STORAGE (
INITIAL 1M
NEXT 1M
MINEXTENTS 2
MAXEXTENTS UNLIMITED
);
-- 롤백 세그먼트 ONLINE으로 전환
ALTER ROLLBACK SEGMENT RBS1 ONLINE;
원인 3 해결: ROLLBACK_SEGMENTS 파라미터 수정
-- 현재 파라미터 확인
SHOW PARAMETER rollback_segments;
SELECT name, value FROM v$parameter WHERE name = 'rollback_segments';
-- spfile을 사용하는 경우 파라미터 수정
ALTER SYSTEM SET ROLLBACK_SEGMENTS = ('RBS1', 'RBS2') SCOPE=SPFILE;
-- init.ora 사용 시 직접 파일 편집 후 재기동
-- init.ora 파일 내 수정:
-- rollback_segments = (RBS1, RBS2)
-- 수동 관리 대신 자동 언두 관리로 전환 (Oracle 9i 이상 권장)
ALTER SYSTEM SET UNDO_MANAGEMENT = AUTO SCOPE=SPFILE;
ALTER SYSTEM SET UNDO_TABLESPACE = UNDOTBS1 SCOPE=SPFILE;
-- DB 재기동 후 언두 테이블스페이스 확인
SELECT tablespace_name, status, contents
FROM dba_tablespaces
WHERE contents = 'UNDO';
예방 방법
1. 자동 언두 관리(AUM) 체계로 전환 및 언두 테이블스페이스 모니터링 자동화
Oracle 9i 이상 환경에서는 수동 롤백 세그먼트 관리 방식 대신 자동 언두 관리(Automatic Undo Management) 방식을 사용하는 것이 강력히 권장됩니다. UNDO_MANAGEMENT=AUTO로 설정하면 Oracle이 언두 세그먼트를 자동으로 관리하여 ORA-01557과 같은 에러 발생 가능성을 크게 줄일 수 있습니다. 또한 아래와 같은 모니터링 스크립트를 cron 또는 Oracle Scheduler를 통해 주기적으로 실행하여 테이블스페이스 상태 이상을 조기에 감지하십시오.
-- 언두/롤백 테이블스페이스 상태 정기 모니터링 쿼리
SELECT t.tablespace_name,
t.status,
t.contents,
ROUND(SUM(d.bytes)/1024/1024, 2) AS total_mb
FROM dba_tablespaces t
JOIN dba_data_files d ON t.tablespace_name = d.tablespace_name
WHERE t.contents IN ('UNDO', 'PERMANENT')
GROUP BY t.tablespace_name, t.status, t.contents
ORDER BY t.contents, t.tablespace_name;
2. 데이터베이스 기동 전 체크리스트 및 RMAN 정기 백업 정책 수립
운영 환경에서 데이터베이스를 재기동하기 전 반드시 모든 테이블스페이스 상태, 데이터 파일 존재 여부, 파라미터 파일(spfile/init.ora) 설정을 검증하는 사전 체크리스트를 운영 절차에 포함시켜야 합니다. RMAN을 이용한 정기적인 전체 백업(Full Backup)과 아카이브 로그 백업을 통해 데이터 파일 손상 또는 누락 시 신속한 복구가 가능하도록 준비해야 하며, 이를 통해 ORA-01557 발생 시 복구 시간을 최소화할 수 있습니다.
관련 에러
- ORA-01534: 롤백 세그먼트를 찾을 수 없을 때 발생하는 에러로, ROLLBACK_SEGMENTS 파라미터에 잘못된 세그먼트 이름이 지정된 경우 함께 나타날 수 있습니다.
- ORA-01545: 지정된 롤백 세그먼트를 사용 불가 상태에서 사용하려 할 때 발생하며, ORA-01557과 유사한 맥락에서 발생합니다.
- ORA-30012: 자동 언두 관리(AUM) 환경에서 언두 테이블스페이스가 오프라인 상태일 때 발생하며, AUM 전환 이후 ORA-01557과 동일한 증상을 보이는 에러입니다.
- ORA-01109: 데이터베이스가 OPEN되지 않은 상태 관련 에러로, 테이블스페이스 복구 작업 중 함께 발생할 수 있습니다.
주요 DBMS error code를 정리하는 시리즈입니다.
블로그 홈에서 다른 에러도 확인하세요.
본 포스트는 AI가 생성한 기술 가이드입니다. 운영 환경 적용 전 충분한 검토를 권장합니다.