RMAN과 아카이브 로그를 활용한 백업 및 복구

안녕하세요 surmin입니다 🙂
오늘은 Oracle에서 백업과 복구 유틸리티인 RMAN에 대하여 가져왔습니다

먼저 간단하게 백업 종류들에 대하여 말씀을 드리겠습니다.

1. 전체 데이터베이스 백업 (Whole Database Backup)

  • 모든 데이터 파일, 컨트롤 파일, 리두 로그 파일을 백업합니다.
  • 데이터베이스가 open 상태이거나 shutdown 상태일 때 백업할 수 있습니다.

2. 부분 데이터베이스 백업 (Partial Database Backup)

  • 특정 테이블스페이스에 속한 데이터 파일만 백업합니다.
  • Archive log mode에서만 가능하며, 특정 테이블스페이스의 데이터를 복원하는 데 유용합니다.

3. 일관성 있는 백업 (Consistent Backup)

  • 종류: Close backup, Cold backup, Offline backup입니다.
  • 일관성이 없는 백업본으로는 타임 베이스 리커버리가 불가능합니다. 이는 헤더마다 SCN(시스템 변경 번호)이 맞지 않기 때문입니다.
  • Noarchive log mode에서는 일관성 있는 백업만 수행할 수 있습니다.
  • 데이터베이스를 정상적으로 종료한 후 백업을 수행해야 하며, 모든 데이터 파일, 컨트롤 파일, 리두 로그 파일의 체크포인트 정보가 동일합니다.
  • 이 백업은 noarchive log mode와 archive log mode 모두에서 사용 가능합니다.

4. 일관성 없는 백업 (Inconsistent Backup)

  • 종류: Open backup, Hot backup, Online backup입니다.
  • 데이터베이스가 운영 중일 때 백업을 수행합니다.
  • 이 백업은 archive log mode에서만 가능하며, 데이터 일관성이 보장되지 않습니다.
  • 데이터베이스 레벨 또는 테이블스페이스 레벨에서 수행할 수 있는데, 이는 부분 데이터베이스 백업과 유사합니다.

5. 전체 백업 (Full Backup)

  • 선택한 파일에 속한 모두 데이터 블록 백업

6. 증분 백업 (Incremental Backup)

  • 이전 전체 백업 이후에 변경된 블록에 대해서만 백업을 수행합니다.
  • 이 백업은 RMAN(Recovery Manager)을 사용하여 수행해야 합니다.
  • 블록들중에서 사용하고 있는 블락에 대해서만 즉 크기가 100G가지만 실제로 사용중인 데이터가 1G이면 1G만 받는다.

사전 작업: 아카이브 로그와 RMAN 백업을 받을 디렉터리가 필요합니다.

RMAN을 활용하기 위해서는 먼저 아카이브 로그 모드가 활성화되어 있어야 합니다. 그러면 아카이브 로그 설정부터 살펴보겠습니다

SQL> archive log list
Database log mode              No Archive Mode   #아카이브 설정 NO 확인
Automatic archival             Disabled # 자동 아카이브 기능 비활성화 확인 
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     27
Current log sequence           29

