DevJoy 2025. 12. 18. 18:27

시나리오 8 : undo datafile 손상(백업 이후 리두 정보 존재, 완전 복구)

현재 체크포인트 확인

SYS@ora19c> select checkpoint_change#, scn_to_timestamp(checkpoint_change#) from v$database;

CHECKPOINT_CHANGE# SCN_TO_TIMESTAMP(CHECKPOINT_CHANGE#)
------------------ ---------------------------------------------------------------------------
           2848149 16-DEC-25 04.45.54.000000000 PM

SYS@ora19c> select a.file#, b.name tbs_name, a.name file_name, a.checkpoint_change#, a.status
from v$datafile a, v$tablespace b
where a.ts# = b.ts#;  2    3

     FILE# TBS_NAME                       FILE_NAME                                          CHECKPOINT_CHANGE# STATUS
---------- ------------------------------ -------------------------------------------------- ------------------ -------
         3 SYSAUX                         /u01/app/oracle/oradata/ORA19C/sysaux01.dbf                   2848149 ONLINE
         1 SYSTEM                         /u01/app/oracle/oradata/ORA19C/system01.dbf                   2848149 SYSTEM
         4 UNDOTBS1                       /u01/app/oracle/oradata/ORA19C/undotbs01.dbf                  2848149 ONLINE
         7 USERS                          /u01/app/oracle/oradata/ORA19C/users01.dbf                    2848149 ONLINE

SYS@ora19c> select a.group#, a.sequence#, b.member, a.bytes/1024/1024 mb, a.status, a.first_change#, a.next_change#
from v$log a, v$logfile b
where a.group# = b.group#;  2    3

    GROUP#  SEQUENCE# MEMBER                                                     MB STATUS           FIRST_CHANGE# NEXT_CHANGE#
---------- ---------- -------------------------------------------------- ---------- ---------------- ------------- ------------
         3         28 /u01/app/oracle/oradata/ORA19C/redo03.log                  50 ACTIVE                 2822872  2850368
         2         27 /u01/app/oracle/oradata/ORA19C/redo02.log                  50 INACTIVE               2797846  2822872
         1         29 /u01/app/oracle/oradata/ORA19C/redo01.log                  50 CURRENT                2850368   1.8447E+19

undo 세그먼트 조회

# Undo(롤백) 세그먼트의 메타데이터와 현재 상태를 조회하는 쿼리
SYS@ora19c> select segment_id, segment_name, owner, tablespace_name, status from dba_rollback_segs;

SEGMENT_ID SEGMENT_NAME                   OWNER                          TABLESPACE_NAME                STATUS
---------- ------------------------------ ------------------------------ ------------------------------ ----------------
         0 SYSTEM                         SYS                            SYSTEM                         ONLINE
         1 _SYSSMU1_1261223759$           PUBLIC                         UNDOTBS1                       ONLINE
         2 _SYSSMU2_27624015$             PUBLIC                         UNDOTBS1                       ONLINE
         3 _SYSSMU3_2421748942$           PUBLIC                         UNDOTBS1                       ONLINE
         4 _SYSSMU4_625702278$            PUBLIC                         UNDOTBS1                       ONLINE
         5 _SYSSMU5_2101348960$           PUBLIC                         UNDOTBS1                       ONLINE
         6 _SYSSMU6_813816332$            PUBLIC                         UNDOTBS1                       ONLINE
         7 _SYSSMU7_2329891355$           PUBLIC                         UNDOTBS1                       ONLINE
         8 _SYSSMU8_399776867$            PUBLIC                         UNDOTBS1                       ONLINE
         9 _SYSSMU9_1692468413$           PUBLIC                         UNDOTBS1                       ONLINE
        10 _SYSSMU10_930580995$           PUBLIC                         UNDOTBS1                       ONLINE

11 rows selected.

현재 트랜잭션이 진행 중인 세션 모니터링

# 현재 트랜잭션이 진행 중인 세션 모니터링
SYS@ora19c> select s.username, s.sid, s.serial#, r.name, t.ubafil, t.xidusn, t.ubablk, t.used_ublk
from v$session s, v$transaction t, v$rollname r
where s.taddr = t.addr
and t.xidusn = r.usn;  2    3    4

no rows selected
  • s.username : 트랜잭션을 수행 중인 사용자
  • s.sid : 세션 식별자
  • s.serial# : 세션 일련 번호
  • r.name : rollback segment name, 현재 트랜잭션이 사용중인 undo segment 이름
  • t.ubafil : undo block address file number, undo 블록이 저장된 데이터파일 번호
  • t.xidusn : transaction undo segment number, 트랜잭션이 사용하는 undo segment 번호
  • t.ubablk : undo block address block number, undo segment에서 첫 번째 undo 블록의 블록 번호
  • t.used_ublk : 현재 트랜잭션이 사용 중인 undo 블록 수

현재 트랜잭션이 진행 중인 세션 KILL

---------- <<HR>> ----------
HR@ora19c> select salary from hr.employees where employee_id = 200;

    SALARY
----------
      4400

-- 트랜잭션 발생
HR@ora19c> update hr.employees set salary = salary * 1.1 where employee_id = 200;

1 row updated.

HR@ora19c> select salary from hr.employees where employee_id = 200;

    SALARY
----------
      4840

---------- <<SYS>> ----------
-- 트랜잭션 수행 중인 세션 조회
SYS@ora19c> select s.username, s.sid, s.serial#, r.name, t.ubafil, t.xidusn, t.ubablk, t.used_ublk
from v$session s, v$transaction t, v$rollname r
where s.taddr = t.addr
and t.xidusn = r.usn;  2    3    4

USERNAME                              SID    SERIAL# NAME                                                   UBAFIL     XIDUSN          UBABLK  USED_UBLK
------------------------------ ---------- ---------- -------------------------------------------------- ---------- ---------- ---------- ----------
HR                                     19      18134 _SYSSMU7_2329891355$                                        4      7        1407          1

-- 해당 세션 kill
SYS@ora19c> alter system kill session '19,18134' immediate;

System altered.

SYS@ora19c> select s.username, s.sid, s.serial#, r.name, t.ubafil, t.xidusn, t.ubablk, t.used_ublk
from v$session s, v$transaction t, v$rollname r
where s.taddr = t.addr
and t.xidusn = r.usn;  2    3    4

no rows selected

-- hr 세션 끊김
---------- <<HR>> ----------
HR@ora19c> select salary from hr.employees where employee_id = 200;
select salary from hr.employees where employee_id = 200
*
ERROR at line 1:
ORA-03135: connection lost contact
Process ID: 4696
Session ID: 19 Serial number: 18134

트랜잭션 발생

---------- <<HR1>> ----------
HR@ora19c> conn hr/hr
Connected.
HR@ora19c> select salary from hr.employees where employee_id = 200;

    SALARY
----------
      4400

HR@ora19c> update hr.employees set salary = salary * 1.1 where employee_id = 200;

1 row updated.

HR@ora19c> select salary from hr.employees where employee_id = 200;

    SALARY
----------
      4840

---------- <<HR1>> ----------
HR@ora19c> conn hr/hr
Connected.
HR@ora19c> select salary from hr.employees where employee_id = 100;

    SALARY
----------
     24000

HR@ora19c> update hr.employees set salary = salary * 1.1 where employee_id = 100;

1 row updated.

HR@ora19c> select salary from hr.employees where employee_id = 100;

    SALARY
----------
     26400      

---------- <<SYS>> ----------
SYS@ora19c> select s.username, s.sid, s.serial#, r.name, t.ubafil, t.xidusn, t.ubablk, t.used_ublk
from v$session s, v$transaction t, v$rollname r
where s.taddr = t.addr
and t.xidusn = r.usn;  2    3    4

USERNAME                              SID    SERIAL# NAME                                                   UBAFIL     XIDUSN          UBABLK  USED_UBLK
------------------------------ ---------- ---------- -------------------------------------------------- ---------- ---------- ---------- ----------
HR                                    154      31592 _SYSSMU6_813816332$                                         4      6         210          1
HR                                    166      51191 _SYSSMU7_2329891355$                                        4      7         225          1

장애 유발

-- 장애 유발
SYS@ora19c> ! ls /u01/app/oracle/oradata/ORA19C/undotbs01.dbf
/u01/app/oracle/oradata/ORA19C/undotbs01.dbf

SYS@ora19c> ! rm /u01/app/oracle/oradata/ORA19C/undotbs01.dbf

SYS@ora19c> ! ls /u01/app/oracle/oradata/ORA19C/undotbs01.dbf
ls: cannot access /u01/app/oracle/oradata/ORA19C/undotbs01.dbf: No such file or directory

SYS@ora19c> select s.username, s.sid, s.serial#, r.name, t.ubafil, t.xidusn, t.ubablk, t.used_ublk
from v$session s, v$transaction t, v$rollname r
where s.taddr = t.addr
and t.xidusn = r.usn;  2    3    4

USERNAME                              SID    SERIAL# NAME                                                   UBAFIL     XIDUSN          UBABLK  USED_UBLK
------------------------------ ---------- ---------- -------------------------------------------------- ---------- ---------- ---------- ----------
HR                                    154      31592 _SYSSMU6_813816332$                                         4      6         210          1
HR                                    166      51191 _SYSSMU7_2329891355$                                        4      7         225          1

-- 체크 포인트 발생
SYS@ora19c> alter system checkpoint;

System altered.

-- 오류 발생할 수도 있고 안할 수도 있음
-- 오류가 발생하지 않으면 데이터베이스 재시작
SYS@ora19c> shutdown abort
ORACLE instance shut down.
SYS@ora19c> startup
ORACLE instance started.

Total System Global Area  830469472 bytes
Fixed Size                  8901984 bytes
Variable Size             553648128 bytes
Database Buffers          260046848 bytes
Redo Buffers                7872512 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 4 - see DBWR trace file
ORA-01110: data file 4: '/u01/app/oracle/oradata/ORA19C/undotbs01.dbf'

SYS@ora19c> select * from v$recover_file;

     FILE# ONLINE  ONLINE_ ERROR                             CHANGE# TIME          CON_ID
---------- ------- ------- ------------------------------ ---------- --------- ----------
         4 ONLINE  ONLINE  FILE NOT FOUND                          0                    0

SYS@ora19c> select status from v$instance;

STATUS
------------
MOUNTED         

undo datafile 복구

1. 백업 찾아서 restore

[oracle@ora19c ~]$ cd backup/noarch
[oracle@ora19c noarch]$ ls undotbs01.dbf
undotbs01.dbf
[oracle@ora19c noarch]$ cp -v undotbs01.dbf /u01/app/oracle/oradata/ORA19C/undotbs01.dbf
‘undotbs01.dbf’ -> ‘/u01/app/oracle/oradata/ORA19C/undotbs01.dbf’
[oracle@ora19c noarch]$ exit
exit

2. 백업 이후 리두 정보 적용

SYS@ora19c> recover datafile 4;
Media recovery complete.
  • recover datafile 4;
  • recover datafile '/u01/app/oracle/oradata/ORA19C/undotbs01.dbf'
  • recover tablespace undotbs1;

3. 데이터베이스 open

SYS@ora19c> alter database open;

Database altered.

시나리오 9 : undo datafile 손상(백업 이후 리두 정보 X, 불완전 복구)

현재 체크포인트 확인

