ORACLE UNDO Tablespace 교체

대용량 작업을 하다보던 UNDO 테이블 스페이스가 디스크에서 차지하는 용량이 너무 커져서 작업에 지장이 생기는 상황이 발생하기도 합니다. 이 경우, 테이블 스페이스 파일 자체의 용량이 확장되는 것이기 때문에 테이블 스페이스의 내부를 비워줘도 파일의 용량은 줄어들지 않습니다. 이는 테이블 스페이스 파일 자체를 교체함으로써 해결할 수 있습니다.

UNDO 테이블 스페이스란 데이터베이스의 변경사항을 롤백하기 위한 정보를 저장하는 영역입니다. 주로 커밋되기 전의 트랜잭션 처리 레코드로 구성되기 때문에 트랜잭션이 커밋되기 전까지의 내용이 보관됩니다. UNDO 테이블 스페이스는 보통 UNDOTBS1라는 이름으로 생성되어 있습니다.

과정

우선 데이터베이스를 셧다운 시켜줍니다. 아래의 커맨드를 입력하면 immediate 옵션에 의해 실행 중인 SQL문장을 중지하고, 실행 중인 트랜잭션이 있으면 RollBack, 사용자의 새로운 로그인을 막고 DB에 변경된 사항을 데이터파일에 기록하고 DB를 종료합니다. 참고로 접속 중인 사용자들이 로그아웃 할 때까지 기다리지 않기 때문에 세션이 여러 개인 경우에는 주의가 필요합니다.

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

재기동하여 컨트롤 파일을 읽고 데이터베이스를 마운트(데이터 파일 이름 변경, 아카이브 로그 모드 변경, 데이터베이스 복구 등)합니다.

SQL> startup mount;
ORACLE instance started.
Total System Global Area 3221223224 bytes
Fixed Size 9033528 bytes
Variable Size 1023410176 bytes
Database Buffers 2181038080 bytes
Redo Buffers 7741440 bytes
Database mounted.

데이터베이스를 오픈해줍니다.

SQL> alter database open;
Database altered.

아래 커맨드처럼 이름, 저장할 장소와 사이즈를 지정하여 새 테이블 스페이스를 작성합니다.

SQL> CREATE UNDO TABLESPACE UNDOTBS1 DATAFILE C:\APP\ORACLE\ORADATA\UNDOTBS01.DBF' SIZE 1024M /
Tablespace created.

현재 사용 대상으로 설정되어있는 테이블 스페이스를 새 테이블 스페이스로 변경합니다.

SQL> ALTER SYSTEM SET UNDO_TABLESPACE = UNDOTBS1;
System altered.

기존 테이블 스페이스를 파일까지 함께 삭제하기 위해 아래의 커맨드를 사용합니다.

SQL> DROP TABLESPACE UNDOTBS2 INCLUDING CONTENTS AND DATAFILES;
Tablespace dropped.

데이터베이스를 다시 재기동 시켜줍니다.

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 3221223224 bytes
Fixed Size 9033528 bytes
Variable Size 1023410176 bytes
Database Buffers 2181038080 bytes
Redo Buffers 7741440 bytes
Database mounted.
SQL> alter database open;
Database altered.

댓글

제목과 URL을 복사했습니다