SQL> show parameter log_archive

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_archive_config                   string
log_archive_dest                     string
log_archive_dest_1                   string
log_archive_dest_10                  string
log_archive_dest_11                  string
log_archive_dest_12                  string
log_archive_dest_13                  string
log_archive_dest_14                  string
log_archive_dest_15                  string
log_archive_dest_16                  string
log_archive_dest_17                  string
log_archive_dest_18                  string
log_archive_dest_19                  string
log_archive_dest_2                   string
log_archive_dest_20                  string
log_archive_dest_21                  string
log_archive_dest_22                  string
log_archive_dest_23                  string
log_archive_dest_24                  string
log_archive_dest_25                  string
log_archive_dest_26                  string
log_archive_dest_27                  string
log_archive_dest_28                  string
log_archive_dest_29                  string
log_archive_dest_3                   string
log_archive_dest_30                  string
log_archive_dest_31                  string
log_archive_dest_4                   string
log_archive_dest_5                   string
log_archive_dest_6                   string
log_archive_dest_7                   string
log_archive_dest_8                   string
log_archive_dest_9                   string

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_state_1             string      enable
log_archive_dest_state_10            string      enable
log_archive_dest_state_11            string      enable
log_archive_dest_state_12            string      enable
log_archive_dest_state_13            string      enable
log_archive_dest_state_14            string      enable
log_archive_dest_state_15            string      enable
log_archive_dest_state_16            string      enable
log_archive_dest_state_17            string      enable
log_archive_dest_state_18            string      enable
log_archive_dest_state_19            string      enable
log_archive_dest_state_2             string      enable
log_archive_dest_state_20            string      enable
log_archive_dest_state_21            string      enable
log_archive_dest_state_22            string      enable
log_archive_dest_state_23            string      enable
log_archive_dest_state_24            string      enable
log_archive_dest_state_25            string      enable
log_archive_dest_state_26            string      enable
log_archive_dest_state_27            string      enable
log_archive_dest_state_3             string      enable
log_archive_dest_state_30            string      enable
log_archive_dest_state_31            string      enable
log_archive_dest_state_4             string      enable
log_archive_dest_state_5             string      enable
log_archive_dest_state_6             string      enable
log_archive_dest_state_7             string      enable
log_archive_dest_state_8             string      enable
log_archive_dest_state_9             string      enable
log_archive_duplex_dest              string
log_archive_format                   string      %t_%s_%r.dbf  #아카이브 로그 파일의 이름 형식을 정의합니다. 

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_archive_max_processes            integer     4
log_archive_min_succeed_dest         integer     1
log_archive_start                    boolean     FALSE
log_archive_trace                    integer     0

log_archive_format string %t_%s_%r.dbf를 보면 로그 아카이브 포맷이 .dbf로 설정되어 있음을 알 수 있습니다. 그러나 .dbf는 데이터 파일의 확장자와 혼동될 수 있으므로, 확장자를 변경하는 것이 좋습니다. 실제로는 확장자가 없어도 정상적으로 작동하며, 관리자가 이 점을 알고 있으면 됩니다.

#확장자 변경 

SQL> ALTER SYSTEM SET LOG_ARCHIVE_FORMAT='%t_%s_%r.arc' scope=spfile;
-- 시스템의 로그 아카이브 파일 형식을 '%t_%s_%r.arc'로 설정합니다.
-- '%t'는 테이블스페이스의 번호, '%s'는 시퀀스 번호, '%r'은 리두 로그의 번호를 나타냅니다.
-- 'scope=spfile'은 이 변경 사항이 서버 파라미터 파일(SPFILE)에 저장되어 
-- 데이터베이스가 재시작될 때도 유지되도록 함을 의미합니다.


SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='location=/archivelog' scope=spfile;
-- 시스템의 로그 아카이브 목적지 1을 '/archivelog'로 설정합니다.
-- 'scope=spfile'은 이 변경 사항이 서버 파라미터 파일(SPFILE)에 저장되어 
-- 데이터베이스가 재시작될 때도 유지되도록 함을 의미합니다.
SQL> SHUTDOWN IMMEDIATE;

아카이브 로그 파일을 받을 파티션을 생성한 후, 권한 및 소유자를 지정합니다.

#oracle 접근 위하여 권한 및 소유자 변경
[root@oracle19c /]# chmod 755 archivelog
[root@oracle19c /]# chown oracle:oinstall  archivelog

#리스너 확인 down 이면 올리기
[oracle@oracle19c ~]$ lsnrctl status

#db mount까지만 
SQL> startup mount

SQL> ALTER DATABASE ARCHIVELOG;
-- 데이터베이스를 아카이브 모드로 전환합니다.
-- 아카이브 모드로 설정하면 트랜잭션 로그가 아카이브되어 데이터 손실을 방지할 수 있습니다.
-- 이 명령어를 실행한 후에는 아카이브 로그가 생성되며,
-- 데이터베이스가 강제로 종료되더라도 이전 트랜잭션을 복구할 수 있습니다.

Database altered.

SQL>  alter database open;

아카이브 로그 파일 설정확인

SQL> ARCHIVE LOG LIST;

Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /archivelog
Oldest online log sequence     28
Next log sequence to archive   30
Current log sequence           30

