문서유형ㅣ기술정보
분야ㅣ관리/환경설정
적용제품버전ㅣTibero 7.2.4.
문서번호ㅣTADTI143
개요
본 문서는 Tibero 에서 Undo Tablespace 교체 방법에 대해 기술하였습니다.
테스트 환경
- DB : Tibero 7 (DB 7.2.4)
- OS : Rocky Linux 9.6
※ 해당 테스트 문서는 T7 기준으로 T6의 경우 별도 작업이 필요합니다.
방법
Undo Tablespace
1.1 정의
DML 수행시 원본데이터를 Undo Data라 하며 이를 저장하는 Segment를 Undo Segment라고 합니다.
Undo Segment들을 저장하고 관리하는 Tablespace가 Undo Tablespace 입니다.
1.2 목적
- TX Rollback : 진행했던 TX를 Rollback 처리하기 위해 사용됩니다.
- 읽기 일관성 : CR 블럭을 생성하여 TX가 끝나지 않은 데이터는 변경전 데이터로 접근합니다.
2. Undo Tablespace 변경 테스트
1. 임시 Undo Tablespace 생성
SQL> create undo tablespace new_undo datafile 'new_undo001.dtf' size 1G;
Tablespace 'NEW_UNDO' created.
2. Undo 파라미터 변경 교체
SQL> alter system set UNDO_TABLESPACE = NEW_UNDO
System altered.
※ TAC 경우 각 Node에서 변경 / 추후 재기동시 변경 유지를 위해 환경파일(tip file) 파라미터 수정
3. Undo Tablespace 변경 확인
SQL> select name,value from sys._vt_parameter where name='UNDO_TABLESPACE';
NAME VALUE
------------------------------ --------------------------------------------------
UNDO_TABLESPACE UNDO0
4. Undo Tablespace 삭제
4-1. undo tablespace ts id 조회
SQL> select ts#, name from v$tablespace;
TS# NAME
---------- ------------------------------
0 SYSTEM
1 UNDO0
2 TEMP
3 USR
4 SYSSUB
5 NEW_UNDO
4-2. undo segment 상태 조회
SQL> select a.name, a.ts#, b.status from v$tablespace a, vt_usgmt_cache b
where a.ts# = b.ts_id and a.name in ('UNDO0','NEW_UNDO');
NAME TS# STATUS
------------------------------ ---------- ----------
UNDO0 1 1
UNDO0 1 1
UNDO0 1 1
UNDO0 1 1
UNDO0 1 1
UNDO0 1 1
UNDO0 1 1
UNDO0 1 1
UNDO0 1 1
UNDO0 1 1
UNDO0 1 1
NEW_UNDO 5 0
NEW_UNDO 5 0
NEW_UNDO 5 0
NEW_UNDO 5 0
NEW_UNDO 5 0
NEW_UNDO 5 0
NEW_UNDO 5 0
NEW_UNDO 5 0
NEW_UNDO 5 0
NEW_UNDO 5 0
NEW_UNDO 5 0
4.3. drop Undo Tablespace
※ 위의 status 상태가 offline(1)로 확인 되었을 시 수행
SQL> drop tablespace undo0 including contents and datafiles;
Tablespace 'UNDO1' dropped
※ undo_retention 시간 확인 필요, retention 시간 이후 offline 삭제 가능
3. Undo Tablespace 변경 시 유의 사항
3.1. TAC 경우 각 노드의 Undo를 대상으로 진행해야 합니다.
- 1번 노드의 Undo가 Undo1, 2번 노드의 Undo가 Undo2일 경우 1번 노드는 Undo1을 대상으로 교체를 진행하며 2번 노드는 Undo2를 대상으로 교체를 진행해야 합니다.
- 이 때 생성하는 임시 Undo의 수도 노드의 수에 맞게 생성해야 합니다.
3.2 삭제 대상이 되는 Undo Tablespace의 segment를 사용하고 있지 않아야 합니다.
사용 유무를 알 수 있는 SQL은 아래와 같습니다.
SELECT vs.sid, vs.serial#, dr.segment_id, DECODE(vst.command_type, 1, 'SELECT' , 2, 'INSERT' , 3, 'UPDATE' , 4, 'DELETE' , 5, 'CALL', 0) "SQL Type", --vst.sql_id, vst.sql_id || '/' || vst.child_number "SQL_ID", dr.tablespace_name, vt.used_blk, vr.curext, vr.cursize, vr.xacts FROM dba_rollback_segs dr, v$rollstat vr, v$transaction vt, v$session vs, (select distinct command_type, sql_id, child_number from v$sqltext) vst WHERE dr.segment_id=vr.usn and vr.usn=vt.usn and vt.sess_id=vs.sid and nvl(vs.sql_id, vs.prev_sql_id)=vst.sql_id and nvl2(vs.sql_id, vs.sql_child_number, vs.prev_child_number)=vst.child_number;
3.3 Undo Retention이 지난 후 삭제할 대상 Undo Tablespace 드랍해야 합니다.
Undo Retention 값 확인 방법 (단위. 초)
SQL> show param undo_retention NAME TYPE VALUE ---------------------------------------------------- -------- ------------- UNDO_RETENTION INT32 900
Undo usgmt 상태 확인 방법
# status 0: Online, 1:Offline, 2: Offline pending, 3: Dropped
select us_no, status from sys._dd_usgmt where ts_id=1 union all
select us_no,status from vt_usgmt_cache where ts_id=1;
US_NO STATUS
---------- ----------
1 1
2 1
3 1
4 1
5 1
6 1
7 1
8 1
9 1
10 1
11 1
1 1
2 1
3 1
4 1
5 1
6 1
7 1
8 1
9 1
10 1
11 1
3.4 변경 방법 미준수 시 발생 가능 에러
3.4.1 Undo Segment 사용 중일 경우
Unable to drop active undo tablespace. 오류가 발생합니다.
3.4.2 Undo Retention 시간이 지나지 않았을 경우
TBR-7218: Unable to drop active undo tablespace. 오류가 발생합니다.