# 요약
  << 시나리오 10 >> Undo Data File 손상
<< 시나리오 11 >> 운영중에 Undo Data File 손상 + DB를 내릴 수 없다
<< 시나리오 12 >> 특정 데이터 파일과 아카이브 파일이 손상되었을 경우 불안전 복구를 수행
<< 시나리오 12-2 >> 중간에 Undo Tablespace 수정 후 백업을 하지 않아 기존 백업파일과 SCN 싱크가 맞지 않다.
<< Backup >> 일관성 있는 Backup = Cold Backup = Offline Backup = Closed Backup
<< Backup >> 일관성없는 백업 = Hot Backup = Open Backup = Online Backup

 

 


 

 

<< 시나리오 10 >> Undo Data File 손상
  SELECT a.file#, a.name file_name, b.name tbs_name, a.status, a.checkpoint_change#
FROM v$datafile a, v$tablespace b
WHERE a.ts# = b.ts#;
     FILE# FILE_NAME                                          TBS_NAME   STATUS      CHECKPOINT_CHANGE#
---------- -------------------------------------------------- ---------- ----------- ------------------
         1 /u01/app/oracle/oradata/ora11g/system01.dbf        SYSTEM     SYSTEM                 1148361
         2 /u01/app/oracle/oradata/ora11g/sysaux01.dbf        SYSAUX     ONLINE                 1148361
         3 /u01/app/oracle/oradata/ora11g/undotbs01.dbf       UNDOTBS    ONLINE                 1148361
         4 /u01/app/oracle/oradata/ora11g/users01.dbf         USERS      ONLINE                 1148361
         5 /u01/app/oracle/oradata/ora11g/example01.dbf       EXAMPLE    ONLINE                 1148755


SELECT a.file#,a.name, a.checkpoint_change#,b.status,b.change#,b.time
FROM v$datafile a, v$backup b
WHERE a.file# = b.file#;
     FILE# NAME                                           CHECKPOINT_CHANGE# STATUS         CHANGE# TIME
---------- ---------------------------------------------- ------------------ ----------- ---------- ---------
         1 /u01/app/oracle/oradata/ora11g/system01.dbf               1148361 NOT ACTIVE     1147766 15-JAN-24
         2 /u01/app/oracle/oradata/ora11g/sysaux01.dbf               1148361 NOT ACTIVE     1147766 15-JAN-24
         3 /u01/app/oracle/oradata/ora11g/undotbs01.dbf              1148361 NOT ACTIVE     1147766 15-JAN-24
         4 /u01/app/oracle/oradata/ora11g/users01.dbf                1148361 NOT ACTIVE     1147766 15-JAN-24
         5 /u01/app/oracle/oradata/ora11g/example01.dbf              1148755 NOT ACTIVE     1147766 15-JAN-24


SELECT sequence#, name, first_change#, first_time, next_change#, next_time
FROM v$archived_log;
 SEQUENCE# NAME                                              FIRST_CHANGE# FIRST_TIME  NEXT_CHANGE# NEXT_TIME
---------- ------------------------------------------------- ------------- ----------- ------------ ---------
        49 /home/oracle/arch1/arch_1_49_1154915502.arc             1145390 15-JAN-24        1146954 15-JAN-24
        49 /home/oracle/arch2/arch_1_49_1154915502.arc             1145390 15-JAN-24        1146954 15-JAN-24
...

★ 있어야할 자리에 아카이브 파일이 있는지 데일리 체크 ★
SQL> ! ls /home/oracle/arch*
/home/oracle/arch1:
arch_1_49_1154915502.arc  arch_1_50_1154915502.arc  arch_1_51_1154915502.arc  
arch_1_52_1154915502.arc  arch_1_53_1154915502.arc

/home/oracle/arch2:
arch_1_49_1154915502.arc  arch_1_50_1154915502.arc  arch_1_51_1154915502.arc  
arch_1_52_1154915502.arc  arch_1_53_1154915502.arc


SELECT * FROM v$log_history;
     RECID      STAMP    THREAD#  SEQUENCE# FIRST_CHANGE# FIRST_TI NEXT_CHANGE# RESETLOGS_CHANGE# RESETLOG
---------- ---------- ---------- ---------- ------------- -------- ------------ ----------------- --------
...
        52 1158294836          1         52       1148070 24/01/15      1148089            635002 23/12/07
        53 1158294839          1         53       1148089 24/01/15      1148093            635002 23/12/07


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
        10 _SYSSMU10_4014540061$  PUBLIC UNDOTBS                        ONLINE
         9 _SYSSMU9_2833524074$   PUBLIC UNDOTBS                        ONLINE
         8 _SYSSMU8_2378381138$   PUBLIC UNDOTBS                        ONLINE
         7 _SYSSMU7_281670344$    PUBLIC UNDOTBS                        ONLINE
         6 _SYSSMU6_4002525576$   PUBLIC UNDOTBS                        ONLINE
         5 _SYSSMU5_784711609$    PUBLIC UNDOTBS                        ONLINE
         4 _SYSSMU4_2831617015$   PUBLIC UNDOTBS                        ONLINE
         3 _SYSSMU3_1004418964$   PUBLIC UNDOTBS                        ONLINE
         2 _SYSSMU2_1701567146$   PUBLIC UNDOTBS                        ONLINE
         1 _SYSSMU1_886085095$    PUBLIC UNDOTBS                        ONLINE



<< HR SESSION >> 테스트 : 트랜잭션 발생

UPDATE hr.employees SET salary=200 WHERE employee_id=100;



# 어떤 유저가 어떤 언두 세그먼트를 이용하고 있는가
SELECT s.username,s.sid,s.serial#,r.name,t.xidusn,t.ubafil,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;
USERNAME        SID    SERIAL# NAME                                   XIDUSN     UBAFIL     UBABLK  USED_UBLK
-------- ---------- ---------- ---------------------------------- ---------- ---------- ---------- ----------
SYS             184        207 _SYSSMU7_281670344$                         7          3        534          1
HR              183        253 _SYSSMU10_4014540061$                      10          3        327          1

SID         세션고유ID
NAME        언두 세그먼트 이름
xidusn      언두세그먼트번호
ubafil      언두세그먼트에 속한 파일번호
ubablk      언두블럭
used_ublk   사용중인 블럭 수


SQL> SHOW PARAMETER undo
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_management                      string      AUTO
undo_retention                       integer     900
undo_tablespace                      string      UNDOTBS

> 언두 정보 -> parameter file -> spfile or pfile