#redo file을 아카이브 로그 디렉터리로 보내기위하여 일부러 SWITCH 발생 시킵니다.
SQL> ALTER SYSTEM SWITCH LOGFILE; 
SQL> /  #방금 실행한 명령어 실행
SQL> /

SQL> !
#이전 명령어를 종료하고 쉘 프롬프트로 돌아갑니다.

[oracle@oracle19c ~]$ cd /archivelog/
#'/archivelog/' 디렉터리로 이동합니다. 아카이브 로그 파일이 저장된 위치입니다.

1_30_1175653257.arc  1_31_1175653257.arc  1_32_1175653257.arc  1_33_1175653257.arc  1_34_1175653257.arc
# 현재 디렉터리에 존재하는 아카이브 로그 파일 리스트입니다.
# 파일 이름은 아카이브 로그의 시퀀스 번호와 기타 정보를 포함하고 있습니다.

#아카이브 파일 확인 하였으며, 바이너리 파일이다. 
[oracle@oracle19c archivelog]$ ll
total 2576
-rw-r----- 1 oracle oinstall 2618880 Aug 20 22:39 1_30_1175653257.arc
-rw-r----- 1 oracle oinstall    1024 Aug 20 22:39 1_31_1175653257.arc
-rw-r----- 1 oracle oinstall    4096 Aug 20 22:39 1_32_1175653257.arc
-rw-r----- 1 oracle oinstall    1024 Aug 20 22:39 1_33_1175653257.arc
-rw-r----- 1 oracle oinstall    1024 Aug 20 22:39 1_34_1175653257.arc

RMAN 수행 시 알면 좋은 점

  • 아카이브가 꽉 차면 데이터베이스가 멈추기 때문에, RMAN으로 백업한 후 아카이브를 삭제해야 합니다.
  • RMAN 백업을 수행하기 위해서는 아카이브 로그 모드로 변경해야 합니다. Noarchive 로그 모드에서는 RMAN을 사용할 수 없으므로, 아카이브 로그 모드로 변경한 것입니다.

위에서 한것과 마찬가지로 RMAN 백업 본을 위하여 디렉터리 지정 혹은 생성 해줍니다.

[root@oracle19c /]# lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb           8:16   0   20G  0 disk
└─sdb1        8:17   0   20G  0 part /archivelog
sr0          11:0    1 1024M  0 rom
sdc           8:32   0   50G  0 disk
└─sdc1        8:33   0   50G  0 part /rmanbackup
sda           8:0    0   50G  0 disk
├─sda2        8:2    0   49G  0 part
│ ├─ol-swap 252:1    0    2G  0 lvm  [SWAP]
│ └─ol-root 252:0    0   47G  0 lvm  /
└─sda1        8:1    0    1G  0 part /boot

RMAN 설정

RMAN구성 확인

[oracle@oracle19c ~]$ rman target /
# oracle 사용자로 로그인한 상태에서 RMAN(Recovery Manager)을 실행하고 현재 데이터베이스('/')에 연결합니다.

RMAN> SHOW ALL;
# RMAN에서 모든 구성 설정을 보여달라는 명령입니다.

using target database control file instead of recovery catalog
# 복구 카탈로그 대신 대상 데이터베이스의 컨트롤 파일을 사용한다는 메시지입니다.

RMAN configuration parameters for database with db_unique_name ORA19C are:
# ORA19C라는 고유 이름을 가진 데이터베이스에 대한 RMAN 구성 매개변수들입니다.

CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
# 백업 보존 정책을 중복성 1로 설정합니다. 즉, 최소 1개의 백업을 유지합니다.
# 백업 셋 자체를 하나만 가지고 있겠다.

CONFIGURE BACKUP OPTIMIZATION OFF; # default
# 백업 최적화 기능을 끕니다. 이 기능은 불필요한 백업을 방지할 수 있습니다.

CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
# 기본 백업 장치 유형을 디스크로 설정합니다.
# 어느 디스크에 지정을 할건지 지정하는 옵션 

CONFIGURE CONTROLFILE AUTOBACKUP ON; # default
# 컨트롤 파일 자동 백업 기능을 켭니다.
# rman으로 백업할때 자동으로 백업 , spfile도 자동으로 백업도 해줌 

CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
# 디스크에 대한 컨트롤 파일 자동 백업 형식을 '%F'로 설정합니다. ('%F'는 기본 파일 이름 형식)

CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
# DATAFILE, CONTROL FILE의 backup set의 copy본 갯수를 지정함
# 코어 수에맞게 설정하면 좋지만 인프라에 따라 조금씩 다름 

CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
# 디스크에 대한 데이터 파일 백업 복사본 수를 1로 설정합니다.
#데이터 파일을 백업할 때 단일 복사본만 생성된다는 의미
# 복사본 여러게로 경로 지정가능

CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
# ARCHIVELOG FILE의 backup set의 copy본 갯수를 지정함
# 복사본 여러게로 경로 지정가능

CONFIGURE MAXSETSIZE TO UNLIMITED; # default
# 백업 세트의 최대 크기를 무제한으로 설정합니다.

CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
# 데이터베이스 암호화 기능을 끕니다.

CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
# 암호화 알고리즘을 AES128로 설정합니다.

CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
# 압축 알고리즘을 'BASIC'으로 설정하고 로드 성능을 최적화합니다.
#스탠다드하고 엔터프라이즈하고 사용하는 옵션이 다름 

CONFIGURE RMAN OUTPUT TO KEEP FOR 7 DAYS; # default
# RMAN 출력 로그 저장기간을 지정된 일 수로 구성함

CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
# flash recovery area의 archived redo log에 대한 삭제 여부를 설정함

CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/19.3.0/dbhome_1/dbs/snapcf_ORA19C.f'; # default
# RMAN은 resync시 생성되는 임시 snapshot control file의 이름을 지정함

추가설정

RMAN> CONFIGURE channel DEVICE TYPE DISK format '/rmanbackup/%d_%U_%T.bk'; 
-- 백업 채널을 디스크 장치 유형으로 설정하고, 백업 파일 형식을 지정합니다.
-- %d: 데이터베이스 이름, %U: 고유 식별자, %T: 타임스탬프를 사용하여 파일 이름을 생성합니다.

RMAN> CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/rmanbackup/snapcf_ORA19C.f'; 
-- 스냅샷 제어 파일의 경로와 이름을 지정합니다.
-- 스냅샷 제어 파일은 RMAN 작업 중에 사용되는 중요한 파일입니다.

#확인
RMAN> SHOW ALL;

RMAN configuration parameters for database with db_unique_name ORA19C are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP ON; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 2 BACKUP TYPE TO BACKUPSET;
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT   '/rmanbackup/%d_%U_%T.bk';
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
CONFIGURE RMAN OUTPUT TO KEEP FOR 7 DAYS; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/rmanbackup/snapcf_ORA19C.f';

RMAN백업

RMAN> backup as backupset database plus ARCHIVELOG delete input;
#데이터베이스와 아카이브 로그를 백업하고, 백업이 완료된 아카이브 로그 파일은 삭제합니다.
Starting backup at 23-AUG-24

current log archived

allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=287 device type=DISK
allocated channel: ORA_DISK_2
channel ORA_DISK_2: SID=38 device type=DISK

channel ORA_DISK_1: starting archived log backup set
channel ORA_DISK_1: specifying archived log(s) in backup set

input archived log thread=1 sequence=35 RECID=6 STAMP=1177541288

channel ORA_DISK_1: starting piece 1 at 23-AUG-24

channel ORA_DISK_2: starting archived log backup set
channel ORA_DISK_2: specifying archived log(s) in backup set

input archived log thread=1 sequence=39 RECID=10 STAMP=1177723540

channel ORA_DISK_2: finished piece 1 at 23-AUG-24

piece handle=/rmanbackup/023358kl_1_1_20240823 tag=TAG20240823T012541 comment=NONE

channel ORA_DISK_2: backup set complete, elapsed time: 00:00:03

channel ORA_DISK_2: deleting archived log(s)

archived log file name=/archivelog/1_39_1175653257.arc RECID=10 STAMP=1177723540

Finished backup at 23-AUG-24

Starting backup at 23-AUG-24

using channel ORA_DISK_1
using channel ORA_DISK_2

channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set

input datafile file number=00001 name=/u01/app/oracle/oradata/ORA19C/system01.dbf

channel ORA_DISK_1: finished piece 1 at 23-AUG-24