SYS@ora19c> select checkpoint_change#, scn_to_timestamp(checkpoint_change#) from v$database;

CHECKPOINT_CHANGE# SCN_TO_TIMESTAMP(CHECKPOINT_CHANGE#)
------------------ ---------------------------------------------------------------------------
           2845590 15-DEC-25 04.00.14.000000000 PM

SYS@ora19c> select a.file#, b.name tbs_name, a.name file_name, a.checkpoint_change#, a.status
from v$datafile a, v$tablespace b
where a.ts# = b.ts#;  2    3

     FILE# TBS_NAME                       FILE_NAME                                          CHECKPOINT_CHANGE# STATUS
---------- ------------------------------ -------------------------------------------------- ------------------ -------
         3 SYSAUX                         /u01/app/oracle/oradata/ORA19C/sysaux01.dbf                   2845590 ONLINE
         1 SYSTEM                         /u01/app/oracle/oradata/ORA19C/system01.dbf                   2845590 SYSTEM
         4 UNDOTBS1                       /u01/app/oracle/oradata/ORA19C/undotbs01.dbf                  2845590 ONLINE
         7 USERS                          /u01/app/oracle/oradata/ORA19C/users01.dbf                    2845590 ONLINE

SYS@ora19c> select a.group#, a.sequence#, b.member, a.bytes/1024/1024 mb, a.status, a.first_change#, a.next_change#
from v$log a, v$logfile b
where a.group# = b.group#;  2    3

    GROUP#  SEQUENCE# MEMBER                                                     MB STATUS           FIRST_CHANGE# NEXT_CHANGE#
---------- ---------- -------------------------------------------------- ---------- ---------------- ------------- ------------
         3         28 /u01/app/oracle/oradata/ORA19C/redo03.log                  50 CURRENT                2822872   1.8447E+19
         2         27 /u01/app/oracle/oradata/ORA19C/redo02.log                  50 INACTIVE               2797846  2822872
         1         26 /u01/app/oracle/oradata/ORA19C/redo01.log                  50 INACTIVE               2767903  2797846

SYS@ora19c> select segment_id, segment_name, owner, tablespace_name, status from dba_rollback_segs;

SEGMENT_ID SEGMENT_NAME                   OWNER                          TABLESPACE_NAME                STATUS
---------- ------------------------------ ------------------------------ ------------------------------ ----------------
         0 SYSTEM                         SYS                            SYSTEM                         ONLINE
         1 _SYSSMU1_1261223759$           PUBLIC                         UNDOTBS1                       ONLINE
         2 _SYSSMU2_27624015$             PUBLIC                         UNDOTBS1                       ONLINE
         3 _SYSSMU3_2421748942$           PUBLIC                         UNDOTBS1                       ONLINE
         4 _SYSSMU4_625702278$            PUBLIC                         UNDOTBS1                       ONLINE
         5 _SYSSMU5_2101348960$           PUBLIC                         UNDOTBS1                       ONLINE
         6 _SYSSMU6_813816332$            PUBLIC                         UNDOTBS1                       ONLINE
         7 _SYSSMU7_2329891355$           PUBLIC                         UNDOTBS1                       ONLINE
         8 _SYSSMU8_399776867$            PUBLIC                         UNDOTBS1                       ONLINE
         9 _SYSSMU9_1692468413$           PUBLIC                         UNDOTBS1                       ONLINE
        10 _SYSSMU10_930580995$           PUBLIC                         UNDOTBS1                       ONLINE

11 rows selected.

SYS@ora19c> select s.username, s.sid, s.serial#, r.name, t.ubafil, t.xidusn, t.ubablk, t.used_ublk
from v$session s, v$transaction t, v$rollname r
where s.taddr = t.addr
and t.xidusn = r.usn;  2    3    4

no rows selected

트랜잭션 발생

---------- << HR >> ----------
HR@ora19c> select salary from hr.employees where employee_id = 200;

    SALARY
----------
      4400

HR@ora19c> update hr.employees set salary = salary * 1.1 where employee_id = 200;

1 row updated.

HR@ora19c> select salary from hr.employees where employee_id = 200;

    SALARY
----------
      4840

---------- << SYS >> ----------
SYS@ora19c> select s.username, s.sid, s.serial#, r.name, t.ubafil, t.xidusn, t.ubablk, t.used_ublk
from v$session s, v$transaction t, v$rollname r
where s.taddr = t.addr
and t.xidusn = r.usn;  2    3    4

USERNAME                              SID    SERIAL# NAME                                                   UBAFIL     XIDUSN          UBABLK  USED_UBLK
------------------------------ ---------- ---------- -------------------------------------------------- ---------- ---------- ---------- ----------
HR                                     28       7845 _SYSSMU3_2421748942$                                        4      3        1274          1

SYS@ora19c> select a.group#, a.sequence#, b.member, a.bytes/1024/1024 mb, a.status, a.first_change#, a.next_change#
from v$log a, v$logfile b
where a.group# = b.group#;  2    3

    GROUP#  SEQUENCE# MEMBER                                                     MB STATUS           FIRST_CHANGE# NEXT_CHANGE#
---------- ---------- -------------------------------------------------- ---------- ---------------- ------------- ------------
         3         28 /u01/app/oracle/oradata/ORA19C/redo03.log                  50 CURRENT                2822872   1.8447E+19
         2         27 /u01/app/oracle/oradata/ORA19C/redo02.log                  50 INACTIVE               2797846  2822872
         1         26 /u01/app/oracle/oradata/ORA19C/redo01.log                  50 INACTIVE               2767903  2797846

로그 스위치 발생

SYS@ora19c> alter system switch logfile;

System altered.

SYS@ora19c> /

System altered.

SYS@ora19c> /

System altered.

SYS@ora19c> select a.group#, a.sequence#, b.member, a.bytes/1024/1024 mb, a.status, a.first_change#, a.next_change#
from v$log a, v$logfile b
where a.group# = b.group#;  2    3

    GROUP#  SEQUENCE# MEMBER                                                     MB STATUS           FIRST_CHANGE# NEXT_CHANGE#
---------- ---------- -------------------------------------------------- ---------- ---------------- ------------- ------------
         3         31 /u01/app/oracle/oradata/ORA19C/redo03.log                  50 CURRENT                2846661   1.8447E+19
         2         30 /u01/app/oracle/oradata/ORA19C/redo02.log                  50 INACTIVE               2846658  2846661
         1         29 /u01/app/oracle/oradata/ORA19C/redo01.log                  50 INACTIVE               2846655  2846658

장애 유발

-- 장애 유발
SYS@ora19c> ! ls /u01/app/oracle/oradata/ORA19C/undotbs01.dbf
/u01/app/oracle/oradata/ORA19C/undotbs01.dbf

SYS@ora19c> ! rm /u01/app/oracle/oradata/ORA19C/undotbs01.dbf

SYS@ora19c> ! ls /u01/app/oracle/oradata/ORA19C/undotbs01.dbf
ls: cannot access /u01/app/oracle/oradata/ORA19C/undotbs01.dbf: No such file or directory

SYS@ora19c> select s.username, s.sid, s.serial#, r.name, t.ubafil, t.xidusn, t.ubablk, t.used_ublk
from v$session s, v$transaction t, v$rollname r
where s.taddr = t.addr
and t.xidusn = r.usn;  2    3    4

USERNAME                              SID    SERIAL# NAME                                                   UBAFIL     XIDUSN          UBABLK  USED_UBLK
------------------------------ ---------- ---------- -------------------------------------------------- ---------- ---------- ---------- ----------
HR                                     28       7845 _SYSSMU1_1261223759$                                        4      1        2251          1

---------- << HR >> ----------
-- undo datafile이 손상됐지만 트랜잭션 수행 가능
HR@ora19c> rollback;

Rollback complete.

HR@ora19c> select salary from hr.employees where employee_id = 150;

    SALARY
----------
     10000

HR@ora19c> update hr.employees set salary = salary * 1.1 where employee_id = 150;

1 row updated.

HR@ora19c> select salary from hr.employees where employee_id = 150;

    SALARY
----------
     11000

---------- << SYS >> ----------
-- 데이터베이스 재시작
SYS@ora19c> shutdown abort
ORACLE instance shut down.
SYS@ora19c> startup
ORACLE instance started.

Total System Global Area  830469472 bytes
Fixed Size                  8901984 bytes
Variable Size             553648128 bytes
Database Buffers          260046848 bytes
Redo Buffers                7872512 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 4 - see DBWR trace file
ORA-01110: data file 4: '/u01/app/oracle/oradata/ORA19C/undotbs01.dbf'

SYS@ora19c> select * from v$recover_file;

     FILE# ONLINE  ONLINE_ ERROR                             CHANGE# TIME          CON_ID
---------- ------- ------- ------------------------------ ---------- --------- ----------
         4 ONLINE  ONLINE  FILE NOT FOUND                          0                    0

완전 복구 시도 → 실패

SYS@ora19c> !

# 백업본 restore
[oracle@ora19c ~]$ cd backup/noarch
[oracle@ora19c noarch]$ ls undotbs01.dbf
undotbs01.dbf
[oracle@ora19c noarch]$ cp -v undotbs01.dbf /u01/app/oracle/oradata/ORA19C/undotbs01.dbf
‘undotbs01.dbf’ -> ‘/u01/app/oracle/oradata/ORA19C/undotbs01.dbf’
[oracle@ora19c noarch]$ exit
exit

# 백업 이후 리두 적용 실패
SYS@ora19c> recover datafile 4
ORA-00279: change 2845587 generated at 12/15/2025 16:00:17 needed for thread 1
ORA-00289: suggestion : /u01/app/oracle/fast_recovery_area/ORA19C/archivelog/2025_12_17/o1_mf_1_28_%u_.arc
ORA-00280: change 2845587 for thread 1 is in sequence #28

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00308: cannot open archived log '/u01/app/oracle/fast_recovery_area/ORA19C/archivelog/2025_12_17/o1_mf_1_28_%u_.arc'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 7

ORA-00308: cannot open archived log '/u01/app/oracle/fast_recovery_area/ORA19C/archivelog/2025_12_17/o1_mf_1_28_%u_.arc'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 7

불완전 복구

SYS@ora19c> shutdown abort
ORACLE instance shut down.
SYS@ora19c> !
[oracle@ora19c ~]$ cd backup/noarch
[oracle@ora19c noarch]$ cp -v * /u01/app/oracle/oradata/ORA19C/
‘control01.ctl’ -> ‘/u01/app/oracle/oradata/ORA19C/control01.ctl’
‘recover’ -> ‘/u01/app/oracle/oradata/ORA19C/recover’
‘redo01.log’ -> ‘/u01/app/oracle/oradata/ORA19C/redo01.log’
‘redo02.log’ -> ‘/u01/app/oracle/oradata/ORA19C/redo02.log’
‘redo03.log’ -> ‘/u01/app/oracle/oradata/ORA19C/redo03.log’
‘sysaux01.dbf’ -> ‘/u01/app/oracle/oradata/ORA19C/sysaux01.dbf’
‘system01.dbf’ -> ‘/u01/app/oracle/oradata/ORA19C/system01.dbf’
‘temp01.dbf’ -> ‘/u01/app/oracle/oradata/ORA19C/temp01.dbf’
‘undotbs01.dbf’ -> ‘/u01/app/oracle/oradata/ORA19C/undotbs01.dbf’
‘users01.dbf’ -> ‘/u01/app/oracle/oradata/ORA19C/users01.dbf’
[oracle@ora19c noarch]$ exit
exit