AUTO            언두세그먼트 자동관리, 기본값 10개씩 확장했다가 필요없으면 10개씩 offline 조절
undo_retention  커밋 하더라도 1800초 동안은 이전값을 가지고 있다. 단, 여유공간이 있어야한다.
                 
참고) undo_retention : 1800 -> 900
SQL> ALTER SYSTEM SET undo_retention=900 [SCOPE=BOTH 기본값] ;


SQL> SHUTDOWN IMMEDIATE


# 장애 유발
SQL>  ! rm /u01/app/oracle/oradata/ora11g/undotbs01.dbf


SQL> STARTUP
Database mounted.
ORA-01157: cannot identify/lock data file 3 - see DBWR trace file
ORA-01110: data file 3: '/u01/app/oracle/oradata/ora11g/undotbs01.dbf'


SQL> SELECT * FROM v$recover_file;
     FILE# ONLINE  ONLINE_STATUS ERROR                                                      CHANGE# TIME
---------- ------- ------------- ------------------------------------------------------- ---------- ---------
         3 ONLINE  ONLINE        FILE NOT FOUND                                                   0

>> 시스템, 언두는 오프라인 불가


# Restore
SQL>  ! cp -av /home/oracle/backup/arch/hot_20240115/undotbs01.dbf /u01/app/oracle/oradata/ora11g/


# Recover
SQL> RECOVER TABLESPACE undotbs;
ORA-00279: change 1147766 generated at 01/15/2024 04:27:12 needed for thread 1
ORA-00289: suggestion : /home/oracle/arch2/arch_1_50_1154915502.arc
ORA-00280: change 1147766 for thread 1 is in sequence #50

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
AUTO

ORA-00279: change 1147942 generated at 01/15/2024 04:32:40 needed for thread 1
ORA-00289: suggestion : /home/oracle/arch2/arch_1_51_1154915502.arc
ORA-00280: change 1147942 for thread 1 is in sequence #51

Log applied.
Media recovery complete.


SQL> ALTER DATABASE OPEN;



<< HR SESSION >>

SELECT salary FROM hr.employees WHERE employee_id=100;
    SALARY
----------
     24000

UPDATE hr.employees SET salary=200 WHERE employee_id=100;



SELECT s.username,s.sid,s.serial#,r.name,t.xidusn,t.ubafil,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;
USERNAME          SID    SERIAL# NAME                                 XIDUSN     UBAFIL     UBABLK  USED_UBLK
---------- ---------- ---------- -------------------------------- ---------- ---------- ---------- ----------
HR                 10         33 _SYSSMU2_1701567146$                      2          3        152          1



SQL> ROLLBACK;

 

<< 시나리오 11 >> 운영중에 Undo Data File 손상 + DB를 내릴 수 없다
  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
        10 _SYSSMU10_4014540061$  PUBLIC UNDOTBS                        ONLINE
         9 _SYSSMU9_2833524074$   PUBLIC UNDOTBS                        ONLINE
         8 _SYSSMU8_2378381138$   PUBLIC UNDOTBS                        ONLINE
         7 _SYSSMU7_281670344$    PUBLIC UNDOTBS                        ONLINE
         6 _SYSSMU6_4002525576$   PUBLIC UNDOTBS                        ONLINE
         5 _SYSSMU5_784711609$    PUBLIC UNDOTBS                        ONLINE
         4 _SYSSMU4_2831617015$   PUBLIC UNDOTBS                        ONLINE
         3 _SYSSMU3_1004418964$   PUBLIC UNDOTBS                        ONLINE
         2 _SYSSMU2_1701567146$   PUBLIC UNDOTBS                        ONLINE
         1 _SYSSMU1_886085095$    PUBLIC UNDOTBS                        ONLINE


SQL> SHOW PARAMETER undo
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_management                      string      AUTO
undo_retention                       integer     900
undo_tablespace                      string      UNDOTBS



<< HR SESSION >>

SQL> SELECT salary FROM hr.employees WHERE employee_id=100;
    SALARY
----------
     24000

SQL> UPDATE hr.employees SET salary=200 WHERE employee_id=100;



SELECT s.username,s.sid,s.serial#,r.name,t.xidusn,t.ubafil,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;
USERNAME          SID    SERIAL# NAME                                 XIDUSN     UBAFIL     UBABLK  USED_UBLK
---------- ---------- ---------- -------------------------------- ---------- ---------- ---------- ----------
HR                 10         33 _SYSSMU2_1701567146$                      2          3        152          1



# 장애 유발
SQL> ! rm /u01/app/oracle/oradata/ora11g/undotbs01.dbf



> 모니터링중에 발견
--Mon Jan 15 20:59:59 2024
--Errors in file /u01/app/oracle/diag/rdbms/ora11g/ora11g/trace/ora11g_j000_9748.trc:
--ORA-12012: error on auto execute of job 3
--ORA-01116: error in opening database file 3
--ORA-01110: data file 3: '/u01/app/oracle/oradata/ora11g/undotbs01.dbf'
--ORA-27041: unable to open file
--Linux Error: 2: No such file or directory
--Additional information: 3


SQL> ! ls /u01/app/oracle/oradata/ora11g/undotbs01.dbf
ls: cannot access /u01/app/oracle/oradata/ora11g/undotbs01.dbf: No such file or directory

>> 언두 파일 손상 ?! DB는 절대 내릴 수 없다!!


# 새로운 언두 테이블스페이스 생성
CREATE UNDO TABLESPACE undo_new DATAFILE '/u01/app/oracle/oradata/ora11g/undo_new01.dbf' 
SIZE 10M AUTOEXTEND ON;


SELECT a.file#, a.name file_name, b.name tbs_name, a.status, a.checkpoint_change#
FROM v$datafile a, v$tablespace b
WHERE a.ts# = b.ts#;
     FILE# FILE_NAME                                          TBS_NAME   STATUS      CHECKPOINT_CHANGE#