piece handle=/rmanbackup/043358kp_1_1_20240823 tag=TAG20240823T012545 comment=NONE

channel ORA_DISK_1: backup set complete, elapsed time: 00:00:45

Finished backup at 23-AUG-24

Starting backup at 23-AUG-24

current log archived

using channel ORA_DISK_1
using channel ORA_DISK_2

channel ORA_DISK_1: starting archived log backup set
channel ORA_DISK_1: specifying archived log(s) in backup set

input archived log thread=1 sequence=40 RECID=11 STAMP=1177723590

channel ORA_DISK_1: finished piece 1 at 23-AUG-24

piece handle=/rmanbackup/063358m6_1_1_20240823 tag=TAG20240823T012630 comment=NONE

channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01

channel ORA_DISK_1: deleting archived log(s)

archived log file name=/archivelog/1_40_1175653257.arc RECID=11 STAMP=1177723590

Finished backup at 23-AUG-24

Starting Control File and SPFILE Autobackup at 23-AUG-24

piece handle=/u01/app/oracle/fast_recovery_area/ORA19C/autobackup/2024_08_23/o1_mf_s_1177723591_mdgsorl6_.bkp comment=NONE

Finished Control File and SPFILE Autobackup at 23-AUG-24

확인

#아카이브 로그 없어짐 확인
[oracle@oracle19c /]$ cd archivelog/
[oracle@oracle19c archivelog]$ ll
total 0

[oracle@oracle19c rmanbackup]$ ll
total 4096552

-rw-r----- 1 oracle oinstall  71326720 Aug 23 01:25 013358kl_1_1_20240823
-rw-r----- 1 oracle oinstall  52240896 Aug 23 01:25 023358kl_1_1_20240823
-rw-r----- 1 oracle oinstall   2631168 Aug 23 01:25 033358ko_1_1_20240823
-rw-r----- 1 oracle oinstall 836255744 Aug 23 01:26 043358kp_1_1_20240823
-rw-r----- 1 oracle oinstall 516595712 Aug 23 01:26 053358kp_1_1_20240823
-rw-r----- 1 oracle oinstall      5120 Aug 23 01:26 063358m6_1_1_20240823
-rw-r----- 1 oracle oinstall     15872 Aug 23 01:31 ORA19C_08335904_1_1_20240823_ORA19C
-rw-r----- 1 oracle oinstall 835887104 Aug 23 01:32 ORA19C_09335905_1_1_20240823_ORA19C
-rw-r----- 1 oracle oinstall 516595712 Aug 23 01:32 ORA19C_0a335905_1_1_20240823_ORA19C
-rw-r----- 1 oracle oinstall      5632 Aug 23 01:32 ORA19C_0b33591j_1_1_20240823_ORA19C
-rw-r----- 1 oracle oinstall    152064 Aug 23 01:44 ORA19C_0d3359n5_1_1_20240823.bk
-rw-r----- 1 oracle oinstall 835936256 Aug 23 01:44 ORA19C_0e3359n6_1_1_20240823.bk
-rw-r----- 1 oracle oinstall 516595712 Aug 23 01:44 ORA19C_0f3359n6_1_1_20240823.bk
-rw-r----- 1 oracle oinstall      5120 Aug 23 01:44 ORA19C_0g3359ok_1_1_20240823.bk
-rw-r----- 1 oracle oinstall  10600448 Aug 23 01:44 snapcf_ORA19C.f

백업 파일들 보기

  • 상태: 사용 가능 (AVAILABLE), 압축: 없음 (NO)을 나타냅니다.
RMAN> list backup;  # RMAN에서 현재의 백업 세트를 나열하는 명령어

List of Backup Sets  # 백업 세트 목록의 시작

===================  # 구분선