SYS@ora19c> startup
ORACLE instance started.

Total System Global Area  830469472 bytes
Fixed Size                  8901984 bytes
Variable Size             553648128 bytes
Database Buffers          260046848 bytes
Redo Buffers                7872512 bytes
Database mounted.
Database opened.

시나리오 10 - 1 : undo datafile 손상(백업 이후 리두 정보 X, 불완전 복구)

현재 상태 확인

SYS@ora19c> select checkpoint_change#, scn_to_timestamp(checkpoint_change#) from v$database;

CHECKPOINT_CHANGE# SCN_TO_TIMESTAMP(CHECKPOINT_CHANGE#)
------------------ ---------------------------------------------------------------------------
           2845590 15-DEC-25 04.00.14.000000000 PM

SYS@ora19c> select a.file#, b.name tbs_name, a.name file_name, a.checkpoint_change#, a.status
from v$datafile a, v$tablespace b
where a.ts# = b.ts#;  2    3

     FILE# TBS_NAME                       FILE_NAME                                          CHECKPOINT_CHANGE# STATUS
---------- ------------------------------ -------------------------------------------------- ------------------ -------
         3 SYSAUX                         /u01/app/oracle/oradata/ORA19C/sysaux01.dbf                   2845590 ONLINE
         1 SYSTEM                         /u01/app/oracle/oradata/ORA19C/system01.dbf                   2845590 SYSTEM
         4 UNDOTBS1                       /u01/app/oracle/oradata/ORA19C/undotbs01.dbf                  2845590 ONLINE
         7 USERS                          /u01/app/oracle/oradata/ORA19C/users01.dbf                    2845590 ONLINE

SYS@ora19c> select a.group#, a.sequence#, b.member, a.bytes/1024/1024 mb, a.status, a.first_change#, a.next_change#
from v$log a, v$logfile b
where a.group# = b.group#;  2    3

    GROUP#  SEQUENCE# MEMBER                                                     MB STATUS           FIRST_CHANGE# NEXT_CHANGE#
---------- ---------- -------------------------------------------------- ---------- ---------------- ------------- ------------
         3         28 /u01/app/oracle/oradata/ORA19C/redo03.log                  50 CURRENT                2822872   1.8447E+19
         2         27 /u01/app/oracle/oradata/ORA19C/redo02.log                  50 INACTIVE               2797846  2822872
         1         26 /u01/app/oracle/oradata/ORA19C/redo01.log                  50 INACTIVE               2767903  2797846

SYS@ora19c> select segment_id, segment_name, owner, tablespace_name, status from dba_rollback_segs;

SEGMENT_ID SEGMENT_NAME                   OWNER                          TABLESPACE_NAME                STATUS
---------- ------------------------------ ------------------------------ ------------------------------ ----------------
         0 SYSTEM                         SYS                            SYSTEM                         ONLINE
         1 _SYSSMU1_1261223759$           PUBLIC                         UNDOTBS1                       ONLINE
         2 _SYSSMU2_27624015$             PUBLIC                         UNDOTBS1                       ONLINE
         3 _SYSSMU3_2421748942$           PUBLIC                         UNDOTBS1                       ONLINE
         4 _SYSSMU4_625702278$            PUBLIC                         UNDOTBS1                       ONLINE
         5 _SYSSMU5_2101348960$           PUBLIC                         UNDOTBS1                       ONLINE
         6 _SYSSMU6_813816332$            PUBLIC                         UNDOTBS1                       ONLINE
         7 _SYSSMU7_2329891355$           PUBLIC                         UNDOTBS1                       ONLINE
         8 _SYSSMU8_399776867$            PUBLIC                         UNDOTBS1                       ONLINE
         9 _SYSSMU9_1692468413$           PUBLIC                         UNDOTBS1                       ONLINE
        10 _SYSSMU10_930580995$           PUBLIC                         UNDOTBS1                       ONLINE

11 rows selected.

SYS@ora19c> select s.username, s.sid, s.serial#, r.name, t.ubafil, t.xidusn, t.ubablk, t.used_ublk
from v$session s, v$transaction t, v$rollname r
where s.taddr = t.addr
and t.xidusn = r.usn;  2    3    4

no rows selected

트랜잭션 발생

HR@ora19c> update hr.employees set salary = salary * 1.1 where employee_id = 200;

1 row updated.

SYS@ora19c> select s.username, s.sid, s.serial#, r.name, t.ubafil, t.xidusn, t.ubablk, t.used_ublk
from v$session s, v$transaction t, v$rollname r
where s.taddr = t.addr
and t.xidusn = r.usn;  2    3    4

USERNAME                              SID    SERIAL# NAME                                                   UBAFIL     XIDUSN          UBABLK  USED_UBLK
------------------------------ ---------- ---------- -------------------------------------------------- ---------- ---------- ---------- ----------
HR                                    151      60585 _SYSSMU7_2329891355$                                        4      7        1348          1

로그 스위치 발생

SYS@ora19c> select a.group#, a.sequence#, b.member, a.bytes/1024/1024 mb, a.status, a.first_change#, a.next_change#
from v$log a, v$logfile b
where a.group# = b.group#;  2    3

    GROUP#  SEQUENCE# MEMBER                                                     MB STATUS           FIRST_CHANGE# NEXT_CHANGE#
---------- ---------- -------------------------------------------------- ---------- ---------------- ------------- ------------
         3         28 /u01/app/oracle/oradata/ORA19C/redo03.log                  50 CURRENT                2822872   1.8447E+19
         2         27 /u01/app/oracle/oradata/ORA19C/redo02.log                  50 INACTIVE               2797846  2822872
         1         26 /u01/app/oracle/oradata/ORA19C/redo01.log                  50 INACTIVE               2767903  2797846

SYS@ora19c> alter system switch logfile;

System altered.

SYS@ora19c> /

System altered.

SYS@ora19c> /

System altered.

SYS@ora19c> select a.group#, a.sequence#, b.member, a.bytes/1024/1024 mb, a.status, a.first_change#, a.next_change#
from v$log a, v$logfile b
where a.group# = b.group#;  2    3

    GROUP#  SEQUENCE# MEMBER                                                     MB STATUS           FIRST_CHANGE# NEXT_CHANGE#
---------- ---------- -------------------------------------------------- ---------- ---------------- ------------- ------------
         3         31 /u01/app/oracle/oradata/ORA19C/redo03.log                  50 CURRENT                2846873   1.8447E+19
         2         30 /u01/app/oracle/oradata/ORA19C/redo02.log                  50 INACTIVE               2846870  2846873
         1         29 /u01/app/oracle/oradata/ORA19C/redo01.log                  50 INACTIVE               2846867  2846870

장애 유발

SYS@ora19c> ! ls /u01/app/oracle/oradata/ORA19C/undotbs01.dbf
/u01/app/oracle/oradata/ORA19C/undotbs01.dbf

SYS@ora19c> ! rm /u01/app/oracle/oradata/ORA19C/undotbs01.dbf

SYS@ora19c> ! ls /u01/app/oracle/oradata/ORA19C/undotbs01.dbf
ls: cannot access /u01/app/oracle/oradata/ORA19C/undotbs01.dbf: No such file or directory

SYS@ora19c> shutdown immediate
ORA-03113: end-of-file on communication channel
Process ID: 26794
Session ID: 125 Serial number: 53822

SYS@ora19c> startup
SP2-0642: SQL*Plus internal error state 2133, context 3114:0:0
Unsafe to proceed
ORA-03114: not connected to ORACLE

SYS@ora19c> conn / as sysdba
Connected to an idle instance.
SYS@ora19c> startup
ORACLE instance started.

Total System Global Area  830469472 bytes
Fixed Size                  8901984 bytes
Variable Size             595591168 bytes
Database Buffers          218103808 bytes
Redo Buffers                7872512 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 4 - see DBWR trace file
ORA-01110: data file 4: '/u01/app/oracle/oradata/ORA19C/undotbs01.dbf'

SYS@ora19c> select * from v$recover_file;

     FILE# ONLINE  ONLINE_ ERROR                             CHANGE# TIME          CON_ID
---------- ------- ------- ------------------------------ ---------- --------- ----------
         4 ONLINE  ONLINE  FILE NOT FOUND                          0                    0

새로운 undo tablespace를 생성해서 해결

SYS@ora19c> select a.file#, b.name tbs_name, a.name file_name, a.checkpoint_change#, a.status
from v$datafile a, v$tablespace b
where a.ts# = b.ts#;  2    3

     FILE# TBS_NAME                       FILE_NAME                                          CHECKPOINT_CHANGE# STATUS
---------- ------------------------------ -------------------------------------------------- ------------------ -------
         1 SYSTEM                         /u01/app/oracle/oradata/ORA19C/system01.dbf                   2846873 SYSTEM
         3 SYSAUX                         /u01/app/oracle/oradata/ORA19C/sysaux01.dbf                   2846873 ONLINE
         4 UNDOTBS1                       /u01/app/oracle/oradata/ORA19C/undotbs01.dbf                  2846873 ONLINE
         7 USERS                          /u01/app/oracle/oradata/ORA19C/users01.dbf                    2846873 ONLINE

1. 기존 undo datafile을 offline drop

SYS@ora19c> alter database datafile 4 offline drop;

Database altered.

SYS@ora19c> select a.file#, b.name tbs_name, a.name file_name, a.checkpoint_change#, a.status
from v$datafile a, v$tablespace b
where a.ts# = b.ts#;  2    3

     FILE# TBS_NAME                       FILE_NAME                                          CHECKPOINT_CHANGE# STATUS
---------- ------------------------------ -------------------------------------------------- ------------------ -------
         1 SYSTEM                         /u01/app/oracle/oradata/ORA19C/system01.dbf                   2846873 SYSTEM
         3 SYSAUX                         /u01/app/oracle/oradata/ORA19C/sysaux01.dbf                   2846873 ONLINE
         4 UNDOTBS1                       /u01/app/oracle/oradata/ORA19C/undotbs01.dbf                  2846873 RECOVER
         7 USERS                          /u01/app/oracle/oradata/ORA19C/users01.dbf                    2846873 ONLINE

2. 데이터베이스 open

SYS@ora19c> alter database open;

Database altered.

SYS@ora19c> select a.file#, b.name tbs_name, a.name file_name, a.checkpoint_change#, a.status
from v$datafile a, v$tablespace b
where a.ts# = b.ts#;  2    3

     FILE# TBS_NAME                       FILE_NAME                                          CHECKPOINT_CHANGE# STATUS
---------- ------------------------------ -------------------------------------------------- ------------------ -------
         3 SYSAUX                         /u01/app/oracle/oradata/ORA19C/sysaux01.dbf                   2947782 ONLINE
         1 SYSTEM                         /u01/app/oracle/oradata/ORA19C/system01.dbf                   2947782 SYSTEM
         4 UNDOTBS1                       /u01/app/oracle/oradata/ORA19C/undotbs01.dbf                  2846873 RECOVER
         7 USERS                          /u01/app/oracle/oradata/ORA19C/users01.dbf                    2947782 ONLINE

SYS@ora19c> select segment_id, segment_name, owner, tablespace_name, status from dba_rollback_segs;