---------- -------------------------------------------------- ---------- ----------- ------------------
         1 /u01/app/oracle/oradata/ora11g/system01.dbf        SYSTEM     SYSTEM                 1155496
         2 /u01/app/oracle/oradata/ora11g/sysaux01.dbf        SYSAUX     ONLINE                 1155496
         3 /u01/app/oracle/oradata/ora11g/undotbs01.dbf       UNDOTBS    ONLINE                 1155496
         4 /u01/app/oracle/oradata/ora11g/users01.dbf         USERS      ONLINE                 1155496
         5 /u01/app/oracle/oradata/ora11g/example01.dbf       EXAMPLE    ONLINE                 1155496
         6 /u01/app/oracle/oradata/ora11g/undo_new01.dbf      UNDO_NEW   ONLINE                 1157255


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
        10 _SYSSMU10_4014540061$  PUBLIC UNDOTBS                        ONLINE
         9 _SYSSMU9_2833524074$   PUBLIC UNDOTBS                        ONLINE
         8 _SYSSMU8_2378381138$   PUBLIC UNDOTBS                        ONLINE
         7 _SYSSMU7_281670344$    PUBLIC UNDOTBS                        ONLINE
         6 _SYSSMU6_4002525576$   PUBLIC UNDOTBS                        ONLINE
         5 _SYSSMU5_784711609$    PUBLIC UNDOTBS                        ONLINE
         4 _SYSSMU4_2831617015$   PUBLIC UNDOTBS                        ONLINE
         3 _SYSSMU3_1004418964$   PUBLIC UNDOTBS                        ONLINE
         2 _SYSSMU2_1701567146$   PUBLIC UNDOTBS                        ONLINE
         1 _SYSSMU1_886085095$    PUBLIC UNDOTBS                        ONLINE
        20 _SYSSMU20_2779260104$  PUBLIC UNDO_NEW                       OFFLINE
        19 _SYSSMU19_3969571117$  PUBLIC UNDO_NEW                       OFFLINE
        18 _SYSSMU18_2511651061$  PUBLIC UNDO_NEW                       OFFLINE
        17 _SYSSMU17_300744309$   PUBLIC UNDO_NEW                       OFFLINE
        16 _SYSSMU16_2366164722$  PUBLIC UNDO_NEW                       OFFLINE
        15 _SYSSMU15_1354978705$  PUBLIC UNDO_NEW                       OFFLINE
        14 _SYSSMU14_2609685890$  PUBLIC UNDO_NEW                       OFFLINE
        13 _SYSSMU13_3818580637$  PUBLIC UNDO_NEW                       OFFLINE
        12 _SYSSMU12_3309662486$  PUBLIC UNDO_NEW                       OFFLINE
        11 _SYSSMU11_3300737399$  PUBLIC UNDO_NEW                       OFFLINE


# Undo Tablespace로 지정
SQL>  ALTER SYSTEM SET undo_tablespace = undo_new;


SQL> SHOW PARAMETER undo
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_management                      string      AUTO
undo_retention                       integer     900
undo_tablespace                      string      UNDO_NEW


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
        10 _SYSSMU10_4014540061$  PUBLIC UNDOTBS                        OFFLINE
         9 _SYSSMU9_2833524074$   PUBLIC UNDOTBS                        OFFLINE
         8 _SYSSMU8_2378381138$   PUBLIC UNDOTBS                        OFFLINE
         7 _SYSSMU7_281670344$    PUBLIC UNDOTBS                        OFFLINE
         6 _SYSSMU6_4002525576$   PUBLIC UNDOTBS                        OFFLINE
         5 _SYSSMU5_784711609$    PUBLIC UNDOTBS                        OFFLINE
         4 _SYSSMU4_2831617015$   PUBLIC UNDOTBS                        OFFLINE
         3 _SYSSMU3_1004418964$   PUBLIC UNDOTBS                        OFFLINE
         2 _SYSSMU2_1701567146$   PUBLIC UNDOTBS                        ONLINE
         1 _SYSSMU1_886085095$    PUBLIC UNDOTBS                        OFFLINE
        20 _SYSSMU20_2779260104$  PUBLIC UNDO_NEW                       ONLINE
        19 _SYSSMU19_3969571117$  PUBLIC UNDO_NEW                       ONLINE
        18 _SYSSMU18_2511651061$  PUBLIC UNDO_NEW                       ONLINE
        17 _SYSSMU17_300744309$   PUBLIC UNDO_NEW                       ONLINE
        16 _SYSSMU16_2366164722$  PUBLIC UNDO_NEW                       ONLINE
        15 _SYSSMU15_1354978705$  PUBLIC UNDO_NEW                       ONLINE
        14 _SYSSMU14_2609685890$  PUBLIC UNDO_NEW                       ONLINE
        13 _SYSSMU13_3818580637$  PUBLIC UNDO_NEW                       ONLINE
        12 _SYSSMU12_3309662486$  PUBLIC UNDO_NEW                       ONLINE
        11 _SYSSMU11_3300737399$  PUBLIC UNDO_NEW                       ONLINE

>> 장애 발생 전 트랜잭션 작업중이던 것


SELECT s.username,s.sid,s.serial#,r.name,t.xidusn,t.ubafil,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;
USERNAME          SID    SERIAL# NAME                                 XIDUSN     UBAFIL     UBABLK  USED_UBLK
---------- ---------- ---------- -------------------------------- ---------- ---------- ---------- ----------
HR                 10         33 _SYSSMU2_1701567146$                      2          3        152          1



<< HR NEW SESSION >>

UPDATE hr.employees SET salary = 1000 WHERE employee_id = 200;



SELECT s.username,s.sid,s.serial#,r.name,t.xidusn,t.ubafil,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;
USERNAME          SID    SERIAL# NAME                                 XIDUSN     UBAFIL     UBABLK  USED_UBLK
---------- ---------- ---------- -------------------------------- ---------- ---------- ---------- ----------
HR                 10         33 _SYSSMU2_1701567146$   -- old             2          3        152          1
HR                 22        117 _SYSSMU19_3969571117$  -- new            19          6        260          1


SELECT a.name, b.status FROM v$rollname a, v$rollstat b WHERE a.usn = b.usn;
NAME                                            STATUS
----------------------------------------------- ---------------
SYSTEM                                          ONLINE
_SYSSMU2_1701567146$                            PENDING OFFLINE
_SYSSMU11_3300737399$                           ONLINE
_SYSSMU12_3309662486$                           ONLINE
_SYSSMU13_3818580637$                           ONLINE
_SYSSMU14_2609685890$                           ONLINE
_SYSSMU15_1354978705$                           ONLINE
_SYSSMU16_2366164722$                           ONLINE
_SYSSMU17_300744309$                            ONLINE
_SYSSMU18_2511651061$                           ONLINE
_SYSSMU19_3969571117$                           ONLINE
_SYSSMU20_2779260104$                           ONLINE


# 기존 세션 즉시종료
SQL> ALTER SYSTEM KILL SESSION '10,33' IMMEDIATE;


SELECT s.username,s.sid,s.serial#,r.name,t.xidusn,t.ubafil,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;
USERNAME          SID    SERIAL# NAME                                 XIDUSN     UBAFIL     UBABLK  USED_UBLK
---------- ---------- ---------- -------------------------------- ---------- ---------- ---------- ----------
HR                 22        117 _SYSSMU19_3969571117$                    19          6        260          1