# 각 백업 세트에 대한 정보
BS Key  Size       Device Type Elapsed Time Completion Time
------- ---------- ----------- ------------ ---------------
1       49.82M     DISK        00:00:00     23-AUG-24  # 첫 번째 백업 세트 정보: 키, 크기, 장치 유형, 경과 시간, 완료 시간
        BP Key: 1   Status: AVAILABLE  Compressed: NO  Tag: TAG20240823T012541  # 백업 조각 키, 상태, 압축 여부, 태그 정보
        Piece Name: /rmanbackup/023358kl_1_1_20240823  # 백업 조각의 파일 경로

  List of Archived Logs in backup set 1  # 백업 세트 1에 포함된 아카이브 로그 목록
  Thrd Seq     Low SCN    Low Time  Next SCN   Next Time
  ---- ------- ---------- --------- ---------- ---------
  1    39      5339115    22-AUG-24 5362059    23-AUG-24  # 스레드 번호, 시퀀스, 낮은 SCN, 낮은 시간, 다음 SCN, 다음 시간

# 두 번째 백업 세트 정보
BS Key  Size       Device Type Elapsed Time Completion Time
------- ---------- ----------- ------------ ---------------
2       68.02M     DISK        00:00:02     23-AUG-24  # 두 번째 백업 세트 정보
        BP Key: 2   Status: AVAILABLE  Compressed: NO  Tag: TAG20240823T012541  # 백업 조각 키, 상태, 압축 여부, 태그
        Piece Name: /rmanbackup/013358kl_1_1_20240823  # 백업 조각 경로

  List of Archived Logs in backup set 2  # 백업 세트 2에 포함된 아카이브 로그 목록
  Thrd Seq     Low SCN    Low Time  Next SCN   Next Time
  ---- ------- ---------- --------- ---------- ---------
  1    35      4906820    20-AUG-24 5007189    20-AUG-24  # 아카이브 로그 정보
  1    36      5007189    20-AUG-24 5113413    21-AUG-24
  1    37      5113413    21-AUG-24 5226364    21-AUG-24
  1    38      5226364    21-AUG-24 5339115    22-AUG-24

# 세 번째 백업 세트 정보
BS Key  Size       Device Type Elapsed Time Completion Time
------- ---------- ----------- ------------ ---------------
3       2.51M      DISK        00:00:00     23-AUG-24  # 세 번째 백업 세트 정보
        BP Key: 3   Status: AVAILABLE  Compressed: NO  Tag: TAG20240823T012541  # 백업 조각 정보
        Piece Name: /rmanbackup/033358ko_1_1_20240823  # 백업 조각 경로

  List of Archived Logs in backup set 3  # 백업 세트 3에 포함된 아카이브 로그 목록
  Thrd Seq     Low SCN    Low Time  Next SCN   Next Time
  ---- ------- ---------- --------- ---------- ---------
  1    30      4904956    20-AUG-24 4906805    20-AUG-24
  1    31      4906805    20-AUG-24 4906809    20-AUG-24
  1    32      4906809    20-AUG-24 4906814    20-AUG-24
  1    33      4906814    20-AUG-24 4906817    20-AUG-24
  1    34      4906817    20-AUG-24 4906820    20-AUG-24

# 네 번째 백업 세트 정보
BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
4       Full    492.66M    DISK        00:00:25     23-AUG-24  # 전체 데이터베이스 백업 정보
        BP Key: 4   Status: AVAILABLE  Compressed: NO  Tag: TAG20240823T012545  # 백업 조각 정보
        Piece Name: /rmanbackup/053358kp_1_1_20240823  # 백업 조각 경로

  List of Datafiles in backup set 4  # 백업 세트 4에 포함된 데이터파일 목록
  File LV Type Ckp SCN    Ckp Time  Abs Fuz SCN Sparse Name
  ---- -- ---- ---------- --------- ----------- ------ ----
  3       Full 5362091    23-AUG-24              NO    /u01/app/oracle/oradata/ORA19C/sysaux01.dbf  # 데이터파일 정보
  5       Full 5362091    23-AUG-24              NO    /u01/app/oracle/oradata/ORA19C/insa_tbs01.dbf
  7       Full 5362091    23-AUG-24              NO    /u01/app/oracle/oradata/ORA19C/users01.dbf

