UNDO 테이블스페이스 데이터파일의 크기를 줄일수 없어 TBS 를 재지정

개념

undo & redo

REDO : 오래된 데이터를 최신 데이터로 만들기 위해 존재 (읽기 일관성을 위해 언두사용)
UNDO : 최신데이터를 오래된 데이터로 만들기 위해 존재

  • ORA-1555 발생시 undo_retention 이나 언두 TBS 크기의 튜닝을 검토
  • 장비에 장애가 발생하거나 인스턴스가 비정상 종료했을떄는, 리두와 언두를 사용해 데이터를 복구하고 커밋하지 않은 데이터의 롤백을 수행

undo Table 관리

  • Undo Data가 늘어나도 늘어난 데이터파일의 크기를 줄일 수는 없다. Commit을 수행해도 Undo Segment안에 Undo Data는 지워지지 않고 남아있기 때문.
  • Commit 수행 시 다른 서버 프로세스가 덮어 쓸 수 있게 해주는 것일 뿐 Undo Segment 안의 자료를 지우는것은 아니다.
  • Undo Tablespace 크기가 비정상적으로 클 경우에는 관리자가 다른 작은 Undo Tablespace를 신규로 만들고, Undo Tablespace를 신규 Undo Tablespace로 변경시킨 후 기존 Undo Tablespace를 삭제해 주어야한다.

이하 작업내용 기술


작업내용

1. TBS정보(이름, 데이터파일의 경로) 확인

  • tbAdmin을 통해서는 확인할 수 없어 콘솔접근 필요
[... _tibero ~]$ tbsql

SQL> conn SYS/tibero 

Connected to Tibero.

# 1) 테이블 스페이스 이름 확인 
SQL > show parameter undo;

# NAME                             TYPE            VALUE
# ------------------------------------------------------ 
# UNDO_RETENTION            INT32         900
# UNDO_TABLESPACE             STRING        UNDO 

# → 현재 테이블 스페이스의 이름은 `UNDO`  
# → 현재 UNDO 데이타 보유기간은 900초   



# 2) 테이블 스페이스 상태 확인 
SQL > SELECT 
                TS_ID, DATAFILE_COUNT, TABLESPACE_NAME, STATUS, 
                CONTENTS --, EXTENT_MANAGEMENT, SEGMENT_SPACE_MANAGEMENT 
            FROM 
               DBA_TABLESPACES
            WHERE 1=1
            AND TABLESPACE_NAME = 'UNDO';

#    TS_ID        DATAFILE_COUNT    TABLESPACE_NAME    STATUS    CONTENTS     
#    1        1    UNDO    ONLINE        UNDO     

# → 현재 테이블 스페이스는 `ONLINE` 상태 (데이터 테이블스페이스라면 핫백업 필요)



# 3) 테이블 스페이스 용량 확인 
SQL > SELECT DISTINCT 
                STATUS, SUM(BYTES)/(1024*1024) MB, COUNT(*) 
             FROM DBA_UNDO_EXTENTS 
             GROUP BY STATUS;

#    STATUS           MB                COUNT(*)
#    Expired          11.984375                3
#    Unexpired     991.8515625           248



# 4) 테이블 스페이스 데이터파일의 경로 확인 
SQL > SELECT FILE_NAME,    FILE_ID,    TABLESPACE_NAME,    BYTES
            FROM DBA_DATA_FILES 
            WHERE 1=1
            AND TABLESPACE_NAME = 'UNDO';

# FILE_NAME        FILE_ID        TABLESPACE_NAME    BYTES                 
# ------------------------------------------------------ 
#    /home/jeus/Tibero/tibero5/database/tibero/undo_001.dbf    1    UNDO    1048576000    
  • 테이블스페이스 이름/용량/상태 : UNDO / 1G / ONLINE
  • 데이터파일경로 : /home/jeus/Tibero/tibero5/database/tibero/undo_001.dbf

2. 신규 TBS 생성

# 1) 신규 TBS 생성 
SQL> create undo tablespace UNDO_02
      datafile '/home/jeus/Tibero/tibero5/database/tibero/undo_002.dbf' size 100M
      autoextend on;

Tablespace 'UNDO_02' created.


# 2) 생성된 TBS 의 이름 및 데이터파일 경로 확인 
SQL > SELECT * FROM DBA_TABLESPACES 
            WHERE 1=1
            AND TABLESPACE_NAME = 'UNDO_02';

SQL > SELECT FILE_NAME,    FILE_ID,    TABLESPACE_NAME,    BYTES
            FROM DBA_DATA_FILES 
            WHERE 1=1
            AND TABLESPACE_NAME = 'UNDO_02';

# FILE_NAME        FILE_ID        TABLESPACE_NAME    BYTES                 
# ------------------------------------------------------ 
#    /home/jeus/Tibero/tibero5/database/tibero/undo_002.dbf    1    UNDO_02       -

3. 교체, 변경내역 확인

SQL > alter system set undo_tablespace=UNDO_02;

System altered.

SQL > show parameter undo;

# NAME                                         TYPE            VALUE
# ------------------------------------------------------ 
# UNDO_RETENTION                INT32         900
# UNDO_TABLESPACE             STRING        UNDO 

SQL > quit();

4. DBMS 재기동

[... _tibero ~]$ ps -ef|grep tb  # 프로세스 확인
[... _tibero ~]$ tbdown 
  Select action : 1, 2 (Wait, Immediately)

  Tibero instance terminated.

[... _tibero ~]$ ps -ef|grep tb  # 프로세스 종료 확인  
[... _tibero ~]$ tbboot

  Tibero instance started up.

[... _tibero ~]$ tbsql

SQL> conn SYS/tibero 

Connected to Tibero.

SQL > show parameter undo;  

# NAME                                         TYPE            VALUE
# ------------------------------------------------------ 
# UNDO_RETENTION                INT32         900
# UNDO_TABLESPACE             STRING        UNDO_02         <<< 변경확인 완료

5. 이전 UNDO TBS 삭제

# 전체 테이블 스페이스 확인 
SQL > SELECT 
                TS_ID, DATAFILE_COUNT, TABLESPACE_NAME, STATUS, 
                CONTENTS --, EXTENT_MANAGEMENT, SEGMENT_SPACE_MANAGEMENT 
            FROM 
               DBA_TABLESPACES
            WHERE 1=1

# 삭제
SQL > drop tablespace UNDO;

    Tablespace 'UNDO' dropped.

※ 단, DBMS 논리 단위에서 UNDO TBS를 삭제한 것이므로 경로상 남아있는 데이터파일은 직접삭제가 필요함

  • 경로 : /home/jeus/Tibero/tibero5/database/tibero/undo_001.dbf

참고자료

(매뉴얼) Appendix F. Undo 테이블 스페이스 크기 산정

반응형

BELATED ARTICLES (관련글)

more