SELECT a.name, b.status FROM v$rollname a, v$rollstat b WHERE a.usn = b.usn;
NAME                                            STATUS
----------------------------------------------- -----------
SYSTEM                                          ONLINE
_SYSSMU11_3300737399$                           ONLINE
_SYSSMU12_3309662486$                           ONLINE
_SYSSMU13_3818580637$                           ONLINE
_SYSSMU14_2609685890$                           ONLINE
_SYSSMU15_1354978705$                           ONLINE
_SYSSMU16_2366164722$                           ONLINE
_SYSSMU17_300744309$                            ONLINE
_SYSSMU18_2511651061$                           ONLINE
_SYSSMU19_3969571117$                           ONLINE
_SYSSMU20_2779260104$                           ONLINE


# 기존 언두가 OFFLINE일 경우 기존 테이블스페이스 삭제
SQL> DROP TABLESPACE undotbs INCLUDING CONTENTS AND DATAFILES;

  # 어떤 언두세그먼트가 PENDING OFFLINE이면 테이블스페이스를 삭제할 수 없을 경우 수동 작업


SELECT a.name, b.status FROM v$rollname a, v$rollstat b WHERE a.usn = b.usn;
NAME                                            STATUS
----------------------------------------------- -----------
SYSTEM                                          ONLINE
_SYSSMU2_1701567146$                            PENDING OFFLINE
_SYSSMU11_3300737399$                           ONLINE
_SYSSMU12_3309662486$                           ONLINE
_SYSSMU13_3818580637$                           ONLINE
_SYSSMU14_2609685890$                           ONLINE
_SYSSMU15_1354978705$                           ONLINE
_SYSSMU16_2366164722$                           ONLINE
_SYSSMU17_300744309$                            ONLINE
_SYSSMU18_2511651061$                           ONLINE
_SYSSMU19_3969571117$                           ONLINE
_SYSSMU20_2779260104$                           ONLINE

>> 세션 kill 했는데 아직도 PENDING OFFLINE ?


1. 현재 일자로 pfile 생성
SQL>CREATE PFILE = '$ORACLE_HOME/dbs/initora11g_20240116.ora' FROM SPFILE;


2. DB 정상 종료
SQL> SHUTDOWN IMMEDIATE


3. pfile 편집
SQL> ! vi $ORACLE_HOME/dbs/initora11g_20240116.ora

_offline_rollback_segments=(_SYSSMU2_1701567146$, ...)

>> 수동으로 오프라인만들기 추가


4. pfile 로 DB 시작
SQL> STARTUP PFILE=$ORACLE_HOME/dbs/initora11g_20240116.ora
Database mounted.
ORA-01157: cannot identify/lock data file 3 - see DBWR trace file
ORA-01110: data file 3: '/u01/app/oracle/oradata/ora11g/undotbs01.dbf'


5. 기존 Undo File OFFLINE
SQL> ALTER DATABASE DATAFILE '/u01/app/oracle/oradata/ora11g/undotbs01.dbf' OFFLINE;


SELECT a.file#, a.name file_name, b.name tbs_name, a.status, a.checkpoint_change#
FROM v$datafile a, v$tablespace b
WHERE a.ts# = b.ts#;
     FILE# FILE_NAME                                          TBS_NAME   STATUS      CHECKPOINT_CHANGE#
---------- -------------------------------------------------- ---------- ----------- ------------------
         1 /u01/app/oracle/oradata/ora11g/system01.dbf        SYSTEM     SYSTEM                 1155496
         2 /u01/app/oracle/oradata/ora11g/sysaux01.dbf        SYSAUX     ONLINE                 1155496
         4 /u01/app/oracle/oradata/ora11g/users01.dbf         USERS      ONLINE                 1155496
         5 /u01/app/oracle/oradata/ora11g/example01.dbf       EXAMPLE    ONLINE                 1155496
         3 /u01/app/oracle/oradata/ora11g/undotbs01.dbf       UNDOTBS    RECOVER                1155496
         6 /u01/app/oracle/oradata/ora11g/undo_new01.dbf      UNDO_NEW   ONLINE                 1157255


6. DB OPEN
ALTER DATABASE OPEN;


7. 기존 언두테이블스페이스 삭제
SQL> DROP TABLESPACE undotbs INCLUDING CONTENTS AND DATAFILES;


SELECT a.file#, a.name file_name, b.name tbs_name, a.status, a.checkpoint_change#
FROM v$datafile a, v$tablespace b
WHERE a.ts# = b.ts#;
     FILE# FILE_NAME                                          TBS_NAME   STATUS      CHECKPOINT_CHANGE#
---------- -------------------------------------------------- ---------- ----------- ------------------
         1 /u01/app/oracle/oradata/ora11g/system01.dbf        SYSTEM     SYSTEM                 1178935
         2 /u01/app/oracle/oradata/ora11g/sysaux01.dbf        SYSAUX     ONLINE                 1178935
         4 /u01/app/oracle/oradata/ora11g/users01.dbf         USERS      ONLINE                 1178935
         5 /u01/app/oracle/oradata/ora11g/example01.dbf       EXAMPLE    ONLINE                 1178935
         6 /u01/app/oracle/oradata/ora11g/undo_new01.dbf      UNDO_NEW   ONLINE                 1178935

  # PFILE -> SPFILE로 DB OPEN


SQL> SHUTDOWN IMMEDIATE


SQL> STARTUP



SQL> SHOW PARAMETER spfile
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      /u01/app/oracle/product/11.2.0.4/db_1/dbs/spfileora11g.ora

  # Undo Tablespace UNDO_NEW -> UNDOTBS 변경


1. Undo Tablespace 재생성
CREATE UNDO TABLESPACE undotbs DATAFILE '/u01/app/oracle/oradata/ora11g/undotbs01.dbf'
SIZE 10M AUTOEXTEND ON EXTENT MANAGEMENT LOCAL;


2. Undo Tablespace 설정
SQL> ALTER SYSTEM SET undo_tablespace = undotbs;


SQL> SHOW PARAMETER undo
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_management                      string      AUTO
undo_retention                       integer     900
undo_tablespace                      string      UNDOTBS


SELECT segment_id, segment_name, owner, tablespace_name, status
FROM dba_rollback_segs;


3. 기존 Undo Tablespace 삭제
SQL> DROP TABLESPACE undo_new INCLUDING CONTENTS AND DATAFILES;


SELECT thread#,sequence#,archived,status,first_change#,first_time,next_change#,next_time
FROM v$log;
   THREAD#  SEQUENCE# ARCHIVED  STATUS      FIRST_CHANGE# FIRST_TIME  NEXT_CHANGE# NEXT_TIME