SEGMENT_ID SEGMENT_NAME                   OWNER                          TABLESPACE_NAME                STATUS
---------- ------------------------------ ------------------------------ ------------------------------ ----------------
         0 SYSTEM                         SYS                            SYSTEM                         ONLINE
         1 _SYSSMU1_1261223759$           PUBLIC                         UNDOTBS1                       OFFLINE
         2 _SYSSMU2_27624015$             PUBLIC                         UNDOTBS1                       OFFLINE
         3 _SYSSMU3_2421748942$           PUBLIC                         UNDOTBS1                       OFFLINE
         4 _SYSSMU4_625702278$            PUBLIC                         UNDOTBS1                       OFFLINE
         5 _SYSSMU5_2101348960$           PUBLIC                         UNDOTBS1                       OFFLINE
         6 _SYSSMU6_813816332$            PUBLIC                         UNDOTBS1                       OFFLINE
         7 _SYSSMU7_2329891355$           PUBLIC                         UNDOTBS1                       OFFLINE
         8 _SYSSMU8_399776867$            PUBLIC                         UNDOTBS1                       OFFLINE
         9 _SYSSMU9_1692468413$           PUBLIC                         UNDOTBS1                       OFFLINE
        10 _SYSSMU10_930580995$           PUBLIC                         UNDOTBS1                       OFFLINE

11 rows selected.

SYS@ora19c> select s.username, s.sid, s.serial#, r.name, t.ubafil, t.xidusn, t.ubablk, t.used_ublk
from v$session s, v$transaction t, v$rollname r
where s.taddr = t.addr
and t.xidusn = r.usn;  2    3    4

no rows selected

3. 새로운 undo tablespace 생성

SYS@ora19c> create undo tablespace undo1 datafile '/u01/app/oracle/oradata/ORA19C/undo1.dbf' size 10m autoextend on;

Tablespace created.

SYS@ora19c> select segment_id, segment_name, owner, tablespace_name, status from dba_rollback_segs;

SEGMENT_ID SEGMENT_NAME                   OWNER                          TABLESPACE_NAME                STATUS
---------- ------------------------------ ------------------------------ ------------------------------ ----------------
         0 SYSTEM                         SYS                            SYSTEM                         ONLINE
         1 _SYSSMU1_1261223759$           PUBLIC                         UNDOTBS1                       OFFLINE
         2 _SYSSMU2_27624015$             PUBLIC                         UNDOTBS1                       OFFLINE
         3 _SYSSMU3_2421748942$           PUBLIC                         UNDOTBS1                       OFFLINE
         4 _SYSSMU4_625702278$            PUBLIC                         UNDOTBS1                       OFFLINE
         5 _SYSSMU5_2101348960$           PUBLIC                         UNDOTBS1                       OFFLINE
         6 _SYSSMU6_813816332$            PUBLIC                         UNDOTBS1                       OFFLINE
         7 _SYSSMU7_2329891355$           PUBLIC                         UNDOTBS1                       OFFLINE
         8 _SYSSMU8_399776867$            PUBLIC                         UNDOTBS1                       OFFLINE
         9 _SYSSMU9_1692468413$           PUBLIC                         UNDOTBS1                       OFFLINE
        10 _SYSSMU10_930580995$           PUBLIC                         UNDOTBS1                       OFFLINE

SEGMENT_ID SEGMENT_NAME                   OWNER                          TABLESPACE_NAME                STATUS
---------- ------------------------------ ------------------------------ ------------------------------ ----------------
        11 _SYSSMU11_2416213215$          PUBLIC                         UNDO1                          OFFLINE
        12 _SYSSMU12_323492533$           PUBLIC                         UNDO1                          OFFLINE
        13 _SYSSMU13_1669884409$          PUBLIC                         UNDO1                          OFFLINE
        14 _SYSSMU14_1914075282$          PUBLIC                         UNDO1                          OFFLINE
        15 _SYSSMU15_3469478410$          PUBLIC                         UNDO1                          OFFLINE
        16 _SYSSMU16_4284437115$          PUBLIC                         UNDO1                          OFFLINE
        17 _SYSSMU17_790064437$           PUBLIC                         UNDO1                          OFFLINE
        18 _SYSSMU18_1092926197$          PUBLIC                         UNDO1                          OFFLINE
        19 _SYSSMU19_3145037474$          PUBLIC                         UNDO1                          OFFLINE
        20 _SYSSMU20_1140459433$          PUBLIC                         UNDO1                          OFFLINE

21 rows selected.

4. 새로운 undo tablespace 지정

SYS@ora19c> show parameter undo_tablespace;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_tablespace                      string      UNDOTBS1

SYS@ora19c> alter system set undo_tablespace = undo1;

System altered.

SYS@ora19c> show parameter undo_tablespace;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_tablespace                      string      UNDO1

SYS@ora19c> select segment_id, segment_name, owner, tablespace_name, status from dba_rollback_segs;

SEGMENT_ID SEGMENT_NAME                   OWNER                          TABLESPACE_NAME                STATUS
---------- ------------------------------ ------------------------------ ------------------------------ ----------------
         0 SYSTEM                         SYS                            SYSTEM                         ONLINE
         1 _SYSSMU1_1261223759$           PUBLIC                         UNDOTBS1                       OFFLINE
         2 _SYSSMU2_27624015$             PUBLIC                         UNDOTBS1                       OFFLINE
         3 _SYSSMU3_2421748942$           PUBLIC                         UNDOTBS1                       OFFLINE
         4 _SYSSMU4_625702278$            PUBLIC                         UNDOTBS1                       OFFLINE
         5 _SYSSMU5_2101348960$           PUBLIC                         UNDOTBS1                       OFFLINE
         6 _SYSSMU6_813816332$            PUBLIC                         UNDOTBS1                       OFFLINE
         7 _SYSSMU7_2329891355$           PUBLIC                         UNDOTBS1                       OFFLINE
         8 _SYSSMU8_399776867$            PUBLIC                         UNDOTBS1                       OFFLINE
         9 _SYSSMU9_1692468413$           PUBLIC                         UNDOTBS1                       OFFLINE
        10 _SYSSMU10_930580995$           PUBLIC                         UNDOTBS1                       OFFLINE

SEGMENT_ID SEGMENT_NAME                   OWNER                          TABLESPACE_NAME                STATUS
---------- ------------------------------ ------------------------------ ------------------------------ ----------------
        11 _SYSSMU11_2416213215$          PUBLIC                         UNDO1                          ONLINE
        12 _SYSSMU12_323492533$           PUBLIC                         UNDO1                          ONLINE
        13 _SYSSMU13_1669884409$          PUBLIC                         UNDO1                          ONLINE
        14 _SYSSMU14_1914075282$          PUBLIC                         UNDO1                          ONLINE
        15 _SYSSMU15_3469478410$          PUBLIC                         UNDO1                          ONLINE
        16 _SYSSMU16_4284437115$          PUBLIC                         UNDO1                          ONLINE
        17 _SYSSMU17_790064437$           PUBLIC                         UNDO1                          ONLINE
        18 _SYSSMU18_1092926197$          PUBLIC                         UNDO1                          ONLINE
        19 _SYSSMU19_3145037474$          PUBLIC                         UNDO1                          ONLINE
        20 _SYSSMU20_1140459433$          PUBLIC                         UNDO1                          ONLINE

21 rows selected.

5. 기존 undo 테이블스페이스 삭제

SYS@ora19c> drop tablespace undotbs1 including contents and datafiles;

Tablespace dropped.

SYS@ora19c> select segment_id, segment_name, owner, tablespace_name, status from dba_rollback_segs;

SEGMENT_ID SEGMENT_NAME                   OWNER                          TABLESPACE_NAME                STATUS
---------- ------------------------------ ------------------------------ ------------------------------ ----------------
         0 SYSTEM                         SYS                            SYSTEM                         ONLINE
        11 _SYSSMU11_2416213215$          PUBLIC                         UNDO1                          ONLINE
        12 _SYSSMU12_323492533$           PUBLIC                         UNDO1                          ONLINE
        13 _SYSSMU13_1669884409$          PUBLIC                         UNDO1                          ONLINE
        14 _SYSSMU14_1914075282$          PUBLIC                         UNDO1                          ONLINE
        15 _SYSSMU15_3469478410$          PUBLIC                         UNDO1                          ONLINE
        16 _SYSSMU16_4284437115$          PUBLIC                         UNDO1                          ONLINE
        17 _SYSSMU17_790064437$           PUBLIC                         UNDO1                          ONLINE
        18 _SYSSMU18_1092926197$          PUBLIC                         UNDO1                          ONLINE
        19 _SYSSMU19_3145037474$          PUBLIC                         UNDO1                          ONLINE
        20 _SYSSMU20_1140459433$          PUBLIC                         UNDO1                          ONLINE

11 rows selected.

SYS@ora19c> select a.file#, b.name tbs_name, a.name file_name, a.checkpoint_change#, a.status
from v$datafile a, v$tablespace b
where a.ts# = b.ts#;  2    3

     FILE# TBS_NAME                       FILE_NAME                                          CHECKPOINT_CHANGE# STATUS
---------- ------------------------------ -------------------------------------------------- ------------------ -------
         3 SYSAUX                         /u01/app/oracle/oradata/ORA19C/sysaux01.dbf                   2947782 ONLINE
         1 SYSTEM                         /u01/app/oracle/oradata/ORA19C/system01.dbf                   2947782 SYSTEM
         7 USERS                          /u01/app/oracle/oradata/ORA19C/users01.dbf                    2947782 ONLINE
         5 UNDO1                          /u01/app/oracle/oradata/ORA19C/undo1.dbf                      2948456 ONLINE

원상복구

SYS@ora19c> alter system set undo_tablespace = undotbs1 scope = spfile;

System altered.

SYS@ora19c> shutdown abort
ORACLE instance shut down.

SYS@ora19c> !
[oracle@ora19c dbs]$ cd ~/backup/noarch
[oracle@ora19c noarch]$ cp -v * $ORACLE_BASE/oradata/ORA19C/
‘control01.ctl’ -> ‘/u01/app/oracle/oradata/ORA19C/control01.ctl’
‘recover’ -> ‘/u01/app/oracle/oradata/ORA19C/recover’
‘redo01.log’ -> ‘/u01/app/oracle/oradata/ORA19C/redo01.log’
‘redo02.log’ -> ‘/u01/app/oracle/oradata/ORA19C/redo02.log’
‘redo03.log’ -> ‘/u01/app/oracle/oradata/ORA19C/redo03.log’
‘sysaux01.dbf’ -> ‘/u01/app/oracle/oradata/ORA19C/sysaux01.dbf’
‘system01.dbf’ -> ‘/u01/app/oracle/oradata/ORA19C/system01.dbf’
‘temp01.dbf’ -> ‘/u01/app/oracle/oradata/ORA19C/temp01.dbf’
‘undotbs01.dbf’ -> ‘/u01/app/oracle/oradata/ORA19C/undotbs01.dbf’
‘users01.dbf’ -> ‘/u01/app/oracle/oradata/ORA19C/users01.dbf’

[oracle@ora19c noarch]$ ls /u01/app/oracle/oradata/ORA19C/
control01.ctl  redo01.log  redo03.log    system01.dbf  undo1.dbf      users01.dbf
recover        redo02.log  sysaux01.dbf  temp01.dbf    undotbs01.dbf
[oracle@ora19c noarch]$ rm /u01/app/oracle/oradata/ORA19C/undo1.dbf

