2026년 07월 23일 | DBMS Error 가이드
이 글에서 다루는 내용
ORA-01546 에러의 원인 분석, 해결 SQL, 예방 방법을 실무 관점에서 정리합니다.
ORA-01546 tablespace contains active rollback segment 는?
ORA-01546 에러는 테이블스페이스를 오프라인으로 변경하거나 삭제하려 할 때, 해당 테이블스페이스 안에 아직 활성화된 롤백 세그먼트(Rollback Segment)가 존재할 경우 발생하는 오류입니다. Oracle은 트랜잭션의 무결성을 보장하기 위해 활성 롤백 세그먼트가 포함된 테이블스페이스에 대한 구조적 변경을 허용하지 않습니다. 주로 수동 언두(Manual Undo) 방식을 사용하는 구형 Oracle 환경이나, 실수로 언두 테이블스페이스를 직접 조작하려는 경우 자주 마주치는 에러입니다.
주요 발생 원인
1. 활성 트랜잭션이 존재하는 롤백 세그먼트가 포함된 테이블스페이스를 오프라인/삭제 시도
가장 흔한 원인으로, 해당 테이블스페이스 내의 롤백 세그먼트를 현재 사용 중인 트랜잭션이 남아 있는 상태에서 테이블스페이스를 변경하려 할 때 발생합니다. Oracle은 진행 중인 트랜잭션의 롤백 데이터가 손실되지 않도록 이 작업을 차단합니다. 이 경우 반드시 해당 트랜잭션이 커밋(COMMIT) 또는 롤백(ROLLBACK)된 이후에 작업을 재시도해야 합니다.
2. 롤백 세그먼트가 ONLINE 상태인 채로 테이블스페이스 변경 시도
롤백 세그먼트 자체가 ONLINE 상태이면, 해당 세그먼트를 포함하는 테이블스페이스는 오프라인으로 전환하거나 삭제할 수 없습니다. 트랜잭션이 없더라도 롤백 세그먼트의 상태가 ONLINE이라면 Oracle은 여전히 해당 테이블스페이스를 보호합니다. 따라서 테이블스페이스 작업 전에 반드시 포함된 롤백 세그먼트를 OFFLINE 상태로 변경해야 합니다.
3. init.ora 또는 spfile의 ROLLBACK_SEGMENTS 파라미터에 해당 세그먼트가 명시되어 있는 경우
ROLLBACK_SEGMENTS 파라미터에 특정 롤백 세그먼트가 등록되어 있으면, 인스턴스가 시작될 때 Oracle이 자동으로 해당 세그먼트를 ONLINE 상태로 올립니다. 이 파라미터에서 해당 세그먼트를 제거하지 않으면, 재기동 후에도 동일한 문제가 반복됩니다. 파라미터 파일의 설정을 먼저 수정한 후 데이터베이스를 재시작해야 완전한 해결이 가능합니다.
해결 방법
Step 1. 문제의 롤백 세그먼트 확인
먼저 해당 테이블스페이스에 어떤 롤백 세그먼트가 존재하는지, 그리고 현재 상태를 확인합니다.
-- 특정 테이블스페이스에 속한 롤백 세그먼트 조회
SELECT segment_name, tablespace_name, status
FROM dba_rollback_segs
WHERE tablespace_name = 'YOUR_TABLESPACE_NAME';
-- 현재 활성 롤백 세그먼트 및 사용 중인 트랜잭션 확인
SELECT r.name AS rollback_segment,
r.status,
t.used_ublk AS used_blocks,
s.username,
s.sid,
s.serial#
FROM v$rollstat rs,
v$rollname r,
v$transaction t,
v$session s
WHERE r.usn = rs.usn
AND t.xidusn = r.usn
AND s.taddr = t.addr(+)
ORDER BY r.name;
Step 2. 활성 트랜잭션 종료 (필요 시 강제 종료)
정상적인 방법으로는 해당 세션에서 트랜잭션을 커밋 또는 롤백하도록 유도합니다. 운영 상황이 긴박하다면 DBA 권한으로 세션을 강제 종료할 수 있습니다.
-- 특정 세션 강제 종료 (sid, serial# 는 위 쿼리에서 확인)
ALTER SYSTEM KILL SESSION '123,456' IMMEDIATE;
-- 세션 종료 확인
SELECT sid, serial#, status, username
FROM v$session
WHERE sid = 123;
Step 3. 롤백 세그먼트를 OFFLINE으로 변경
활성 트랜잭션이 정리되었다면, 해당 롤백 세그먼트를 OFFLINE으로 전환합니다.
-- 롤백 세그먼트 오프라인 전환
ALTER ROLLBACK SEGMENT rbs_name OFFLINE;
-- 상태 확인
SELECT segment_name, status
FROM dba_rollback_segs
WHERE segment_name = 'RBS_NAME';
Step 4. 테이블스페이스 오프라인 또는 삭제 진행
롤백 세그먼트가 OFFLINE 상태로 전환된 후, 원래 목적인 테이블스페이스 작업을 수행합니다.
-- 테이블스페이스 오프라인 전환
ALTER TABLESPACE your_tablespace_name OFFLINE;
-- 또는 테이블스페이스 삭제 (데이터 파일 포함)
DROP TABLESPACE your_tablespace_name
INCLUDING CONTENTS AND DATAFILES
CASCADE CONSTRAINTS;
Step 5. init.ora / spfile에서 ROLLBACK_SEGMENTS 파라미터 제거
-- spfile 사용 시 파라미터 제거
ALTER SYSTEM RESET rollback_segments SCOPE=SPFILE;
-- pfile 사용 시 직접 init.ora 파일에서 해당 항목 제거 후
-- 데이터베이스 재기동 필요
-- 파라미터 현재 값 확인
SHOW PARAMETER rollback_segments;
예방 방법
1. Oracle 10g 이상 환경에서는 자동 언두 관리(AUM) 방식으로 전환하라
Oracle 9i 이후부터 권장되는 자동 언두 관리(Automatic Undo Management) 방식을 사용하면 수동 롤백 세그먼트를 직접 관리할 필요가 없어져 ORA-01546 에러의 근본적인 발생 원인이 제거됩니다. UNDO_MANAGEMENT = AUTO 파라미터와 전용 언두 테이블스페이스를 구성하면 Oracle이 언두 데이터를 자동으로 관리하므로, 수동 롤백 세그먼트와 관련된 장애를 원천 차단할 수 있습니다.
-- 자동 언두 관리 설정 확인
SHOW PARAMETER undo_management;
SHOW PARAMETER undo_tablespace;
-- 언두 테이블스페이스 상태 확인
SELECT tablespace_name, status
FROM dba_tablespaces
WHERE contents = 'UNDO';
2. 테이블스페이스 변경 작업 전 반드시 사전 점검 스크립트를 실행하라
테이블스페이스를 오프라인으로 전환하거나 삭제하기 전에 항상 해당 테이블스페이스에 활성 롤백 세그먼트나 진행 중인 트랜잭션이 없는지 점검하는 습관을 들여야 합니다. 이를 운영 절차(SOP)로 표준화하면 실수로 인한 장애를 예방할 수 있습니다.
-- 테이블스페이스 작업 전 사전 점검 쿼리
SELECT rbs.segment_name,
rbs.status,
NVL(s.username, 'NO ACTIVE SESSION') AS active_user,
NVL(TO_CHAR(s.sid), '-') AS sid
FROM dba_rollback_segs rbs
LEFT JOIN v$transaction t ON rbs.segment_name = (
SELECT r2.name FROM v$rollname r2 WHERE r2.usn = t.xidusn)
LEFT JOIN v$session s ON s.taddr = t.addr
WHERE rbs.tablespace_name = 'YOUR_TABLESPACE_NAME';
관련 에러
- ORA-01545: 롤백 세그먼트를 지정했으나 사용할 수 없는 경우 발생하며, ORA-01546과 함께 롤백 세그먼트 관리 문제 시 자주 동반됩니다.
- ORA-30036: 자동 언두 관리(AUM) 환경에서 언두 테이블스페이스의 공간이 부족할 때 발생하는 에러로, 언두 관련 공간 문제의 대표적인 에러입니다.
- ORA-01552: 시스템 롤백 세그먼트를 비시스템 테이블스페이스에서 사용할 수 없을 때 발생하며, 언두 세그먼트 구성 이슈와 연관됩니다.
- ORA-00376: 오프라인 데이터 파일을 읽으려 할 때 발생하는 에러로, 테이블스페이스 오프라인 작업 중 연쇄적으로 나타날 수 있습니다.
주요 DBMS error code를 정리하는 시리즈입니다.
블로그 홈에서 다른 에러도 확인하세요.
본 포스트는 AI가 생성한 기술 가이드입니다. 운영 환경 적용 전 충분한 검토를 권장합니다.