---------- ---------- --------- ----------- ------------- ----------- ------------ ---------
         1         54 YES       INACTIVE          1148093 15-JAN-24        1178934 15-JAN-24
         1         55 NO        CURRENT           1178934 15-JAN-24     2.8147E+14
         1         53 YES       INACTIVE          1148089 15-JAN-24        1148093 15-JAN-24


SELECT a.file#, a.name file_name, b.name tbs_name, a.status, a.checkpoint_change#
FROM v$datafile a, v$tablespace b
WHERE a.ts# = b.ts#;
     FILE# FILE_NAME                                          TBS_NAME   STATUS      CHECKPOINT_CHANGE#
---------- -------------------------------------------------- ---------- ----------- ------------------
         1 /u01/app/oracle/oradata/ora11g/system01.dbf        SYSTEM     SYSTEM                 1180495
         2 /u01/app/oracle/oradata/ora11g/sysaux01.dbf        SYSAUX     ONLINE                 1180495
         3 /u01/app/oracle/oradata/ora11g/undotbs01.dbf       UNDOTBS    ONLINE                 1180923
         4 /u01/app/oracle/oradata/ora11g/users01.dbf         USERS      ONLINE                 1180495
         5 /u01/app/oracle/oradata/ora11g/example01.dbf       EXAMPLE    ONLINE                 1180495


>>> undo tablespace 신규생성 = DataFile 정보 변경 = 백업하자

<< 시나리오 12 >> 특정 데이터 파일과 아카이브 파일이 손상되었을 경우 불안전 복구를 수행
  SELECT a.file#,a.name, a.checkpoint_change#,b.status,b.change#,b.time
FROM v$datafile a, v$backup b
WHERE a.file# = b.file#;
     FILE# NAME                                            CHECKPOINT_CHANGE# STATUS         CHANGE# TIME
---------- ----------------------------------------------- ------------------ ----------- ---------- ---------
         1 /u01/app/oracle/oradata/ora11g/system01.dbf                1156507 NOT ACTIVE     1156323 16-JAN-24
         2 /u01/app/oracle/oradata/ora11g/sysaux01.dbf                1156507 NOT ACTIVE     1156323 16-JAN-24
         3 /u01/app/oracle/oradata/ora11g/undotbs01.dbf               1156507 NOT ACTIVE     1156323 16-JAN-24
         4 /u01/app/oracle/oradata/ora11g/users01.dbf                 1156507 NOT ACTIVE     1156323 16-JAN-24
         5 /u01/app/oracle/oradata/ora11g/example01.dbf               1156507 NOT ACTIVE     1156323 16-JAN-24


SQL> ALTER SYSTEM SWITCH LOGFILE;
SQL> ALTER SYSTEM SWITCH LOGFILE;


SELECT sequence#, name, first_change#, first_time, next_change#, next_time
FROM v$archived_log;
 SEQUENCE# NAME                                            FIRST_CHANGE# FIRST_TIME  NEXT_CHANGE# NEXT_TIME
---------- ----------------------------------------------- ------------- ----------- ------------ ---------
        49 /home/oracle/arch1/arch_1_49_1154915502.arc           1145390 15-JAN-24        1146954 15-JAN-24
        49 /home/oracle/arch2/arch_1_49_1154915502.arc           1145390 15-JAN-24        1146954 15-JAN-24
        50 /home/oracle/arch1/arch_1_50_1154915502.arc           1146954 15-JAN-24        1155615 16-JAN-24
        50 /home/oracle/arch2/arch_1_50_1154915502.arc           1146954 15-JAN-24        1155615 16-JAN-24
        51 /home/oracle/arch1/arch_1_51_1154915502.arc           1155615 16-JAN-24        1156507 16-JAN-24
        51 /home/oracle/arch2/arch_1_51_1154915502.arc           1155615 16-JAN-24        1156507 16-JAN-24
        52 /home/oracle/arch1/arch_1_52_1154915502.arc           1156507 16-JAN-24        1158351 16-JAN-24
        52 /home/oracle/arch2/arch_1_52_1154915502.arc           1156507 16-JAN-24        1158351 16-JAN-24
        53 /home/oracle/arch1/arch_1_53_1154915502.arc           1158351 16-JAN-24        1158354 16-JAN-24
        53 /home/oracle/arch2/arch_1_53_1154915502.arc           1158351 16-JAN-24        1158354 16-JAN-24


SELECT thread#,sequence#,archived,status,first_change#,first_time,next_change#,next_time
FROM v$log;
   THREAD#  SEQUENCE# ARCHIVED  STATUS      FIRST_CHANGE# FIRST_TIME  NEXT_CHANGE# NEXT_TIME
---------- ---------- --------- ----------- ------------- ----------- ------------ ---------
         1         54 NO        CURRENT           1158354 16-JAN-24     2.8147E+14
         1         52 YES       ACTIVE            1156507 16-JAN-24        1158351 16-JAN-24
         1         53 YES       ACTIVE            1158351 16-JAN-24        1158354 16-JAN-24



