2026. 9. 4. 16:43 오라클
local undo Enabled 시 Undo Tablespace 가 UNDO_2 로 생성되는 현상
RAC를 신규구성 완료후 Check 중 PDB 구조에서 UNDO Tablespace 가 이상하게 생성되어 있는 것이 확인 되었다.
그냥 써도 되지만 이름과 화일명이 왠지 불편하다..
PDB1 SYSAUX /oradata/CDB/PDB1/sysaux01.dbf 240,640 63,872 73.5%
PDB1 SYSTEM /oradata/CDB/PDB1/system01.dbf 307,200 4,992 98.4%
PDB1 UNDOTBS1 /oradata/CDB/PDB1/undotbs01.dbf 250,880 5,120 98.0%
PDB1 UNDO_4 /oradata/CDB/PDB1/system01_i4_undo.dbf 97,664 94,848 2.9%
PDB1 USERS /oradata/CDB/PDB1/users01.dbf 7,168 960 86.6%
- local undo-enabled 가 설정된 RAC 환경에서 Node2 의 PDB 내의 UNDO tablespace 가 UNDO_2 로 생성되는 현상이다. (나의 경우에는 2node 임에도 UNDO_4 로 생성됨)
- 현재 product 기능으로는 정상적인 operation 이며 UNDOTBS2 라는 올바른 이름으로 자동생성될수 있게 Enhancement 가 요청된 상태라고 한다.
- 일종의 Bug 로 보이는데 Bug 로 인정하지는 않는 듯 하다.
환경 : 23.26.3.0.0
- 증상
1. undo local mode 를 확인한다.
column PROPERTY_NAME format a40
column PROPERTY_VALUE format a30
SELECT PROPERTY_NAME, PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME = 'LOCAL_UNDO_ENABLED';
PROPERTY_NAME PROPERTY_VALUE
---------------------------------------- ------------------------------
LOCAL_UNDO_ENABLED TRUE
2. pdb 를 확인한다.
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB1 READ WRITE NO
3. 1번 노드에서 UNDO 확인
set linesize 200
column VALUE format a30
select NAME,VALUE,CON_ID from V$SYSTEM_PARAMETER where NAME = 'undo_tablespace';
NAME VALUE CON_ID
-------------------------------------------------------------------------------- ------------------------------ ----------
undo_tablespace UNDOTBS1 0
undo_tablespace 2
undo_tablespace UNDO_4 3 <--- 생뚱맞게 UNDO_4 로 셋팅되어 있다.
4. 2번 노드에서 UNDO 확인
set linesize 200
column VALUE format a30
select NAME,VALUE,CON_ID from V$SYSTEM_PARAMETER where NAME = 'undo_tablespace';
NAME VALUE CON_ID
-------------------------------------------------------------------------------- ------------------------------ ----------
undo_tablespace UNDOTBS2 0
undo_tablespace 2
undo_tablespace UNDOTBS1 3 <--- 얘는 UNDOTBS2 이여야 하는데 UNDOTBS1 로 셋팅되어 있다.
- 정상화 작업
1. 현재 UNDO Tablespace 확인
SQL> alter session set container=PDB1;
Session altered.
SQL> show parameter undo_tablespace
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_tablespace string UNDO_4
2. 새로운 이름으로 UNDO tablespace 를 생성해 준다.
SQL> create UNDO TABLESPACE UNDOTBS2 datafile '/oradata/CDB/PDB1/undotbs02.dbf' size 10M autoextend on;
Tablespace created.
생성이 잘 되었는지 확인
SQL> SELECT * FROM DBA_DATA_FILES;
FILE_NAME FILE_ID TABLESPACE_NAME BYTES BLOCKS STATUS RELATIVE_FNO AUT MAXBYTES MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS ONLINE_ LOST_WR
---------------------------------------- ---------- --------------- ---------- ---------- --------- ------------ --- ---------- ---------- ------------ ---------- ----------- ------- -------
/oradata/CDB/PDB1/system01.dbf 9 SYSTEM 314572800 38400 AVAILABLE 1024 YES 3.5184E+13 4294967293 1280 313524224 38272 SYSTEM OFF
/oradata/CDB/PDB1/sysaux01.dbf 10 SYSAUX 246415360 30080 AVAILABLE 1024 YES 3.5184E+13 4294967293 1280 240091136 29308 ONLINE OFF
/oradata/CDB/PDB1/undotbs01.dbf 11 UNDOTBS1 256901120 31360 AVAILABLE 6 YES 3.4360E+10 4194302 640 255852544 31232 ONLINE OFF
/oradata/CDB/PDB1/system01_i4_undo.dbf 12 UNDO_4 100007936 12208 AVAILABLE 12 YES 3.4360E+10 4194302 640 98959360 12080 ONLINE OFF
/oradata/CDB/PDB1/users01.dbf 13 USERS 7340032 896 AVAILABLE 1024 YES 3.5184E+13 4294967293 160 1015808 124 ONLINE OFF
/oradata/CDB/PDB1/undotbs02.dbf 14 UNDOTBS2 10485760 1280 AVAILABLE 1024 YES 3.5184E+13 4294967293 1 9437184 1152 ONLINE OFF
6 rows selected.
3. UNDO Tablespace 를 바꿔준다.
SQL> alter system set undo_tablespace=UNDOTBS1 container=current sid='CDB1' scope=spfile; (1번노드에서)
SQL> alter system set undo_tablespace=UNDOTBS2 container=current sid='CDB2' scope=spfile; (2번노드에서)
System altered.
4. 재기동 (1.2번 모두)
SQL> shutdown
Pluggable Database closed.
SQL> startup
Pluggable Database opened.
5. UNDO_4 Segment 가 모두 사라졌는지 확인해 준다.
SQL> select dr.tablespace_name, dr.segment_name, vr.status from dba_rollback_segs dr, v$rollstat vr where dr.segment_id=vr.usn;
TABLESPACE_NAME SEGMENT_NAME STATUS
--------------- ------------------------------ ---------------
SYSTEM SYSTEM ONLINE
UNDOTBS1 _SYSSMU1_1573790497$ ONLINE
UNDOTBS1 _SYSSMU2_971013227$ ONLINE
UNDOTBS1 _SYSSMU3_3502236436$ ONLINE
UNDOTBS1 _SYSSMU4_3322552541$ ONLINE
UNDOTBS1 _SYSSMU5_100379797$ ONLINE
UNDOTBS1 _SYSSMU6_211076933$ ONLINE
UNDOTBS1 _SYSSMU7_2708109441$ ONLINE
UNDOTBS1 _SYSSMU8_3680568534$ ONLINE
UNDOTBS1 _SYSSMU9_4115705703$ ONLINE
UNDOTBS1 _SYSSMU10_1726320278$ ONLINE
6. UNDO_4 Tablespace 를 삭제해 준다.
SQL> drop tablespace UNDO_4 including contents and datafiles;
확인
SQL> SELECT * FROM DBA_DATA_FILES;
FILE_NAME FILE_ID TABLESPACE_NAME BYTES BLOCKS STATUS RELATIVE_FNO AUT MAXBYTES MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS ONLINE_ LOST_WR
---------------------------------------- ---------- --------------- ---------- ---------- --------- ------------ --- ---------- ---------- ------------ ---------- ----------- ------- -------
/oradata/CDB/PDB1/system01.dbf 9 SYSTEM 314572800 38400 AVAILABLE 1024 YES 3.5184E+13 4294967293 1280 313524224 38272 SYSTEM OFF
/oradata/CDB/PDB1/sysaux01.dbf 10 SYSAUX 246415360 30080 AVAILABLE 1024 YES 3.5184E+13 4294967293 1280 240091136 29308 ONLINE OFF
/oradata/CDB/PDB1/undotbs01.dbf 11 UNDOTBS1 256901120 31360 AVAILABLE 6 YES 3.4360E+10 4194302 640 255852544 31232 ONLINE OFF
/oradata/CDB/PDB1/users01.dbf 13 USERS 7340032 896 AVAILABLE 1024 YES 3.5184E+13 4294967293 160 1015808 124 ONLINE OFF
/oradata/CDB/PDB1/undotbs02.dbf 14 UNDOTBS2 10485760 1280 AVAILABLE 1024 YES 3.5184E+13 4294967293 1 9437184 1152 ONLINE OFF
깔끔해 졌다.
끝.