[oracle@ora19c noarch]$ exit
exit

SYS@ora19c> startup
ORACLE instance started.

Total System Global Area  830469472 bytes
Fixed Size                  8901984 bytes
Variable Size             595591168 bytes
Database Buffers          218103808 bytes
Redo Buffers                7872512 bytes
Database mounted.
Database opened.

시나리오 10-2

현재 상태 확인

SYS@ora19c> select checkpoint_change#, scn_to_timestamp(checkpoint_change#) from v$database;

CHECKPOINT_CHANGE# SCN_TO_TIMESTAMP(CHECKPOINT_CHANGE#)
------------------ ---------------------------------------------------------------------------
           2845590 15-DEC-25 04.00.14.000000000 PM

SYS@ora19c> select a.file#, b.name tbs_name, a.name file_name, a.checkpoint_change#, a.status
  2  from v$datafile a, v$tablespace b
where a.ts# = b.ts#;  3

     FILE# TBS_NAME                       FILE_NAME                                          CHECKPOINT_CHANGE# STATUS
---------- ------------------------------ -------------------------------------------------- ------------------ -------
         3 SYSAUX                         /u01/app/oracle/oradata/ORA19C/sysaux01.dbf                   2845590 ONLINE
         1 SYSTEM                         /u01/app/oracle/oradata/ORA19C/system01.dbf                   2845590 SYSTEM
         4 UNDOTBS1                       /u01/app/oracle/oradata/ORA19C/undotbs01.dbf                  2845590 ONLINE
         7 USERS                          /u01/app/oracle/oradata/ORA19C/users01.dbf                    2845590 ONLINE

SYS@ora19c> select a.group#, a.sequence#, b.member, a.bytes/1024/1024 mb, a.status, a.first_change#, a.next_change#
from v$log a, v$logfile b
where a.group# = b.group#;  2    3

    GROUP#  SEQUENCE# MEMBER                                                     MB STATUS           FIRST_CHANGE# NEXT_CHANGE#
---------- ---------- -------------------------------------------------- ---------- ---------------- ------------- ------------
         3         28 /u01/app/oracle/oradata/ORA19C/redo03.log                  50 CURRENT                2822872   1.8447E+19
         2         27 /u01/app/oracle/oradata/ORA19C/redo02.log                  50 INACTIVE               2797846  2822872
         1         26 /u01/app/oracle/oradata/ORA19C/redo01.log                  50 INACTIVE               2767903  2797846

SYS@ora19c> select segment_id, segment_name, owner, tablespace_name, status from dba_rollback_segs;

SEGMENT_ID SEGMENT_NAME                   OWNER                          TABLESPACE_NAME                STATUS
---------- ------------------------------ ------------------------------ ------------------------------ ----------------
         0 SYSTEM                         SYS                            SYSTEM                         ONLINE
         1 _SYSSMU1_1261223759$           PUBLIC                         UNDOTBS1                       ONLINE
         2 _SYSSMU2_27624015$             PUBLIC                         UNDOTBS1                       ONLINE
         3 _SYSSMU3_2421748942$           PUBLIC                         UNDOTBS1                       ONLINE
         4 _SYSSMU4_625702278$            PUBLIC                         UNDOTBS1                       ONLINE
         5 _SYSSMU5_2101348960$           PUBLIC                         UNDOTBS1                       ONLINE
         6 _SYSSMU6_813816332$            PUBLIC                         UNDOTBS1                       ONLINE
         7 _SYSSMU7_2329891355$           PUBLIC                         UNDOTBS1                       ONLINE
         8 _SYSSMU8_399776867$            PUBLIC                         UNDOTBS1                       ONLINE
         9 _SYSSMU9_1692468413$           PUBLIC                         UNDOTBS1                       ONLINE
        10 _SYSSMU10_930580995$           PUBLIC                         UNDOTBS1                       ONLINE

11 rows selected.

SYS@ora19c> show parameter undo_tablespace

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_tablespace                      string      UNDOTBS1

SYS@ora19c> select s.username, s.sid, s.serial#, r.name, t.ubafil, t.xidusn, t.ubablk, t.used_ublk
from v$session s, v$transaction t, v$rollname r
where s.taddr = t.addr
and t.xidusn = r.usn;  2    3    4

no rows selected

트랜잭션 발생

HR@ora19c> conn hr/hr
Connected.
HR@ora19c> update hr.employees set salary = salary * 1.1 where employee_id = 200;

1 row updated.

SYS@ora19c> select s.username, s.sid, s.serial#, r.name, t.ubafil, t.xidusn, t.ubablk, t.used_ublk
from v$session s, v$transaction t, v$rollname r
where s.taddr = t.addr
and t.xidusn = r.usn;  2    3    4

USERNAME                              SID    SERIAL# NAME                                                   UBAFIL     XIDUSN          UBABLK  USED_UBLK
------------------------------ ---------- ---------- -------------------------------------------------- ---------- ---------- ---------- ----------
HR                                     37      48338 _SYSSMU2_27624015$                                          4      2         303          1

장애 유발

SYS@ora19c> ! ls /u01/app/oracle/oradata/ORA19C/undotbs01.dbf
/u01/app/oracle/oradata/ORA19C/undotbs01.dbf

SYS@ora19c> ! rm /u01/app/oracle/oradata/ORA19C/undotbs01.dbf

SYS@ora19c> ! ls /u01/app/oracle/oradata/ORA19C/undotbs01.dbf
ls: cannot access /u01/app/oracle/oradata/ORA19C/undotbs01.dbf: No such file or directory

SYS@ora19c> alter system checkpoint;
alter system checkpoint
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 21892
Session ID: 125 Serial number: 52494

SYS@ora19c> conn / as sysdba
Connected to an idle instance.
SYS@ora19c> startup
ORACLE instance started.

Total System Global Area  830469472 bytes
Fixed Size                  8901984 bytes
Variable Size             595591168 bytes
Database Buffers          218103808 bytes
Redo Buffers                7872512 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 4 - see DBWR trace file
ORA-01110: data file 4: '/u01/app/oracle/oradata/ORA19C/undotbs01.dbf'

SYS@ora19c> select * from v$recover_file;

     FILE# ONLINE  ONLINE_ ERROR                             CHANGE# TIME          CON_ID
---------- ------- ------- ------------------------------ ---------- --------- ----------
         4 ONLINE  ONLINE  FILE NOT FOUND                          0                    0

새로운 undo tablespace를 생성해서 해결

SYS@ora19c> select status from v$instance;

STATUS
------------
MOUNTED

SYS@ora19c> select a.file#, b.name tbs_name, a.name file_name, a.checkpoint_change#, a.status
from v$datafile a, v$tablespace b
where a.ts# = b.ts#;  2    3

     FILE# TBS_NAME                       FILE_NAME                                          CHECKPOINT_CHANGE# STATUS
---------- ------------------------------ -------------------------------------------------- ------------------ -------
         1 SYSTEM                         /u01/app/oracle/oradata/ORA19C/system01.dbf                   2845590 SYSTEM
         3 SYSAUX                         /u01/app/oracle/oradata/ORA19C/sysaux01.dbf                   2845590 ONLINE
         4 UNDOTBS1                       /u01/app/oracle/oradata/ORA19C/undotbs01.dbf                  2845590 ONLINE
         7 USERS                          /u01/app/oracle/oradata/ORA19C/users01.dbf                    2845590 ONLINE

1. 기존 undo datafile을 offline drop

SYS@ora19c> alter database datafile 4 offline drop;

Database altered.

SYS@ora19c> select a.file#, b.name tbs_name, a.name file_name, a.checkpoint_change#, a.status
from v$datafile a, v$tablespace b
where a.ts# = b.ts#;  2    3

     FILE# TBS_NAME                       FILE_NAME                                          CHECKPOINT_CHANGE# STATUS
---------- ------------------------------ -------------------------------------------------- ------------------ -------
         1 SYSTEM                         /u01/app/oracle/oradata/ORA19C/system01.dbf                   2845590 SYSTEM
         3 SYSAUX                         /u01/app/oracle/oradata/ORA19C/sysaux01.dbf                   2845590 ONLINE
         4 UNDOTBS1                       /u01/app/oracle/oradata/ORA19C/undotbs01.dbf                  2845590 RECOVER
         7 USERS                          /u01/app/oracle/oradata/ORA19C/users01.dbf                    2845590 ONLINE

2. 데이터베이스 open

  • undo segment의 status가 NEEDS RECOVERY로 나옴
SYS@ora19c> alter database open;

Database altered.

SYS@ora19c> select segment_id, segment_name, owner, tablespace_name, status from dba_rollback_segs;

SEGMENT_ID SEGMENT_NAME                   OWNER                          TABLESPACE_NAME                STATUS
---------- ------------------------------ ------------------------------ ------------------------------ ----------------
         0 SYSTEM                         SYS                            SYSTEM                         ONLINE
         1 _SYSSMU1_1261223759$           PUBLIC                         UNDOTBS1                       NEEDS RECOVERY
         2 _SYSSMU2_27624015$             PUBLIC                         UNDOTBS1                       NEEDS RECOVERY
         3 _SYSSMU3_2421748942$           PUBLIC                         UNDOTBS1                       NEEDS RECOVERY
         4 _SYSSMU4_625702278$            PUBLIC                         UNDOTBS1                       NEEDS RECOVERY
         5 _SYSSMU5_2101348960$           PUBLIC                         UNDOTBS1                       NEEDS RECOVERY
         6 _SYSSMU6_813816332$            PUBLIC                         UNDOTBS1                       NEEDS RECOVERY
         7 _SYSSMU7_2329891355$           PUBLIC                         UNDOTBS1                       NEEDS RECOVERY
         8 _SYSSMU8_399776867$            PUBLIC                         UNDOTBS1                       NEEDS RECOVERY
         9 _SYSSMU9_1692468413$           PUBLIC                         UNDOTBS1                       NEEDS RECOVERY
        10 _SYSSMU10_930580995$           PUBLIC                         UNDOTBS1                       NEEDS RECOVERY

11 rows selected.

3. 새로운 undo tablespace 생성

SYS@ora19c> create undo tablespace undo1 datafile '/u01/app/oracle/oradata/ORA19C/undo1.dbf' size 10m autoextend on;

Tablespace created.

SYS@ora19c> select a.file#, b.name tbs_name, a.name file_name, a.checkpoint_change#, a.status
from v$datafile a, v$tablespace b
where a.ts# = b.ts#;  2    3

     FILE# TBS_NAME                       FILE_NAME                                          CHECKPOINT_CHANGE# STATUS
---------- ------------------------------ -------------------------------------------------- ------------------ -------
         3 SYSAUX                         /u01/app/oracle/oradata/ORA19C/sysaux01.dbf                   2946678 ONLINE
         1 SYSTEM                         /u01/app/oracle/oradata/ORA19C/system01.dbf                   2946678 SYSTEM
         4 UNDOTBS1                       /u01/app/oracle/oradata/ORA19C/undotbs01.dbf                  2845590 RECOVER
         7 USERS                          /u01/app/oracle/oradata/ORA19C/users01.dbf                    2946678 ONLINE
         5 UNDO1                          /u01/app/oracle/oradata/ORA19C/undo1.dbf                      2947461 ONLINE