# 다섯 번째 백업 세트 정보
BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
5       Full    797.51M    DISK        00:00:30     23-AUG-24  # 전체 데이터베이스 백업 정보
        BP Key: 5   Status: AVAILABLE  Compressed: NO  Tag: TAG20240823T012545  # 백업 조각 정보
        Piece Name: /rmanbackup/043358kp_1_1_20240823  # 백업 조각 경로

  List of Datafiles in backup set 5  # 백업 세트 5에 포함된 데이터파일 목록
  File LV Type Ckp SCN    Ckp Time  Abs Fuz SCN Sparse Name
  ---- -- ---- ---------- --------- ----------- ------ ----
  1       Full 5362090    23-AUG-24              NO    /u01/app/oracle/oradata/ORA19C/system01.dbf  # 데이터파일 정보
  4       Full 5362090    23-AUG-24              NO    /u01/app/oracle/oradata/ORA19C/undotbs01.dbf

# 여섯 번째 백업 세트 정보
BS Key  Size       Device Type Elapsed Time Completion Time
------- ---------- ----------- ------------ ---------------
6       4.50K      DISK        00:00:00     23-AUG-24  # 여섯 번째 백업 세트 정보
        BP Key: 6   Status: AVAILABLE  Compressed: NO  Tag: TAG20240823T012630  # 백업 조각 정보
        Piece Name: /rmanbackup/063358m6_1_1_20240823  # 백업 조각 경로
 
  List of Archived Logs in backup set 6  # 백업 세트 6에 포함된 아카이브 로그 목록
  Thrd Seq     Low SCN    Low Time  Next SCN   Next Time
  ---- ------- ---------- --------- ---------- ---------
  1    40      5362059    23-AUG-24 5362115    23-AUG-24  # 아카이브 로그 정보

# 일곱 번째 백업 세트 정보
BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
7       Full    10.20M     DISK        00:00:01     23-AUG-24  # 전체 백업 정보
        BP Key: 7   Status: AVAILABLE  Compressed: NO  Tag: TAG20240823T012631  # 백업 조각 정보
        Piece Name: /u01/app/oracle/fast_recovery_area/ORA19C/autobackup/2024_08_23/o1_mf_s_1177723591_mdgsorl6_.bkp  # 백업 조각 경로
  SPFILE Included: Modification time: 22-AUG-24  # SPFILE 포함 정보 및 수정 시간
  SPFILE db_unique_name: ORA19C  # SPFILE의 데이터베이스 고유 이름
  Control File Included: Ckp

손상된 데이터 블록이 있는지 검증하는 방법

#데이터베이스의 백업 파일을 검증     
RMAN> validate database;

Starting validate at 23-AUG-24
using channel ORA_DISK_1
using channel ORA_DISK_2
channel ORA_DISK_1: starting validation of datafile
channel ORA_DISK_1: specifying datafile(s) for validation
input datafile file number=00003 name=/u01/app/oracle/oradata/ORA19C/sysaux01.dbf
input datafile file number=00007 name=/u01/app/oracle/oradata/ORA19C/users01.dbf
input datafile file number=00005 name=/u01/app/oracle/oradata/ORA19C/insa_tbs01.dbf
channel ORA_DISK_2: starting validation of datafile
channel ORA_DISK_2: specifying datafile(s) for validation
input datafile file number=00001 name=/u01/app/oracle/oradata/ORA19C/system01.dbf
input datafile file number=00004 name=/u01/app/oracle/oradata/ORA19C/undotbs01.dbf
channel ORA_DISK_1: validation complete, elapsed time: 00:00:15
List of Datafiles
=================
File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
---- ------ -------------- ------------ --------------- ----------
3 OK 0 22828 84480 5364673
File Name: /u01/app/oracle/oradata/ORA19C/sysaux01.dbf
Block Type Blocks Failing Blocks Processed
---------- -------------- ----------------
Data 0 10891
Index 0 9264
Other 0 41497

File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
---- ------ -------------- ------------ --------------- ----------
5 OK 0 1 128 3628158
File Name: /u01/app/oracle/oradata/ORA19C/insa_tbs01.dbf
Block Type Blocks Failing Blocks Processed
---------- -------------- ----------------
Data 0 110
Index 0 0
Other 0 17

File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
---- ------ -------------- ------------ --------------- ----------
7 OK 0 101 641 1252497
File Name: /u01/app/oracle/oradata/ORA19C/users01.dbf
Block Type Blocks Failing Blocks Processed
---------- -------------- ----------------
Data 0 60
Index 0 15
Other 0 464