# 장애발생
SQL> ! rm /home/oracle/arch1/*.*
SQL> ! rm /home/oracle/arch2/*.*
SQL> ! rm /u01/app/oracle/oradata/ora11g/example01.dbf



SQL> ALTER SYSTEM CHECKPOINT;
SQL> ALTER SYSTEM CHECKPOINT;

>> Alert Log 반응이 없을 수 도 있다..


SQL> SHUTDOWN IMMEDIATE


SQL> STARTUP
Database mounted.
ORA-01157: cannot identify/lock data file 5 - see DBWR trace file
ORA-01110: data file 5: '/u01/app/oracle/oradata/ora11g/example01.dbf'


SQL> SELECT * FROM v$recover_file;
     FILE# ONLINE  ONLINE_STATUS ERROR                                                      CHANGE# TIME
---------- ------- ------------- ------------------------------------------------------- ---------- ---------
         5 ONLINE  ONLINE        FILE NOT FOUND                                                   0


SQL> ALTER DATABASE DATAFILE 5 OFFLINE;


SQL> ALTER DATABASE OPEN;


# RESTORE
SQL> ! cp -av /home/oracle/backup/arch/hot_20240116/example01.dbf /u01/app/oracle/oradata/ora11g/


# RECOVERY
SQL> RECOVER TABLESPACE example;
ORA-00279: change 1147766 generated at 01/15/2024 04:27:12 needed for thread 1
ORA-00289: suggestion : /home/oracle/arch2/arch_1_50_1154915502.arc
ORA-00280: change 1147766 for thread 1 is in sequence #50

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
AUTO

ORA-00308: cannot open archived log '/home/oracle/arch2/arch_1_50_1154915502.arc'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3

ORA-00308: cannot open archived log '/home/oracle/arch2/arch_1_50_1154915502.arc'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3

>> 완전복구 시도 실패 : 아카이브가 없다

# 완전 복구 작업을 수행하기 위해서는 마지막 백업파일 이후의 변경 이력정보가 있는 아카이브 파일이 있어야하는데
없어서 복구 작업 실패


# cancel base recovery 시도

SQL> RECOVER TABLESPACE example
ORA-00279: change 1147766 generated at 01/15/2024 04:27:12 needed for thread 1
ORA-00289: suggestion : /home/oracle/arch2/arch_1_50_1154915502.arc
ORA-00280: change 1147766 for thread 1 is in sequence #50

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
CANCEL

Media recovery cancelled.

>> 성공?!

SQL> ALTER TABLESPACE example ONLINE;
ORA-01113: file 5 needs media recovery
ORA-01110: data file 5: '/u01/app/oracle/oradata/ora11g/example01.dbf'

>> 복구 실패

# 불안전한 복구는 테이블스페이스 레벨이 아닌 데이터베이스 레벨에서 수행해야한다.
# 아카이브파일 손상되었을 경우, 전체 데이터베이스를 과거 시간으로 되돌아 가야하는 복구 방식을 수행해야 한다.


# DB종료
SQL> SHUTDOWN ABORT


# Data File Restore
SQL> ! cp -av /home/oracle/backup/arch/cold_20240116/*.dbf /u01/app/oracle/oradata/ora11g/



SQL> STARTUP MOUNT


SQL> RECOVER DATABASE UNTIL CANCEL;
ORA-00279: change 1155931 generated at 01/16/2024 01:21:24 needed for thread 1
ORA-00289: suggestion : /home/oracle/arch2/arch_1_51_1154915502.arc
ORA-00280: change 1155931 for thread 1 is in sequence #51

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
CANCEL

Media recovery cancelled.


        >>>>> 시나리오 12-2. 복구파일에 문제가 생겼다면 ??


SQL> ALTER DATABASE OPEN RESETLOGS;

>> 복구한 데이터파일과 컨트롤파일 정보가 달라 resetlogs : seq# 다시 1번부터 시작


SELECT thread#,sequence#,archived,status,first_change#,first_time,next_change#,next_time
FROM v$log;
   THREAD#  SEQUENCE# ARCHIVED  STATUS      FIRST_CHANGE# FIRST_TIME  NEXT_CHANGE# NEXT_TIME
---------- ---------- --------- ----------- ------------- ----------- ------------ ---------
         1          1 NO        CURRENT           1155932 16-JAN-24     2.8147E+14
         1          0 YES       UNUSED                  0                        0
         1          0 YES       UNUSED                  0                        0


** 불안전한 복구 = RESETLOGS 필수

# RESETLOGS 몇번 수행했는가
SELECT * FROM v$database_incarnation;
INCARNATION# RESETLOGS_CHANGE# RESETLOGS_TIME PRIOR_RESETLOGS PRIOR_RESETLOGS STATUS      RESETLOGS_ID
                                              _CHANGE#        _TIME
------------ ----------------- -------------- --------------- --------------- ----------- ------------ 
           1                 1 25-AUG-13                    0                 PARENT         824361512
           2            635002 07-DEC-23                    1 25-AUG-13       PARENT        1154915502
           3           1155932 16-JAN-24               635002 07-DEC-23       CURRENT       1158372877

ALTER SYSTEM SWITCH LOGFILE;


SELECT name,sequence#,first_change#,first_time,next_change#,next_time
FROM v$archived_log;
NAME                                             SEQUENCE# FIRST_CHANGE# FIRST_TIME  NEXT_CHANGE# NEXT_TIME
----------------------------------------------- ---------- ------------- ----------- ------------ ---------
...
/home/oracle/arch1/arch_1_54_1154915502.arc             54       1158354 16-JAN-24        1159310 16-JAN-24
/home/oracle/arch2/arch_1_54_1154915502.arc             54       1158354 16-JAN-24        1159310 16-JAN-24
/home/oracle/arch1/arch_1_1_1158372877.arc               1       1155932 16-JAN-24        1159428 16-JAN-24
/home/oracle/arch2/arch_1_1_1158372877.arc               1       1155932 16-JAN-24        1159428 16-JAN-24

/home/oracle/arch2/arch_1_1_[RESETLOGS_ID].arc

>> RESETLOGS_ID 로 DB오픈
>> 완전히 과거로 가는게 아닌 이상, RESETLOGS_ID가 다른 과거파일에서 현재까지로 복구는 불가하다


# 데이터베이스를 resetlogs를 이용해서 open 한 후에 과거 백업본은 사용할 수 없다.
현재 상태에서 일관성있는 백업과 일관성 없는 백업을 수행 해야한다. 과거의 아카이브 파일도 필요없다.

SQL> ! rm /home/oracle/arch1/arch_1_54_1154915502.arc
SQL> ! rm /home/oracle/arch2/arch_1_54_1154915502.arc


SQL> ! ls /home/oracle/arch*
/home/oracle/arch1:
arch_1_1_1158372877.arc

/home/oracle/arch2:
arch_1_1_1158372877.arc

 

<< 시나리오 12-2 >> 중간에 Undo Tablespace 수정 후 백업을 하지 않아 기존 백업파일과 SCN 싱크가 맞지 않다.
  ...

# Data File Restore
SQL> ! cp -av /home/oracle/backup/arch/cold_20240115/*.dbf /u01/app/oracle/oradata/ora11g/


SQL> STARTUP MOUNT


SQL> RECOVER DATABASE UNTIL CANCEL;

ORA-00283: recovery session canceled due to errors
ORA-01110: data file 3: '/u01/app/oracle/oradata/ora11g/undotbs01.dbf'
ORA-01122: database file 3 failed verification check
ORA-01110: data file 3: '/u01/app/oracle/oradata/ora11g/undotbs01.dbf'
ORA-01203: wrong incarnation of this file - wrong creation SCN

>> 복원한 undotbs01.dbf 파일과 Control File 내 싱크가 맞지 않아 데이터파일만 복구 불가
>> 완전 망한거다. 과거로 완전 복구


SQL> SHUTDOWN ABORT


# Restore : DataFile, ControlFile, RedoLogFile
! cp -av /home/oracle/backup/arch/cold_20240115/*.dbf /u01/app/oracle/oradata/ora11g/
! cp -av /home/oracle/backup/arch/cold_20240115/*.ctl /u01/app/oracle/oradata/ora11g/
! cp -av /home/oracle/backup/arch/cold_20240115/*.log /u01/app/oracle/oradata/ora11g/


SQL> STARTUP


SELECT a.file#, a.name file_name, b.name tbs_name, a.status, a.checkpoint_change#
FROM v$datafile a, v$tablespace b
WHERE a.ts# = b.ts#;
     FILE# FILE_NAME                                          TBS_NAME   STATUS      CHECKPOINT_CHANGE#
---------- -------------------------------------------------- ---------- ----------- ------------------
         1 /u01/app/oracle/oradata/ora11g/system01.dbf        SYSTEM     SYSTEM                 1147247
         2 /u01/app/oracle/oradata/ora11g/sysaux01.dbf        SYSAUX     ONLINE                 1147247
         3 /u01/app/oracle/oradata/ora11g/undotbs01.dbf       UNDOTBS    ONLINE                 1147247
         4 /u01/app/oracle/oradata/ora11g/users01.dbf         USERS      ONLINE                 1147247
         5 /u01/app/oracle/oradata/ora11g/example01.dbf       EXAMPLE    ONLINE                 1147247


SELECT thread#,sequence#,archived,status,first_change#,first_time,next_change#,next_time
FROM v$log;
   THREAD#  SEQUENCE# ARCHIVED  STATUS      FIRST_CHANGE# FIRST_TIME  NEXT_CHANGE# NEXT_TIME
---------- ---------- --------- ----------- ------------- ----------- ------------ ---------
         1         48 YES       INACTIVE          1145387 15-JAN-24        1145390 15-JAN-24
         1         49 YES       INACTIVE          1145390 15-JAN-24        1146954 15-JAN-24
         1         50 NO        CURRENT           1146954 15-JAN-24     2.8147E+14


ALTER SYSTEM ARCHIVE LOG CURRENT


SELECT name,sequence#,first_change#,first_time,next_change#,next_time
FROM v$archived_log;
NAME                                             SEQUENCE# FIRST_CHANGE# FIRST_TIME  NEXT_CHANGE# NEXT_TIME
----------------------------------------------- ---------- ------------- ----------- ------------ ---------
/home/oracle/arch1/arch_1_49_1154915502.arc             49       1145390 15-JAN-24        1146954 15-JAN-24
/home/oracle/arch2/arch_1_49_1154915502.arc             49       1145390 15-JAN-24        1146954 15-JAN-24
/home/oracle/arch1/arch_1_50_1154915502.arc             50       1146954 15-JAN-24        1155615 16-JAN-24
/home/oracle/arch2/arch_1_50_1154915502.arc             50       1146954 15-JAN-24        1155615 16-JAN-24

 


 

<< Backup >> 일관성 있는 Backup = Cold Backup = Offline Backup = Closed Backup
  # /home/oracle/backup/arch/cold_20240116
# seq#2


SELECT thread#,sequence#,archived,status,first_change#,first_time,next_change#,next_time
FROM v$log;
   THREAD#  SEQUENCE# ARCHIVED  STATUS          FIRST_CHANGE# FIRST_TIME  NEXT_CHANGE# NEXT_TIME
---------- ---------- --------- --------------- ------------- ----------- ------------ ---------
         1          1 YES       INACTIVE              1155932 16-JAN-24        1159428 16-JAN-24
         1          2 NO        CURRENT               1159428 16-JAN-24     2.8147E+14
         1          0 YES       UNUSED                      0                        0


SELECT a.file#, a.name file_name, b.name tbs_name, a.status, a.checkpoint_change#
FROM v$datafile a, v$tablespace b
WHERE a.ts# = b.ts#;
     FILE# FILE_NAME                                          TBS_NAME   STATUS          CHECKPOINT_CHANGE#
---------- -------------------------------------------------- ---------- --------------- ------------------
         1 /u01/app/oracle/oradata/ora11g/system01.dbf        SYSTEM     SYSTEM                     1162016
         2 /u01/app/oracle/oradata/ora11g/sysaux01.dbf        SYSAUX     ONLINE                     1162016
         3 /u01/app/oracle/oradata/ora11g/undotbs01.dbf       UNDOTBS    ONLINE                     1162016
         4 /u01/app/oracle/oradata/ora11g/users01.dbf         USERS      ONLINE                     1162016
         5 /u01/app/oracle/oradata/ora11g/example01.dbf       EXAMPLE    ONLINE                     1162016


SQL> ! mkdir -p /home/oracle/backup/arch/cold_20240116


CREATE PFILE ='/home/oracle/backup/arch/cold_20240116/initora11g_20240116.ora' FROM SPFILE;


SQL> SHUTDOWN IMMEDIATE


! cp -av /u01/app/oracle/oradata/ora11g/*.dbf /home/oracle/backup/arch/cold_20240116/
! cp -av /u01/app/oracle/oradata/ora11g/*.ctl /home/oracle/backup/arch/cold_20240116/
! cp -av /u01/app/oracle/oradata/ora11g/*.log /home/oracle/backup/arch/cold_20240116/


SQL> ! ls /home/oracle/backup/arch/cold_20240116
control01.ctl  example01.dbf  initora11g_20240116.ora  redo01.log  redo02.log  
redo03.log  sysaux01.dbf  system01.dbf  temp01.dbf  undotbs01.dbf  users01.dbf


SQL> STARTUP


SELECT a.file#, a.name file_name, b.name tbs_name, a.status, a.checkpoint_change#
FROM v$datafile a, v$tablespace b
WHERE a.ts# = b.ts#;
     FILE# FILE_NAME                                          TBS_NAME   STATUS          CHECKPOINT_CHANGE#
---------- -------------------------------------------------- ---------- --------------- ------------------
         1 /u01/app/oracle/oradata/ora11g/system01.dbf        SYSTEM     SYSTEM                     1162499
         2 /u01/app/oracle/oradata/ora11g/sysaux01.dbf        SYSAUX     ONLINE                     1162499
         3 /u01/app/oracle/oradata/ora11g/undotbs01.dbf       UNDOTBS    ONLINE                     1162499
         4 /u01/app/oracle/oradata/ora11g/users01.dbf         USERS      ONLINE                     1162499
         5 /u01/app/oracle/oradata/ora11g/example01.dbf       EXAMPLE    ONLINE                     1162499


SELECT thread#,sequence#,archived,status,first_change#,first_time,next_change#,next_time
FROM v$log;
   THREAD#  SEQUENCE# ARCHIVED  STATUS          FIRST_CHANGE# FIRST_TIME  NEXT_CHANGE# NEXT_TIME
---------- ---------- --------- --------------- ------------- ----------- ------------ ---------
         1          1 YES       INACTIVE              1155932 16-JAN-24        1159428 16-JAN-24
         1          2 NO        CURRENT               1159428 16-JAN-24     2.8147E+14
         1          0 YES       UNUSED                      0                        0



<< Backup >> 일관성없는 백업 = Hot Backup = Open Backup = Online Backup
  # /home/oracle/backup/arch/hot_20240116/
# seq#2


SELECT a.file#, a.name, a.checkpoint_change#, b.status, b.change#, time
FROM v$datafile a, v$backup b
WHERE a.file# = b.file#;
     FILE# NAME                                         CHECKPOINT_CHANGE# STATUS           CHANGE# TIME
---------- -------------------------------------------- ------------------ ------------- ---------- ---------
         1 /u01/app/oracle/oradata/ora11g/system01.dbf             1162499 NOT ACTIVE             0
         2 /u01/app/oracle/oradata/ora11g/sysaux01.dbf             1162499 NOT ACTIVE             0
         3 /u01/app/oracle/oradata/ora11g/undotbs01.dbf            1162499 NOT ACTIVE             0
         4 /u01/app/oracle/oradata/ora11g/users01.dbf              1162499 NOT ACTIVE             0
         5 /u01/app/oracle/oradata/ora11g/example01.dbf            1162499 NOT ACTIVE             0


SELECT thread#,sequence#,archived,status,first_change#,first_time,next_change#,next_time
FROM v$log;
   THREAD#  SEQUENCE# ARCHIVED  STATUS          FIRST_CHANGE# FIRST_TIME  NEXT_CHANGE# NEXT_TIME
---------- ---------- --------- --------------- ------------- ----------- ------------ ---------
         1          1 YES       INACTIVE              1155932 16-JAN-24        1159428 16-JAN-24
         1          2 NO        CURRENT               1159428 16-JAN-24     2.8147E+14
         1          0 YES       UNUSED                      0                        0


SQL> ALTER SYSTEM CHECKPOINT;


SQL> ALTER DATABASE BEGIN BACKUP;


SQL> ! mkdir -p /home/oracle/backup/arch/hot_20240116


SQL> ! cp -av /u01/app/oracle/oradata/ora11g/*.dbf /home/oracle/backup/arch/hot_20240116/


SQL> ! ls /home/oracle/backup/arch/hot_20240116/
example01.dbf  sysaux01.dbf  system01.dbf  temp01.dbf  undotbs01.dbf  users01.dbf


SQL> ALTER DATABASE END BACKUP;

SELECT a.file#, a.name, a.checkpoint_change#, b.status, b.change#, time
FROM v$datafile a, v$backup b
WHERE a.file# = b.file#;
     FILE# NAME                                            CHECKPOINT_CHANGE# STATUS         CHANGE# TIME
---------- ----------------------------------------------- ------------------ ----------- ---------- ---------
         1 /u01/app/oracle/oradata/ora11g/system01.dbf                1162853 NOT ACTIVE     1162853 16-JAN-24
         2 /u01/app/oracle/oradata/ora11g/sysaux01.dbf                1162853 NOT ACTIVE     1162853 16-JAN-24
         3 /u01/app/oracle/oradata/ora11g/undotbs01.dbf               1162853 NOT ACTIVE     1162853 16-JAN-24
         4 /u01/app/oracle/oradata/ora11g/users01.dbf                 1162853 NOT ACTIVE     1162853 16-JAN-24
         5 /u01/app/oracle/oradata/ora11g/example01.dbf               1162853 NOT ACTIVE     1162853 16-JAN-24


SQL> ALTER DATABASE BACKUP CONTROLFILE TO '/home/oracle/backup/arch/hot_20240116/control01.ctl';


SELECT thread#,sequence#,archived,status,first_change#,first_time,next_change#,next_time
FROM v$log;
   THREAD#  SEQUENCE# ARCHIVED  STATUS          FIRST_CHANGE# FIRST_TIME  NEXT_CHANGE# NEXT_TIME
---------- ---------- --------- --------------- ------------- ----------- ------------ ---------
         1          1 YES       INACTIVE              1155932 16-JAN-24        1159428 16-JAN-24
         1          2 NO        CURRENT               1159428 16-JAN-24     2.8147E+14
         1          0 YES       UNUSED                      0                        0


SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;


SELECT thread#,sequence#,archived,status,first_change#,first_time,next_change#,next_time
FROM v$log;
   THREAD#  SEQUENCE# ARCHIVED  STATUS          FIRST_CHANGE# FIRST_TIME  NEXT_CHANGE# NEXT_TIME
---------- ---------- --------- --------------- ------------- ----------- ------------ ---------
         1          1 YES       INACTIVE              1155932 16-JAN-24        1159428 16-JAN-24
         1          2 YES       ACTIVE                1159428 16-JAN-24        1162976 16-JAN-24
         1          3 NO        CURRENT               1162976 16-JAN-24     2.8147E+14


SELECT name,sequence#,first_change#,first_time,next_change#,next_time
FROM v$archived_log;
NAME                                             SEQUENCE# FIRST_CHANGE# FIRST_TIME  NEXT_CHANGE# NEXT_TIME
----------------------------------------------- ---------- ------------- ----------- ------------ ---------
/home/oracle/arch1/arch_1_1_1158372877.arc               1       1155932 16-JAN-24        1159428 16-JAN-24
/home/oracle/arch2/arch_1_1_1158372877.arc               1       1155932 16-JAN-24        1159428 16-JAN-24
/home/oracle/arch1/arch_1_2_1158372877.arc               2       1159428 16-JAN-24        1162976 16-JAN-24
/home/oracle/arch2/arch_1_2_1158372877.arc               2       1159428 16-JAN-24        1162976 16-JAN-24


SQL> ! ls -R /home/oracle/backup/arch
/home/oracle/backup/arch/cold_20240116:
control01.ctl  example01.dbf  initora11g_20240116.ora  redo01.log  redo02.log  
redo03.log  sysaux01.dbf  system01.dbf  temp01.dbf  undotbs01.dbf  users01.dbf

/home/oracle/backup/arch/hot_20240116:
control01.ctl  example01.dbf  sysaux01.dbf  system01.dbf  temp01.dbf  undotbs01.dbf  users01.dbf


SQL> ! ls -R /home/oracle/arch*
/home/oracle/arch1:
arch_1_1_1158372877.arc  arch_1_2_1158372877.arc

/home/oracle/arch2:
arch_1_1_1158372877.arc  arch_1_2_1158372877.arc

>> seq#2