SYS@ora19c> select segment_id, segment_name, owner, tablespace_name, status from dba_rollback_segs;

SEGMENT_ID SEGMENT_NAME                   OWNER                          TABLESPACE_NAME                STATUS
---------- ------------------------------ ------------------------------ ------------------------------ ----------------
         0 SYSTEM                         SYS                            SYSTEM                         ONLINE
         1 _SYSSMU1_1261223759$           PUBLIC                         UNDOTBS1                       NEEDS RECOVERY
         2 _SYSSMU2_27624015$             PUBLIC                         UNDOTBS1                       NEEDS RECOVERY
         3 _SYSSMU3_2421748942$           PUBLIC                         UNDOTBS1                       NEEDS RECOVERY
         4 _SYSSMU4_625702278$            PUBLIC                         UNDOTBS1                       NEEDS RECOVERY
         5 _SYSSMU5_2101348960$           PUBLIC                         UNDOTBS1                       NEEDS RECOVERY
         6 _SYSSMU6_813816332$            PUBLIC                         UNDOTBS1                       NEEDS RECOVERY
         7 _SYSSMU7_2329891355$           PUBLIC                         UNDOTBS1                       NEEDS RECOVERY
         8 _SYSSMU8_399776867$            PUBLIC                         UNDOTBS1                       NEEDS RECOVERY
         9 _SYSSMU9_1692468413$           PUBLIC                         UNDOTBS1                       NEEDS RECOVERY
        10 _SYSSMU10_930580995$           PUBLIC                         UNDOTBS1                       NEEDS RECOVERY

SEGMENT_ID SEGMENT_NAME                   OWNER                          TABLESPACE_NAME                STATUS
---------- ------------------------------ ------------------------------ ------------------------------ ----------------
        11 _SYSSMU11_235323571$           PUBLIC                         UNDO1                          OFFLINE
        12 _SYSSMU12_943486663$           PUBLIC                         UNDO1                          OFFLINE
        13 _SYSSMU13_1401231401$          PUBLIC                         UNDO1                          OFFLINE
        14 _SYSSMU14_2287875962$          PUBLIC                         UNDO1                          OFFLINE
        15 _SYSSMU15_1437082692$          PUBLIC                         UNDO1                          OFFLINE
        16 _SYSSMU16_3405821153$          PUBLIC                         UNDO1                          OFFLINE
        17 _SYSSMU17_536003123$           PUBLIC                         UNDO1                          OFFLINE
        18 _SYSSMU18_3128172769$          PUBLIC                         UNDO1                          OFFLINE
        19 _SYSSMU19_689157689$           PUBLIC                         UNDO1                          OFFLINE
        20 _SYSSMU20_2296113507$          PUBLIC                         UNDO1                          OFFLINE

21 rows selected.

4. 새로운 undo tablespace 지정

SYS@ora19c> show parameter undo_tablespace;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_tablespace                      string      UNDOTBS1

SYS@ora19c> alter system set undo_tablespace = undo1;

System altered.

SYS@ora19c> show parameter undo_tablespace;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_tablespace                      string      UNDO1

SYS@ora19c> select segment_id, segment_name, owner, tablespace_name, status from dba_rollback_segs;

SEGMENT_ID SEGMENT_NAME                   OWNER                          TABLESPACE_NAME                STATUS
---------- ------------------------------ ------------------------------ ------------------------------ ----------------
         0 SYSTEM                         SYS                            SYSTEM                         ONLINE
         1 _SYSSMU1_1261223759$           PUBLIC                         UNDOTBS1                       NEEDS RECOVERY
         2 _SYSSMU2_27624015$             PUBLIC                         UNDOTBS1                       NEEDS RECOVERY
         3 _SYSSMU3_2421748942$           PUBLIC                         UNDOTBS1                       NEEDS RECOVERY
         4 _SYSSMU4_625702278$            PUBLIC                         UNDOTBS1                       NEEDS RECOVERY
         5 _SYSSMU5_2101348960$           PUBLIC                         UNDOTBS1                       NEEDS RECOVERY
         6 _SYSSMU6_813816332$            PUBLIC                         UNDOTBS1                       NEEDS RECOVERY
         7 _SYSSMU7_2329891355$           PUBLIC                         UNDOTBS1                       NEEDS RECOVERY
         8 _SYSSMU8_399776867$            PUBLIC                         UNDOTBS1                       NEEDS RECOVERY
         9 _SYSSMU9_1692468413$           PUBLIC                         UNDOTBS1                       NEEDS RECOVERY
        10 _SYSSMU10_930580995$           PUBLIC                         UNDOTBS1                       NEEDS RECOVERY

SEGMENT_ID SEGMENT_NAME                   OWNER                          TABLESPACE_NAME                STATUS
---------- ------------------------------ ------------------------------ ------------------------------ ----------------
        11 _SYSSMU11_235323571$           PUBLIC                         UNDO1                          ONLINE
        12 _SYSSMU12_943486663$           PUBLIC                         UNDO1                          ONLINE
        13 _SYSSMU13_1401231401$          PUBLIC                         UNDO1                          ONLINE
        14 _SYSSMU14_2287875962$          PUBLIC                         UNDO1                          ONLINE
        15 _SYSSMU15_1437082692$          PUBLIC                         UNDO1                          ONLINE
        16 _SYSSMU16_3405821153$          PUBLIC                         UNDO1                          ONLINE
        17 _SYSSMU17_536003123$           PUBLIC                         UNDO1                          ONLINE
        18 _SYSSMU18_3128172769$          PUBLIC                         UNDO1                          ONLINE
        19 _SYSSMU19_689157689$           PUBLIC                         UNDO1                          ONLINE
        20 _SYSSMU20_2296113507$          PUBLIC                         UNDO1                          ONLINE

21 rows selected.

5. 기존 undo tablespace 삭제 오류 발생

  • 기존 undo segment에 트랜잭션이 있어서 삭제 오류 발생
SYS@ora19c> drop tablespace undotbs1 including contents and datafiles;
drop tablespace undotbs1 including contents and datafiles
*
ERROR at line 1:
ORA-01548: active rollback segment '_SYSSMU1_1261223759$' found, terminate dropping tablespace
  • 데이터베이스 재시작 후 다시 시도 → 실패
SYS@ora19c> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SYS@ora19c> startup
ORACLE instance started.

Total System Global Area  830469472 bytes
Fixed Size                  8901984 bytes
Variable Size             595591168 bytes
Database Buffers          218103808 bytes
Redo Buffers                7872512 bytes
Database mounted.
Database opened.
SYS@ora19c> select segment_id, segment_name, owner, tablespace_name, status from dba_rollback_segs;

SEGMENT_ID SEGMENT_NAME                   OWNER                          TABLESPACE_NAME                STATUS
---------- ------------------------------ ------------------------------ ------------------------------ ----------------
         0 SYSTEM                         SYS                            SYSTEM                         ONLINE
         1 _SYSSMU1_1261223759$           PUBLIC                         UNDOTBS1                       NEEDS RECOVERY
         2 _SYSSMU2_27624015$             PUBLIC                         UNDOTBS1                       NEEDS RECOVERY
         3 _SYSSMU3_2421748942$           PUBLIC                         UNDOTBS1                       NEEDS RECOVERY
         4 _SYSSMU4_625702278$            PUBLIC                         UNDOTBS1                       NEEDS RECOVERY
         5 _SYSSMU5_2101348960$           PUBLIC                         UNDOTBS1                       NEEDS RECOVERY
         6 _SYSSMU6_813816332$            PUBLIC                         UNDOTBS1                       NEEDS RECOVERY
         7 _SYSSMU7_2329891355$           PUBLIC                         UNDOTBS1                       NEEDS RECOVERY
         8 _SYSSMU8_399776867$            PUBLIC                         UNDOTBS1                       NEEDS RECOVERY
         9 _SYSSMU9_1692468413$           PUBLIC                         UNDOTBS1                       NEEDS RECOVERY
        10 _SYSSMU10_930580995$           PUBLIC                         UNDOTBS1                       NEEDS RECOVERY

SEGMENT_ID SEGMENT_NAME                   OWNER                          TABLESPACE_NAME                STATUS
---------- ------------------------------ ------------------------------ ------------------------------ ----------------
        11 _SYSSMU11_235323571$           PUBLIC                         UNDO1                          ONLINE
        12 _SYSSMU12_943486663$           PUBLIC                         UNDO1                          ONLINE
        13 _SYSSMU13_1401231401$          PUBLIC                         UNDO1                          ONLINE
        14 _SYSSMU14_2287875962$          PUBLIC                         UNDO1                          ONLINE
        15 _SYSSMU15_1437082692$          PUBLIC                         UNDO1                          ONLINE
        16 _SYSSMU16_3405821153$          PUBLIC                         UNDO1                          ONLINE
        17 _SYSSMU17_536003123$           PUBLIC                         UNDO1                          ONLINE
        18 _SYSSMU18_3128172769$          PUBLIC                         UNDO1                          ONLINE
        19 _SYSSMU19_689157689$           PUBLIC                         UNDO1                          ONLINE
        20 _SYSSMU20_2296113507$          PUBLIC                         UNDO1                          ONLINE

21 rows selected.

SYS@ora19c> drop tablespace undotbs1 including contents and datafiles;
drop tablespace undotbs1 including contents and datafiles
*
ERROR at line 1:
ORA-01548: active rollback segment '_SYSSMU1_1261223759$' found, terminate dropping tablespace

6. 수동으로 undo segment를 offline으로 변경

# recovery가 필요한 undo segment 조회
SYS@ora19c> select segment_name || ',' from dba_rollback_segs where status = 'NEEDS RECOVERY';

SEGMENT_NAME||','
-------------------------------
_SYSSMU1_1261223759$,
_SYSSMU2_27624015$,
_SYSSMU3_2421748942$,
_SYSSMU4_625702278$,
_SYSSMU5_2101348960$,
_SYSSMU6_813816332$,
_SYSSMU7_2329891355$,
_SYSSMU8_399776867$,
_SYSSMU9_1692468413$,
_SYSSMU10_930580995$,

10 rows selected.

# pfile 생성
SYS@ora19c> create pfile from spfile;

File created.

SYS@ora19c> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SYS@ora19c> startup
ORACLE instance started.

# 수동으로 undo segment를 offline으로 변경
[oracle@ora19c dbs]$ tail -1 initora19c.ora
*.undo_tablespace='UNDO1'

[oracle@ora19c dbs]$ vi initora19c.ora

[oracle@ora19c dbs]$ tail -12 initora19c.ora
*.undo_tablespace='UNDO1'
_offline_rollback_segments=(
_SYSSMU1_1261223759$,
_SYSSMU2_27624015$,
_SYSSMU3_2421748942$,
_SYSSMU4_625702278$,
_SYSSMU5_2101348960$,
_SYSSMU6_813816332$,
_SYSSMU7_2329891355$,
_SYSSMU8_399776867$,
_SYSSMU9_1692468413$,
_SYSSMU10_930580995$)

7. pfile로 데이터베이스 재시작 후 기존 undo tablespace 삭제

# pfile로 데이터베이스 시작
SYS@ora19c> startup pfile=$ORACLE_HOME/dbs/initora19c.ora
ORACLE instance started.