channel ORA_DISK_1: starting validation of datafile
channel ORA_DISK_1: specifying datafile(s) for validation
including current SPFILE in backup set
channel ORA_DISK_1: validation complete, elapsed time: 00:00:01
List of Control File and SPFILE
===============================
File Type Status Blocks Failing Blocks Examined
------------ ------ -------------- ---------------
SPFILE OK 0 2
channel ORA_DISK_1: starting validation of datafile
channel ORA_DISK_1: specifying datafile(s) for validation
including current control file for validation
channel ORA_DISK_2: validation complete, elapsed time: 00:00:16
List of Datafiles
=================
File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
---- ------ -------------- ------------ --------------- ----------
1 OK 0 17937 117769 5364781
File Name: /u01/app/oracle/oradata/ORA19C/system01.dbf
Block Type Blocks Failing Blocks Processed
---------- -------------- ----------------
Data 0 81495
Index 0 13239
Other 0 5089

File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
---- ------ -------------- ------------ --------------- ----------
4 OK 0 624 44160 5364788
File Name: /u01/app/oracle/oradata/ORA19C/undotbs01.dbf
Block Type Blocks Failing Blocks Processed
---------- -------------- ----------------
Data 0 0
Index 0 0
Other 0 43536

channel ORA_DISK_1: validation complete, elapsed time: 00:00:01
List of Control File and SPFILE
===============================
File Type Status Blocks Failing Blocks Examined
------------ ------ -------------- ---------------
Control File OK 0 646
Finished validate at 23-AUG-24

DB 복원 시도하기

SQL> shutdown IMMEDIATE
[oracle@oracle19c ORA19C]$ pwd
/u01/app/oracle/oradata/ORA19C
[oracle@oracle19c ORA19C]$ ls
control01.ctl  insa_tbs01.dbf  redo01.log  redo02.log  redo03.log  sysaux01.dbf  system01.dbf  temp01.dbf  undotbs01.dbf  users01.dbf
[oracle@oracle19c ORA19C]$ rm -rf *.*
[oracle@oracle19c ORA19C]$ ls

SQL> startup
ORACLE instance started

Total System Global Area  713027608 bytes
Fixed Size                  8900632 bytes
Variable Size             490733568 bytes
Database Buffers          205520896 bytes
Redo Buffers                7872512 bytes
ORA-00205: error in identifying control file, check alert log for more info

SQL> shutdown abort
SQL> startup mount
ORACLE instance started.

Total System Global Area  713027608 bytes
Fixed Size                  8900632 bytes
Variable Size             490733568 bytes
Database Buffers          205520896 bytes
Redo Buffers                7872512 bytes
ORA-00205: error in identifying control file, check alert log for more info

#sp파일 복원 
RMAN> RESTORE SPFILE TO '/u01/app/oracle/product/19.3.0/dbhome_1/dbs/spfileORA19C.ora' FROM AUTOBACKUP;

STARTUP MOUNT;
RMAN> SELECT DBID FROM V$DATABASE;
run {
    startup nomount;  # 데이터베이스를 NOMOUNT 모드로 시작
    set DBID 1228841285;  # DBID 설정 (조회 필요: SELECT DBID FROM V$DATABASE;)
    restore spfile to '/u01/app/oracle/product/19.3.0/dbhome_1/dbs/spfileORA19C.ora' from autobackup; #자동 백업에서 SPFILE 복원
    shutdown immediate;  # 즉시 데이터베이스 종료
    startup nomount;  # 데이터베이스를 NOMOUNT 모드로 다시 시작
    restore controlfile from autobackup;  # 자동 백업에서 CONTROLFILE 복원
    alter database mount;  # 데이터베이스를 MOUNT 모드로 변경
    restore database;  # 데이터베이스 복원
    recover database;  # 데이터베이스 복구
    alter database open resetlogs;  # 데이터베이스를 오픈하고 로그 리셋
}


SELECT name, checkpoint_change# FROM v$datafile;

체크포인트 확인

SELECT name, checkpoint_change# FROM v$datafile;

끝까지 함께해 주셔서 감사합니다! 다음에는 더 흥미로운 주제나 관련된 내용을 준비해 오겠습니다.

참조

Oracle Database recovery using RMAN fails with RMAN-06054: media recovery requesting unknown archived log
https://blog.naver.com/hanajava/220698227558

위로 스크롤