Total System Global Area  830469472 bytes
Fixed Size                  8901984 bytes
Variable Size             595591168 bytes
Database Buffers          218103808 bytes
Redo Buffers                7872512 bytes
Database mounted.
Database opened.

SYS@ora19c> select segment_id, segment_name, owner, tablespace_name, status from dba_rollback_segs;

SEGMENT_ID SEGMENT_NAME                   OWNER                          TABLESPACE_NAME                STATUS
---------- ------------------------------ ------------------------------ ------------------------------ ----------------
         0 SYSTEM                         SYS                            SYSTEM                         ONLINE
         1 _SYSSMU1_1261223759$           PUBLIC                         UNDOTBS1                       NEEDS RECOVERY
         2 _SYSSMU2_27624015$             PUBLIC                         UNDOTBS1                       NEEDS RECOVERY
         3 _SYSSMU3_2421748942$           PUBLIC                         UNDOTBS1                       NEEDS RECOVERY
         4 _SYSSMU4_625702278$            PUBLIC                         UNDOTBS1                       NEEDS RECOVERY
         5 _SYSSMU5_2101348960$           PUBLIC                         UNDOTBS1                       NEEDS RECOVERY
         6 _SYSSMU6_813816332$            PUBLIC                         UNDOTBS1                       NEEDS RECOVERY
         7 _SYSSMU7_2329891355$           PUBLIC                         UNDOTBS1                       NEEDS RECOVERY
         8 _SYSSMU8_399776867$            PUBLIC                         UNDOTBS1                       NEEDS RECOVERY
         9 _SYSSMU9_1692468413$           PUBLIC                         UNDOTBS1                       NEEDS RECOVERY
        10 _SYSSMU10_930580995$           PUBLIC                         UNDOTBS1                       NEEDS RECOVERY

SEGMENT_ID SEGMENT_NAME                   OWNER                          TABLESPACE_NAME                STATUS
---------- ------------------------------ ------------------------------ ------------------------------ ----------------
        11 _SYSSMU11_235323571$           PUBLIC                         UNDO1                          ONLINE
        12 _SYSSMU12_943486663$           PUBLIC                         UNDO1                          ONLINE
        13 _SYSSMU13_1401231401$          PUBLIC                         UNDO1                          ONLINE
        14 _SYSSMU14_2287875962$          PUBLIC                         UNDO1                          ONLINE
        15 _SYSSMU15_1437082692$          PUBLIC                         UNDO1                          ONLINE
        16 _SYSSMU16_3405821153$          PUBLIC                         UNDO1                          ONLINE
        17 _SYSSMU17_536003123$           PUBLIC                         UNDO1                          ONLINE
        18 _SYSSMU18_3128172769$          PUBLIC                         UNDO1                          ONLINE
        19 _SYSSMU19_689157689$           PUBLIC                         UNDO1                          ONLINE
        20 _SYSSMU20_2296113507$          PUBLIC                         UNDO1                          ONLINE

21 rows selected.

# 기존 undo tablespace 삭제
SYS@ora19c> drop tablespace undotbs1 including contents and datafiles;

Tablespace dropped.

SYS@ora19c> select segment_id, segment_name, owner, tablespace_name, status from dba_rollback_segs;

SEGMENT_ID SEGMENT_NAME                   OWNER                          TABLESPACE_NAME                STATUS
---------- ------------------------------ ------------------------------ ------------------------------ ----------------
         0 SYSTEM                         SYS                            SYSTEM                         ONLINE
        11 _SYSSMU11_235323571$           PUBLIC                         UNDO1                          ONLINE
        12 _SYSSMU12_943486663$           PUBLIC                         UNDO1                          ONLINE
        13 _SYSSMU13_1401231401$          PUBLIC                         UNDO1                          ONLINE
        14 _SYSSMU14_2287875962$          PUBLIC                         UNDO1                          ONLINE
        15 _SYSSMU15_1437082692$          PUBLIC                         UNDO1                          ONLINE
        16 _SYSSMU16_3405821153$          PUBLIC                         UNDO1                          ONLINE
        17 _SYSSMU17_536003123$           PUBLIC                         UNDO1                          ONLINE
        18 _SYSSMU18_3128172769$          PUBLIC                         UNDO1                          ONLINE
        19 _SYSSMU19_689157689$           PUBLIC                         UNDO1                          ONLINE
        20 _SYSSMU20_2296113507$          PUBLIC                         UNDO1                          ONLINE

11 rows selected.

SYS@ora19c> select a.file#, b.name tbs_name, a.name file_name, a.checkpoint_change#, a.status
from v$datafile a, v$tablespace b
where a.ts# = b.ts#;  2    3

     FILE# TBS_NAME                       FILE_NAME                                          CHECKPOINT_CHANGE# STATUS
---------- ------------------------------ -------------------------------------------------- ------------------ -------
         3 SYSAUX                         /u01/app/oracle/oradata/ORA19C/sysaux01.dbf                   2950021 ONLINE
         1 SYSTEM                         /u01/app/oracle/oradata/ORA19C/system01.dbf                   2950021 SYSTEM
         7 USERS                          /u01/app/oracle/oradata/ORA19C/users01.dbf                    2950021 ONLINE
         5 UNDO1                          /u01/app/oracle/oradata/ORA19C/undo1.dbf                      2950021 ONLINE

원상복구

SYS@ora19c> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

SYS@ora19c> startup
ORACLE instance started.

Total System Global Area  830469472 bytes
Fixed Size                  8901984 bytes
Variable Size             595591168 bytes
Database Buffers          218103808 bytes
Redo Buffers                7872512 bytes
Database mounted.
Database opened.
SYS@ora19c> select segment_id, segment_name, owner, tablespace_name, status from dba_rollback_segs;

SEGMENT_ID SEGMENT_NAME                   OWNER                          TABLESPACE_NAME                STATUS
---------- ------------------------------ ------------------------------ ------------------------------ ----------------
         0 SYSTEM                         SYS                            SYSTEM                         ONLINE
        11 _SYSSMU11_235323571$           PUBLIC                         UNDO1                          ONLINE
        12 _SYSSMU12_943486663$           PUBLIC                         UNDO1                          ONLINE
        13 _SYSSMU13_1401231401$          PUBLIC                         UNDO1                          ONLINE
        14 _SYSSMU14_2287875962$          PUBLIC                         UNDO1                          ONLINE
        15 _SYSSMU15_1437082692$          PUBLIC                         UNDO1                          ONLINE
        16 _SYSSMU16_3405821153$          PUBLIC                         UNDO1                          ONLINE
        17 _SYSSMU17_536003123$           PUBLIC                         UNDO1                          ONLINE
        18 _SYSSMU18_3128172769$          PUBLIC                         UNDO1                          ONLINE
        19 _SYSSMU19_689157689$           PUBLIC                         UNDO1                          ONLINE
        20 _SYSSMU20_2296113507$          PUBLIC                         UNDO1                          ONLINE

11 rows selected.

SYS@ora19c> alter system set undo_tablespace = undotbs1 scope=spfile;

System altered.

SYS@ora19c> shutdown abort
ORACLE instance shut down.
SYS@ora19c> !

[oracle@ora19c dbs]$ cd ~/backup/noarch

[oracle@ora19c noarch]$ cp -v * $ORACLE_BASE/oradata/ORA19C/
‘control01.ctl’ -> ‘/u01/app/oracle/oradata/ORA19C/control01.ctl’
‘recover’ -> ‘/u01/app/oracle/oradata/ORA19C/recover’
‘redo01.log’ -> ‘/u01/app/oracle/oradata/ORA19C/redo01.log’
‘redo02.log’ -> ‘/u01/app/oracle/oradata/ORA19C/redo02.log’
‘redo03.log’ -> ‘/u01/app/oracle/oradata/ORA19C/redo03.log’
‘sysaux01.dbf’ -> ‘/u01/app/oracle/oradata/ORA19C/sysaux01.dbf’
‘system01.dbf’ -> ‘/u01/app/oracle/oradata/ORA19C/system01.dbf’
‘temp01.dbf’ -> ‘/u01/app/oracle/oradata/ORA19C/temp01.dbf’
‘undotbs01.dbf’ -> ‘/u01/app/oracle/oradata/ORA19C/undotbs01.dbf’
‘users01.dbf’ -> ‘/u01/app/oracle/oradata/ORA19C/users01.dbf’

[oracle@ora19c noarch]$ exit
exit

SYS@ora19c> startup
ORACLE instance started.

Total System Global Area  830469472 bytes
Fixed Size                  8901984 bytes
Variable Size             595591168 bytes
Database Buffers          218103808 bytes
Redo Buffers                7872512 bytes
Database mounted.
Database opened.

SYS@ora19c> select a.file#, b.name tbs_name, a.name file_name, a.checkpoint_change#, a.status
from v$datafile a, v$tablespace b
where a.ts# = b.ts#;  2    3

     FILE# TBS_NAME                       FILE_NAME                                          CHECKPOINT_CHANGE# STATUS
---------- ------------------------------ -------------------------------------------------- ------------------ -------
         3 SYSAUX                         /u01/app/oracle/oradata/ORA19C/sysaux01.dbf                   2845590 ONLINE
         1 SYSTEM                         /u01/app/oracle/oradata/ORA19C/system01.dbf                   2845590 SYSTEM
         4 UNDOTBS1                       /u01/app/oracle/oradata/ORA19C/undotbs01.dbf                  2845590 ONLINE
         7 USERS                          /u01/app/oracle/oradata/ORA19C/users01.dbf                    2845590 ONLINE

SYS@ora19c> show parameter undo_tablespace

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_tablespace                      string      UNDOTBS1

SYS@ora19c> ! ls /u01/app/oracle/oradata/ORA19C/undo1.dbf
/u01/app/oracle/oradata/ORA19C/undo1.dbf

SYS@ora19c> ! rm /u01/app/oracle/oradata/ORA19C/undo1.dbf

SYS@ora19c> create pfile from spfile;

File created.

시나리오 11 : temp file 손상 복구

현재 상태 조회

SYS@ora19c> select name from v$tempfile;

NAME
--------------------------------------------------
/u01/app/oracle/oradata/ORA19C/temp01.dbf

SYS@ora19c> select tablespace_name, contents from dba_tablespaces;

TABLESPACE_NAME                CONTENTS
------------------------------ ---------------------
SYSTEM                         PERMANENT
SYSAUX                         PERMANENT
UNDOTBS1                       UNDO
TEMP                           TEMPORARY
USERS                          PERMANENT
# sort area 크기 조회
SYS@ora19c> show parameter sort_area_size

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
sort_area_size                       integer     65536

장애 유발

SYS@ora19c> ! ls /u01/app/oracle/oradata/ORA19C/temp01.dbf
/u01/app/oracle/oradata/ORA19C/temp01.dbf

SYS@ora19c> ! rm /u01/app/oracle/oradata/ORA19C/temp01.dbf

SYS@ora19c> ! ls /u01/app/oracle/oradata/ORA19C/temp01.dbf
ls: cannot access /u01/app/oracle/oradata/ORA19C/temp01.dbf: No such file or directory
# 문제 없음 -> sort 공간이 많이 필요하지 않아 temp file을 쓰지 않음
HR@ora19c> select * from hr.employees order by salary desc;

# 대용량 sort 발생 -> temp file이 없어 오류 발생
HR@ora19c> select s.*, b.*
from all_objects s, all_objects b
order by 1, 2, 3, 4;  2    3
from all_objects s, all_objects b
     *
ERROR at line 2:
ORA-01116: error in opening database file 201
ORA-01110: data file 201: '/u01/app/oracle/oradata/ORA19C/temp01.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3

temp file 추가

SYS@ora19c> alter tablespace temp add tempfile '/u01/app/oracle/oradata/ORA19C/temp02.dbf' size 10m autoextend on;

Tablespace altered.

SYS@ora19c> select name from v$tempfile;

NAME
--------------------------------------------------
/u01/app/oracle/oradata/ORA19C/temp01.dbf
/u01/app/oracle/oradata/ORA19C/temp02.dbf

손상된 temp file 삭제

# 손상된 temp file 삭제
SYS@ora19c> alter tablespace temp drop tempfile '/u01/app/oracle/oradata/ORA19C/temp01.dbf';

Tablespace altered.

SYS@ora19c> select * from dba_temp_files;

FILE_NAME                         FILE_ID TABLESPACE_NAME                     BYTES     BLOCKS STATUS  RELATIVE_FNO AUT   MAXBYTES  MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS SHARED
------------------------------ ---------- ------------------------------ ---------- ---------- ------- ------------ --- ---------- ---------- ------------ ---------- ----------- -------------
   INST_ID
----------
/u01/app/oracle/oradata/ORA19C          2 TEMP                             10485760       1280 ONLINE             2 YES 3.4360E+10    4194302                 1    9437184        1152 SHARED
/temp02.dbf

temp file 추가

alter tablespace temp add tempfile '/u01/app/oracle/oradata/ORA19C/temp01.dbf' size 5m;

SYS@ora19c> select * from dba_temp_files;

FILE_NAME                         FILE_ID TABLESPACE_NAME                     BYTES     BLOCKS STATUS  RELATIVE_FNO AUT   MAXBYTES  MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS SHARED
------------------------------ ---------- ------------------------------ ---------- ---------- ------- ------------ --- ---------- ---------- ------------ ---------- ----------- -------------
   INST_ID
----------
/u01/app/oracle/oradata/ORA19C          1 TEMP                              5242880        640 ONLINE             1 NO                0          0            0    4194304         512 SHARED
/temp01.dbf

/u01/app/oracle/oradata/ORA19C          2 TEMP                             10485760       1280 ONLINE             2 YES 3.4360E+10    4194302                 1    9437184        1152 SHARED
/temp02.dbf

temp file 크기 수정

alter database tempfile '/u01/app/oracle/oradata/ORA19C/temp01.dbf' resize 10m;

SYS@ora19c> select * from dba_temp_files;

FILE_NAME                                             FILE_ID TABLESPACE_NAME                     BYTES     BLOCKS STATUS  RELATIVE_FNO AUT   MAXBYTES       MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS
-------------------------------------------------- ---------- ------------------------------ ---------- ---------- ------- ------------ --- ---------- ---------- ------------ ---------- -----------
SHARED           INST_ID
------------- ----------
/u01/app/oracle/oradata/ORA19C/temp01.dbf                   1 TEMP                             10485760       1280 ONLINE          1 NO           0          0            0    9437184        1152
SHARED

/u01/app/oracle/oradata/ORA19C/temp02.dbf                   2 TEMP                             10485760       1280 ONLINE          2 YES 3.4360E+10    4194302            1    9437184        1152
SHARED

temp file 자동 확장 기능 활성화

SYS@ora19c> alter database tempfile '/u01/app/oracle/oradata/ORA19C/temp01.dbf' autoextend on;

Database altered.

SYS@ora19c> select * from dba_temp_files;

FILE_NAME                                             FILE_ID TABLESPACE_NAME                     BYTES     BLOCKS STATUS  RELATIVE_FNO AUT   MAXBYTES       MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS
-------------------------------------------------- ---------- ------------------------------ ---------- ---------- ------- ------------ --- ---------- ---------- ------------ ---------- -----------
SHARED           INST_ID
------------- ----------
/u01/app/oracle/oradata/ORA19C/temp01.dbf                   1 TEMP                             10485760       1280 ONLINE          1 YES 3.4360E+10    4194302            1    9437184        1152
SHARED

/u01/app/oracle/oradata/ORA19C/temp02.dbf                   2 TEMP                             10485760       1280 ONLINE          2 YES 3.4360E+10    4194302            1    9437184        1152
SHARED

temp file 삭제

SYS@ora19c> alter tablespace temp drop tempfile '/u01/app/oracle/oradata/ORA19C/temp02.dbf';
alter tablespace temp drop tempfile '/u01/app/oracle/oradata/ORA19C/temp02.dbf'
*
ERROR at line 1:
ORA-25152: TEMPFILE cannot be dropped at this time

SYS@ora19c> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SYS@ora19c> startup
ORACLE instance started.

Total System Global Area  830469472 bytes
Fixed Size                  8901984 bytes
Variable Size             595591168 bytes
Database Buffers          218103808 bytes
Redo Buffers                7872512 bytes
Database mounted.
Database opened.

SYS@ora19c> alter tablespace temp drop tempfile '/u01/app/oracle/oradata/ORA19C/temp02.dbf';

Tablespace altered.

시나리오 12 : temp file 손상 복구

현재 상태 조회

# tempfile 조회
SYS@ora19c> select name from v$tempfile;

NAME
--------------------------------------------------
/u01/app/oracle/oradata/ORA19C/temp01.dbf

# 테이블스페이스 종류 조회
SYS@ora19c> select tablespace_name, contents from dba_tablespaces;

TABLESPACE_NAME                CONTENTS
------------------------------ ---------------------
SYSTEM                         PERMANENT
SYSAUX                         PERMANENT
UNDOTBS1                       UNDO
TEMP                           TEMPORARY
USERS                          PERMANENT
# sort area 크기 조회
SYS@ora19c> show parameter sort_area_size

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
sort_area_size                       integer     65536
# 기본 temp 테이블스페이스 조회
SYS@ora19c> select property_value from database_properties where property_name = 'DEFAULT_TEMP_TABLESPACE';

PROPERTY_VALUE
------------------------------
TEMP

SYS@ora19c> select username, temporary_tablespace from dba_users where username = 'HR';

USERNAME                       TEMPORARY_TABLESPACE
------------------------------ ------------------------------
HR                             TEMP

장애 유발

SYS@ora19c> ! ls /u01/app/oracle/oradata/ORA19C/temp01.dbf
/u01/app/oracle/oradata/ORA19C/temp01.dbf

SYS@ora19c> ! rm /u01/app/oracle/oradata/ORA19C/temp01.dbf

SYS@ora19c> ! ls /u01/app/oracle/oradata/ORA19C/temp01.dbf
ls: cannot access /u01/app/oracle/oradata/ORA19C/temp01.dbf: No such file or directory

새로운 temp tablespace 생성한 후 default temporary tablespace로 지정

SYS@ora19c> create temporary tablespace temp_new tempfile '/u01/app/oracle/oradata/ORA19C/temp_new01.dbf' size 10m autoextend on;

Tablespace created.

SYS@ora19c> alter database default temporary tablespace temp_new;

Database altered.

SYS@ora19c> select property_value from database_properties where property_name = 'DEFAULT_TEMP_TABLESPACE';

PROPERTY_VALUE
------------------------------
TEMP_NEW

SYS@ora19c> select username, temporary_tablespace from dba_users where username = 'HR';

USERNAME                       TEMPORARY_TABLESPACE
------------------------------ ------------------------------
HR                             TEMP_NEW

기존 temp tablespace 삭제

SYS@ora19c> drop tablespace temp including contents and datafiles;

Tablespace dropped.

SYS@ora19c> select tablespace_name, contents from dba_tablespaces;

TABLESPACE_NAME                CONTENTS
------------------------------ ---------------------
SYSTEM                         PERMANENT
SYSAUX                         PERMANENT
UNDOTBS1                       UNDO
USERS                          PERMANENT
TEMP_NEW                       TEMPORARY

원래 temp로 변경

SYS@ora19c> create temporary tablespace temp tempfile '/u01/app/oracle/oradata/ORA19C/temp01.dbf' size 10m autoextend on;

Tablespace created.

SYS@ora19c> alter database default temporary tablespace temp;

Database altered.

SYS@ora19c> select property_value from database_properties where property_name = 'DEFAULT_TEMP_TABLESPACE';

PROPERTY_VALUE
------------------------------
TEMP

SYS@ora19c> select username, temporary_tablespace from dba_users where username = 'HR';

USERNAME                       TEMPORARY_TABLESPACE
------------------------------ ------------------------------
HR                             TEMP

SYS@ora19c> drop tablespace temp_new including contents and datafiles;

Tablespace dropped.

SYS@ora19c> select tablespace_name, contents from dba_tablespaces;

TABLESPACE_NAME                CONTENTS
------------------------------ ---------------------
SYSTEM                         PERMANENT
SYSAUX                         PERMANENT
UNDOTBS1                       UNDO
TEMP                           TEMPORARY
USERS                          PERMANENT

시나리오 13 : temp file 손상 복구

현재 상태 조회

# tempfile 조회
SYS@ora19c> select name from v$tempfile;

NAME
--------------------------------------------------
/u01/app/oracle/oradata/ORA19C/temp01.dbf

# 테이블스페이스 종류 조회
SYS@ora19c> select tablespace_name, contents from dba_tablespaces;

TABLESPACE_NAME                CONTENTS
------------------------------ ---------------------
SYSTEM                         PERMANENT
SYSAUX                         PERMANENT
UNDOTBS1                       UNDO
TEMP                           TEMPORARY
USERS                          PERMANENT
# sort area 크기 조회
SYS@ora19c> show parameter sort_area_size

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
sort_area_size                       integer     65536
# 기본 temp 테이블스페이스 조회
SYS@ora19c> select property_value from database_properties where property_name = 'DEFAULT_TEMP_TABLESPACE';

PROPERTY_VALUE
------------------------------
TEMP

SYS@ora19c> select username, temporary_tablespace from dba_users where username = 'HR';

USERNAME                       TEMPORARY_TABLESPACE
------------------------------ ------------------------------
HR                             TEMP

장애 유발

SYS@ora19c> ! ls /u01/app/oracle/oradata/ORA19C/temp01.dbf
/u01/app/oracle/oradata/ORA19C/temp01.dbf

SYS@ora19c> ! rm /u01/app/oracle/oradata/ORA19C/temp01.dbf

SYS@ora19c> ! ls /u01/app/oracle/oradata/ORA19C/temp01.dbf
ls: cannot access /u01/app/oracle/oradata/ORA19C/temp01.dbf: No such file or directory

데이터베이스 시작 시 temp file이 손상된 경우 자동으로 생성

SYS@ora19c> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SYS@ora19c> startup
ORACLE instance started.

Total System Global Area  830469472 bytes
Fixed Size                  8901984 bytes
Variable Size             595591168 bytes
Database Buffers          218103808 bytes
Redo Buffers                7872512 bytes
Database mounted.
Database opened.

SYS@ora19c> select name from v$tempfile;

NAME
--------------------------------------------------
/u01/app/oracle/oradata/ORA19C/temp01.dbf

SYS@ora19c> ! ls /u01/app/oracle/oradata/ORA19C/temp01.dbf
/u01/app/oracle/oradata/ORA19C/temp01.dbf