반응형
■ [2025-10-30] NOLOGGING+APPEND 데이터 입력 후 원격지 서버에 DB 복구 후 ORA-1578/ORA-26040 발생 재현

 

[제목]

 

[2025-10-30] NOLOGGING+APPEND 데이터 입력 후 원격지 서버에 DB 복구 후 ORA-1578/ORA-26040 발생 재현
   
[테스트 개요]

 

풀백업 후 NOLOGGING APPEND 로 데이터 입력을 수행(Redo Log가 남지 않음)
그 후 원격지 서버에서 해당 시점의 아카이브를 적용하여 Recover한 Clone DB에서 대상 테이블 조회 시 ORA-1578/26040이 발생하는 것을 재현/확인
우회 방안으로 테이블을 정상화 시킴

 

[테스트 환경]

 

<소스 DB>

 

OS : Oracle Linux Server 8.10 (grep ^PRETTY_NAME= /etc/os-release | cut -d= -f2- | tr -d '"')
OS Kernal : 5.15.0-206.153.7.1.el8uek.x86_64 (uname -r)
Oracle Version : Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production (echo -e "set pages 0 lines 200 feedback off heading off\nselect banner from v\$version where banner like 'Oracle Database%';" | sqlplus -s / as sysdba)
Oracle Configuration
     DB명 : ORA19RF (echo -e 'set pages 0 feedback off heading off verify off\nselect '\''DB명 : '\''||name from v$database;' | sqlplus -s / as sysdba) '
 PDB명 : non-CDB (echo -e "set pages 0 feedback off heading off verify off\nselect 'PDB명 : '||name from v\$pdbs where name <> 'PDB\$SEED';" | sqlplus -s / as sysdba)
  RAC Node 1
   Hostname : ol8ora19rf1 (hostname)
   Public IP : 192.168.240.31 (getent ahostsv4 `hostname` | awk '{print $1; exit}')
   Instance Name : ORA19RF1 (echo -e 'set pages 0 feedback off heading off verify off\nselect '\''Instance Name : '\''||instance_name from v$instance;' | sqlplus -s / as sysdba) '
  RAC Node 2
   Hostname : ol8ora19rf2
   Public IP : 192.168.240.32 (getent ahostsv4 `hostname` | awk '{print $1; exit}')
   Instance Name : ORA19RF2 (echo -e 'set pages 0 feedback off heading off verify off\nselect '\''Instance Name : '\''||instance_name from v$instance;' | sqlplus -s / as sysdba) '
Patch Info
 Grid (opatch lspatches) (grid os user)
  38124772;TOMCAT RELEASE UPDATE 19.0.0.0.0 (38124772)
  37962946;OCW RELEASE UPDATE 19.28.0.0.0 (37962946)
  37962938;ACFS RELEASE UPDATE 19.28.0.0.0 (37962938)
  37960098;Database Release Update : 19.28.0.0.250715 (37960098)
  36758186;DBWLM RELEASE UPDATE 19.0.0.0.0 (36758186)

 Oracle (opatch lspatches) (oracle os user)
  37962946;OCW RELEASE UPDATE 19.28.0.0.0 (37962946)
  37960098;Database Release Update : 19.28.0.0.250715 (37960098)
  
<타켓 DB>

 

OS : Oracle Linux Server 8.10 (grep ^PRETTY_NAME= /etc/os-release | cut -d= -f2- | tr -d '"')
OS Kernal : 5.15.0-206.153.7.1.el8uek.x86_64 (uname -r)
Oracle Version : Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production (echo -e "set pages 0 lines 200 feedback off heading off\nselect banner from v\$version where banner like 'Oracle Database%';" | sqlplus -s / as sysdba)
Oracle Configuration
     DB명 : ORA19RF 
  PDB명 : non-CDB (echo -e "set pages 0 feedback off heading off verify off\nselect 'PDB명 : '||name from v\$pdbs where name <> 'PDB\$SEED';" | sqlplus -s / as sysdba)
  Single DB
   Hostname : ol8ora19rs1
   Public IP : 192.168.240.41
   Instance Name : ORA19RF1
  
Patch Info
 Grid (opatch lspatches) (grid os user)

  38124772;TOMCAT RELEASE UPDATE 19.0.0.0.0 (38124772)
  37962946;OCW RELEASE UPDATE 19.28.0.0.0 (37962946)
  37962938;ACFS RELEASE UPDATE 19.28.0.0.0 (37962938)
  37960098;Database Release Update : 19.28.0.0.250715 (37960098)
  36758186;DBWLM RELEASE UPDATE 19.0.0.0.0 (36758186)

 Oracle (opatch lspatches) (oracle os user)
  37962946;OCW RELEASE UPDATE 19.28.0.0.0 (37962946)
  37960098;Database Release Update : 19.28.0.0.250715 (37960098)

 

[내용]

 

1. 테스트 테이블 생성 및 초기 데이터 입력 (소스 DB)

 

1-1. 일반 테이블 (LOGGING 모드로 테이블 생성 후 데이터 입력)

 

[ORA19RF1:oracle@ol8ora19rf1][/home/oracle]$ alias st
alias st='rlwrap sqlplus tuner/oracle'
[ORA19RF1:oracle@ol8ora19rf1][/home/oracle]$ st

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Oct 30 14:06:21 2025
Version 19.28.0.0.0

Copyright (c) 1982, 2025, Oracle.  All rights reserved.

Last Successful login time: Thu Oct 30 2025 12:24:21 +09:00

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.28.0.0.0

[ol8ora19rf1]<TUNER@ORA19RF1>$


DROP TABLE TUNER.TB_NOLOGGING_TEST_01 PURGE;

CREATE TABLE TUNER.TB_NOLOGGING_TEST_01
(
  TEST_NO NUMBER(15)
, DATA_GB VARCHAR2(9)
, CONTS VARCHAR2(4000)
, CONSTRAINT PK_TB_NOLOGGING_TEST_01 PRIMARY KEY (TEST_NO)
) LOGGING
;

INSERT INTO TUNER.TB_NOLOGGING_TEST_01
SELECT ROWNUM AS TEST_NO
     , 'NOLOGGING' AS DATA_GB
     , DBMS_RANDOM.STRING('A', 4000) AS CONTS
  FROM DUAL CONNECT BY LEVEL <= 1000
;

COMMIT;

 

SET LINESIZE 200
SET PAGESIZE 100
SET NUMWIDTH 10
COLUMN OWNER           FORMAT A10        HEADING 'OWNER'
COLUMN TABLE_NAME      FORMAT A25        HEADING 'TABLE_NAME'
COLUMN TABLESPACE_NAME FORMAT A20        HEADING 'TABLESPACE'
COLUMN "LOGGING"       FORMAT A9         HEADING 'LOGGING'
COLUMN NUM_ROWS        FORMAT 999,999,999 HEADING 'NUM_ROWS'
COLUMN BLOCKS          FORMAT 999,999,999 HEADING 'BLOCKS'
COLUMN AVG_ROW_LEN     FORMAT 999,999    HEADING 'AVG_ROW_LEN'
COLUMN LAST_ANALYZED   FORMAT A19        HEADING 'LAST_ANALYZED'

SELECT OWNER
     , TABLE_NAME
     , TABLESPACE_NAME
     , "LOGGING"
     , NUM_ROWS
     , BLOCKS
     , AVG_ROW_LEN
     , TO_CHAR(LAST_ANALYZED, 'YYYY-MM-DD HH24:MI:SS') AS LAST_ANALYZED
  FROM DBA_TABLES
 WHERE OWNER = 'TUNER'
   AND TABLE_NAME = 'TB_NOLOGGING_TEST_01';
  
OWNER      TABLE_NAME                TABLESPACE           LOGGING       NUM_ROWS       BLOCKS AVG_ROW_LEN LAST_ANALYZED
---------- ------------------------- -------------------- --------- ------------ ------------ ----------- -------------------
TUNER      TB_NOLOGGING_TEST_01      TUNER_DATA1          YES       (NULL)       (NULL)       (NULL)      (NULL)


BEGIN
    DBMS_STATS.GATHER_TABLE_STATS
    (
      OWNNAME => 'TUNER'
    , TABNAME => 'TB_NOLOGGING_TEST_01'
    , CASCADE => TRUE
    , METHOD_OPT=> 'FOR ALL INDEXED COLUMNS SIZE 1'
    , GRANULARITY => 'ALL'
    , ESTIMATE_PERCENT => DBMS_STATS.AUTO_SAMPLE_SIZE
    , DEGREE => 4
    );
END;
/


 

SET LINESIZE 200
SET PAGESIZE 100
SET NUMWIDTH 10
COLUMN OWNER           FORMAT A10        HEADING 'OWNER'
COLUMN TABLE_NAME      FORMAT A25        HEADING 'TABLE_NAME'
COLUMN TABLESPACE_NAME FORMAT A20        HEADING 'TABLESPACE'
COLUMN "LOGGING"       FORMAT A9         HEADING 'LOGGING'
COLUMN NUM_ROWS        FORMAT 999,999,999 HEADING 'NUM_ROWS'
COLUMN BLOCKS          FORMAT 999,999,999 HEADING 'BLOCKS'
COLUMN AVG_ROW_LEN     FORMAT 999,999    HEADING 'AVG_ROW_LEN'
COLUMN LAST_ANALYZED   FORMAT A19        HEADING 'LAST_ANALYZED'

SELECT OWNER
     , TABLE_NAME
     , TABLESPACE_NAME
     , "LOGGING"
     , NUM_ROWS
     , BLOCKS
     , AVG_ROW_LEN
     , TO_CHAR(LAST_ANALYZED, 'YYYY-MM-DD HH24:MI:SS') AS LAST_ANALYZED
  FROM DBA_TABLES
 WHERE OWNER = 'TUNER'
   AND TABLE_NAME = 'TB_NOLOGGING_TEST_01';

OWNER      TABLE_NAME                TABLESPACE           LOGGING       NUM_ROWS       BLOCKS AVG_ROW_LEN LAST_ANALYZED
---------- ------------------------- -------------------- --------- ------------ ------------ ----------- -------------------
TUNER      TB_NOLOGGING_TEST_01      TUNER_DATA1          YES              1,000        1,000       4,015 2025-10-30 21:55:14

 

1-2. clob 칼럼이 존재하는 테이블 (LOGGING 모드로 테이블 생성 후 데이터 입력)

 

[ORA19RF1:oracle@ol8ora19rf1][/home/oracle]$ alias st
alias st='rlwrap sqlplus tuner/oracle'

[ORA19RF1:oracle@ol8ora19rf1][/home/oracle]$ st

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Oct 30 14:06:21 2025
Version 19.28.0.0.0

Copyright (c) 1982, 2025, Oracle.  All rights reserved.

Last Successful login time: Thu Oct 30 2025 12:24:21 +09:00

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.28.0.0.0

[ol8ora19rf1]<TUNER@ORA19RF1>$

DROP TABLE TUNER.TB_NOLOGGING_TEST_02 PURGE;

CREATE TABLE TUNER.TB_NOLOGGING_TEST_02
(
  TEST_NO NUMBER(15)
, DATA_GB VARCHAR2(9)
, CONTS_CLOB CLOB
, CONSTRAINT PK_TB_NOLOGGING_TEST_02 PRIMARY KEY (TEST_NO)
) LOGGING
;

ALTER TABLE TUNER.TB_NOLOGGING_TEST_02 MODIFY LOB (CONTS_CLOB) (NOCACHE LOGGING);

 

INSERT INTO TUNER.TB_NOLOGGING_TEST_02
SELECT ROWNUM AS TEST_NO
     , 'NOLOGGING' AS DATA_GB
     , DBMS_RANDOM.STRING('A', 4000) AS CONTS_CLOB
  FROM DUAL CONNECT BY LEVEL <= 1000
;

COMMIT;

 

SET LINESIZE 200
SET PAGESIZE 100
SET NUMWIDTH 10
COLUMN OWNER           FORMAT A10        HEADING 'OWNER'
COLUMN TABLE_NAME      FORMAT A25        HEADING 'TABLE_NAME'
COLUMN TABLESPACE_NAME FORMAT A20        HEADING 'TABLESPACE'
COLUMN "LOGGING"       FORMAT A9         HEADING 'LOGGING'
COLUMN NUM_ROWS        FORMAT 999,999,999 HEADING 'NUM_ROWS'
COLUMN BLOCKS          FORMAT 999,999,999 HEADING 'BLOCKS'
COLUMN AVG_ROW_LEN     FORMAT 999,999    HEADING 'AVG_ROW_LEN'
COLUMN LAST_ANALYZED   FORMAT A19        HEADING 'LAST_ANALYZED'

SELECT OWNER
     , TABLE_NAME
     , TABLESPACE_NAME
     , "LOGGING"
     , NUM_ROWS
     , BLOCKS
     , AVG_ROW_LEN
     , TO_CHAR(LAST_ANALYZED, 'YYYY-MM-DD HH24:MI:SS') AS LAST_ANALYZED
  FROM DBA_TABLES
 WHERE OWNER = 'TUNER'
   AND TABLE_NAME = 'TB_NOLOGGING_TEST_02';

OWNER      TABLE_NAME                TABLESPACE           LOGGING       NUM_ROWS       BLOCKS AVG_ROW_LEN LAST_ANALYZED
---------- ------------------------- -------------------- --------- ------------ ------------ ----------- -------------------
TUNER      TB_NOLOGGING_TEST_02      TUNER_DATA1          YES       (NULL)       (NULL)       (NULL)      (NULL)


BEGIN
    DBMS_STATS.GATHER_TABLE_STATS
    (
      OWNNAME => 'TUNER'
    , TABNAME => 'TB_NOLOGGING_TEST_02'
    , CASCADE => TRUE
    , METHOD_OPT=> 'FOR ALL INDEXED COLUMNS SIZE 1'
    , GRANULARITY => 'ALL'
    , ESTIMATE_PERCENT => DBMS_STATS.AUTO_SAMPLE_SIZE
    , DEGREE => 4
    );
END;
/

 

SET LINESIZE 200
SET PAGESIZE 100
SET NUMWIDTH 10
COLUMN OWNER           FORMAT A10        HEADING 'OWNER'
COLUMN TABLE_NAME      FORMAT A25        HEADING 'TABLE_NAME'
COLUMN TABLESPACE_NAME FORMAT A20        HEADING 'TABLESPACE'
COLUMN "LOGGING"       FORMAT A9         HEADING 'LOGGING'
COLUMN NUM_ROWS        FORMAT 999,999,999 HEADING 'NUM_ROWS'
COLUMN BLOCKS          FORMAT 999,999,999 HEADING 'BLOCKS'
COLUMN AVG_ROW_LEN     FORMAT 999,999    HEADING 'AVG_ROW_LEN'
COLUMN LAST_ANALYZED   FORMAT A19        HEADING 'LAST_ANALYZED'

SELECT OWNER
     , TABLE_NAME
     , TABLESPACE_NAME
     , "LOGGING"
     , NUM_ROWS
     , BLOCKS
     , AVG_ROW_LEN
     , TO_CHAR(LAST_ANALYZED, 'YYYY-MM-DD HH24:MI:SS') AS LAST_ANALYZED
  FROM DBA_TABLES
 WHERE OWNER = 'TUNER'
   AND TABLE_NAME = 'TB_NOLOGGING_TEST_02';

 

OWNER      TABLE_NAME                TABLESPACE           LOGGING       NUM_ROWS       BLOCKS AVG_ROW_LEN LAST_ANALYZED
---------- ------------------------- -------------------- --------- ------------ ------------ ----------- -------------------
TUNER      TB_NOLOGGING_TEST_02      TUNER_DATA1          YES              1,000           13         147 2025-10-30 21:56:37


SET LINESIZE 220
SET PAGESIZE 100
SET NUMWIDTH 15

COLUMN TABLE_NAME      FORMAT A25        HEADING 'TABLE_NAME'
COLUMN COLUMN_NAME     FORMAT A20        HEADING 'COLUMN_NAME'
COLUMN LOB_SEGMENT     FORMAT A30        HEADING 'LOB_SEGMENT'
COLUMN LOB_INDEX       FORMAT A30        HEADING 'LOB_INDEX'
COLUMN LOGGING         FORMAT A9         HEADING 'LOGGING'
COLUMN IN_ROW          FORMAT A7         HEADING 'IN_ROW'
COLUMN TABLESPACE_NAME FORMAT A20        HEADING 'TABLESPACE'
COLUMN SEGMENT_TYPE    FORMAT A15        HEADING 'SEGMENT_TYPE'
COLUMN BLOCKS          FORMAT 999,999,999 HEADING 'BLOCKS(8K)'
COLUMN MB              FORMAT 999,999.99  HEADING 'SIZE(MB)'

SELECT A.TABLE_NAME
     , A.COLUMN_NAME
     , A.SEGMENT_NAME AS LOB_SEGMENT
     , A.INDEX_NAME   AS LOB_INDEX
     , A.LOGGING
     , A.IN_ROW
     , B.TABLESPACE_NAME
     , B.SEGMENT_TYPE
     , B.BYTES/8192      AS BLOCKS
     , B.BYTES/1024/1024 AS MB
  FROM DBA_LOBS A
     , DBA_SEGMENTS B
 WHERE A.OWNER = 'TUNER'
   AND A.TABLE_NAME = 'TB_NOLOGGING_TEST_02'
   AND B.SEGMENT_NAME = A.SEGMENT_NAME
   AND B.OWNER = A.OWNER
ORDER BY A.COLUMN_NAME;

TABLE_NAME                COLUMN_NAME          LOB_SEGMENT                    LOB_INDEX                      LOGGING   IN_ROW  TABLESPACE           SEGMENT_TYPE      BLOCKS(8K)    SIZE(MB)
------------------------- -------------------- ------------------------------ ------------------------------ --------- ------- -------------------- --------------- ------------ -----------
TB_NOLOGGING_TEST_02      CONTS_CLOB           SYS_LOB0000076395C00003$$      SYS_IL0000076395C00003$$       YES       YES     TUNER_DATA1          LOBSEGMENT             2,072       16.19


[ol8ora19rf1]<TUNER@ORA19RF1>$ ALTER SYSTEM CHECKPOINT;

System altered.

Elapsed: 00:00:00.02

[ol8ora19rf2]<SYS@ORA19RF2>$ ALTER SYSTEM CHECKPOINT;

System altered.

Elapsed: 00:00:04.86


2. DB 풀 백업 (소스 DB)

 

[ORA19RF1:oracle@ol8ora19rf1][/home/oracle]$ mkdir -pv /home/oracle/backup_for_nologging_test
mkdir: created directory '/home/oracle/backup_for_nologging_test'


[ORA19RF1:oracle@ol8ora19rf1][/home/oracle]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'
[ORA19RF1:oracle@ol8ora19rf1][/home/oracle]$ ss

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Oct 30 13:43:36 2025
Version 19.28.0.0.0

Copyright (c) 1982, 2025, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.28.0.0.0


[ol8ora19rf1]<SYS@ORA19RF1>$ create pfile='/home/oracle/backup_for_nologging_test/initORA19RF.ora' from spfile;

File created.

Elapsed: 00:00:00.01

 

[ORA19RF1:oracle@ol8ora19rf1][/home/oracle]$ echo $ORACLE_UNQNAME
ORA19RF
[ORA19RF1:oracle@ol8ora19rf1][/home/oracle]$ echo $ORACLE_SID
ORA19RF1
[ORA19RF1:oracle@ol8ora19rf1][/home/oracle]$ echo $ORACLE_DBNAME
ORA19RF


--새로운 ssh 창 열어서
[ORA19RF1:oracle@ol8ora19rf1][/home/oracle]$ alias rt
alias rt='rman target /'
[ORA19RF1:oracle@ol8ora19rf1][/home/oracle]$ rt

Recovery Manager: Release 19.0.0.0.0 - Production on Thu Oct 30 13:45:22 2025
Version 19.28.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.

connected to target database: ORA19RF (DBID=1289426103)

RMAN>

run {
CONFIGURE RETENTION POLICY TO REDUNDANCY 1;
CONFIGURE BACKUP OPTIMIZATION OFF;
CONFIGURE DEFAULT DEVICE TYPE TO DISK;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/home/oracle/backup_for_nologging_test/%F';
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/home/oracle/backup_for_nologging_test/snapcf_CA.f';
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET;
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1;
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1;
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE;
CONFIGURE RMAN OUTPUT TO KEEP FOR 7 DAYS;
CONFIGURE MAXSETSIZE TO UNLIMITED;
CONFIGURE ENCRYPTION FOR DATABASE OFF;
CONFIGURE ENCRYPTION ALGORITHM 'AES128';
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE;
#CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY; #For ADG
}


RUN {
CONFIGURE CONTROLFILE AUTOBACKUP OFF;
sql 'alter system archive log current';
sql 'alter system checkpoint';
crosscheck backupset;
crosscheck backup;
crosscheck copy;
crosscheck archivelog all;
BACKUP AS COMPRESSED BACKUPSET database FORMAT '/home/oracle/backup_for_nologging_test/ORA19RF_%U.bkp';
backup current controlfile format '/home/oracle/backup_for_nologging_test/ORA19RF_CTL_%U_%T';
delete noprompt obsolete;
delete noprompt expired backup;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
}

 

run {
crosscheck archivelog all;
backup archivelog all format '/home/oracle/backup_for_nologging_test/%d_ARCHIVE_%T_%u_s%s_p%p' delete input;
}

 

RMAN> list backup;
list backup;

List of Backup Sets
===================


BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ -------------------
43      Full    877.51M    DISK        00:00:39     2025-10-30 22:06:03
        BP Key: 43   Status: AVAILABLE  Compressed: YES  Tag: TAG20251030T220524
        Piece Name: /home/oracle/backup_for_nologging_test/ORA19RF_1d47ial4_45_1_1.bkp
  List of Datafiles in backup set 43
  File LV Type Ckp SCN    Ckp Time            Abs Fuz SCN Sparse Name
  ---- -- ---- ---------- ------------------- ----------- ------ ----
  1       Full 6040730    2025-10-30 22:05:24              NO    +DATA1/ORA19RF/DATAFILE/system.257.1213140455
  2       Full 6040730    2025-10-30 22:05:24              NO    +DATA1/ORA19RF/DATAFILE/tuner_data1.272.1213465041
  3       Full 6040730    2025-10-30 22:05:24              NO    +DATA1/ORA19RF/DATAFILE/sysaux.258.1213140481
  4       Full 6040730    2025-10-30 22:05:24              NO    +DATA1/ORA19RF/DATAFILE/undotbs1.259.1213140495
  5       Full 6040730    2025-10-30 22:05:24              NO    +DATA1/ORA19RF/DATAFILE/undotbs2.266.1213140849
  7       Full 6040730    2025-10-30 22:05:24              NO    +DATA1/ORA19RF/DATAFILE/users.260.1213140497
  8       Full 6040730    2025-10-30 22:05:24              NO    +DATA1/ORA19RF/DATAFILE/tuner_idx1.273.1213465053

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ -------------------
44      Full    1.06M      DISK        00:00:01     2025-10-30 22:06:10
        BP Key: 44   Status: AVAILABLE  Compressed: YES  Tag: TAG20251030T220524
        Piece Name: /home/oracle/backup_for_nologging_test/ORA19RF_1e47iamh_46_1_1.bkp
  SPFILE Included: Modification time: 2025-10-30 12:15:34
  SPFILE db_unique_name: ORA19RF
  Control File Included: Ckp SCN: 6040879      Ckp time: 2025-10-30 22:06:09

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ -------------------
45      Full    18.92M     DISK        00:00:01     2025-10-30 22:06:12
        BP Key: 45   Status: AVAILABLE  Compressed: NO  Tag: TAG20251030T220611
        Piece Name: /home/oracle/backup_for_nologging_test/ORA19RF_CTL_1f47iamj_47_1_1_20251030
  Control File Included: Ckp SCN: 6040896      Ckp time: 2025-10-30 22:06:11

BS Key  Size       Device Type Elapsed Time Completion Time
------- ---------- ----------- ------------ -------------------
46      154.50K    DISK        00:00:00     2025-10-30 22:06:50
        BP Key: 46   Status: AVAILABLE  Compressed: NO  Tag: TAG20251030T220649
        Piece Name: /home/oracle/backup_for_nologging_test/ORA19RF_ARCHIVE_20251030_1g47ianq_s48_p1

  List of Archived Logs in backup set 46
  Thrd Seq     Low SCN    Low Time            Next SCN   Next Time
  ---- ------- ---------- ------------------- ---------- ---------
  1    62      6040625    2025-10-30 22:05:20 6041124    2025-10-30 22:06:49
  2    49      6040636    2025-10-30 22:05:22 6041127    2025-10-30 22:06:49

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ -------------------
47      Full    18.95M     DISK        00:00:00     2025-10-30 22:06:51
        BP Key: 47   Status: AVAILABLE  Compressed: NO  Tag: TAG20251030T220651
        Piece Name: /home/oracle/backup_for_nologging_test/c-1289426103-20251030-02
  SPFILE Included: Modification time: 2025-10-30 12:15:34
  SPFILE db_unique_name: ORA19RF
  Control File Included: Ckp SCN: 6041152      Ckp time: 2025-10-30 22:06:51

RMAN> quit
quit


Recovery Manager complete.

 

[ORA19RF1:oracle@ol8ora19rf1][/home/oracle/]$ ls -l /home/oracle/backup_for_nologging_test
total 957968
-rw-r-----. 1 oracle asmadmin  19890176 Oct 30 22:06 c-1289426103-20251030-02
-rw-r--r--. 1 oracle asmadmin      2364 Oct 30 22:04 initORA19RF.ora
-rw-r-----. 1 oracle asmadmin 920141824 Oct 30 22:06 ORA19RF_1d47ial4_45_1_1.bkp
-rw-r-----. 1 oracle asmadmin   1130496 Oct 30 22:06 ORA19RF_1e47iamh_46_1_1.bkp
-rw-r-----. 1 oracle asmadmin    158720 Oct 30 22:06 ORA19RF_ARCHIVE_20251030_1g47ianq_s48_p1
-rw-r-----. 1 oracle asmadmin  19857408 Oct 30 22:06 ORA19RF_CTL_1f47iamj_47_1_1_20251030
-rw-r-----. 1 oracle asmadmin  19775488 Oct 30 22:06 snapcf_CA.f


3. 풀 백업본을 원격지 서버에서 Restore 및 Recover (타켓 DB)

 

[ORA19RS1:oracle@ol8ora19rs1][/home/oracle]$ mkdir -pv /home/oracle/backup_for_nologging_test
mkdir: created directory '/home/oracle/backup_for_nologging_test'

[ORA19RS1:oracle@ol8ora19rs1][/home/oracle]$ scp 192.168.240.31:/home/oracle/backup_for_nologging_test/* /home/oracle/backup_for_nologging_test
oracle@192.168.240.31's password:
'
c-1289426103-20251030-02                                                                                                                                                  100%   19MB 261.4MB/s   00:00
initORA19RF.ora                                                                                                                                                           100% 2364     4.4MB/s   00:00
ORA19RF_1d47ial4_45_1_1.bkp                                                                                                                                               100%  878MB 278.4MB/s   00:03
ORA19RF_1e47iamh_46_1_1.bkp                                                                                                                                               100% 1104KB 193.3MB/s   00:00
ORA19RF_ARCHIVE_20251030_1g47ianq_s48_p1                                                                                                                                  100%  155KB 156.0MB/s   00:00
ORA19RF_CTL_1f47iamj_47_1_1_20251030                                                                                                                                      100%   19MB 270.8MB/s   00:00
snapcf_CA.f                                                                                                                                                               100%   19MB 253.1MB/s   00:00

 

--grid os user로 접속한 후 리스너 정보 추출
[+ASM1:grid@ol8ora19rs1][/home/grid]$ lsnrctl status | grep PORT
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.240.41)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.240.44)(PORT=1521)))

 

--oracle os user
[ORA19RS1:oracle@ol8ora19rs1][/home/oracle/backup_for_nologging_test]$ cp /home/oracle/backup_for_nologging_test/initORA19RF.ora /home/oracle/backup_for_nologging_test/initORA19RF.ora.bak
[ORA19RS1:oracle@ol8ora19rs1][/home/oracle/backup_for_nologging_test]$ cat > /home/oracle/backup_for_nologging_test/initORA19RF.ora << 'EOF'
*.audit_file_dest='/u01/app/oracle/admin/ORA19RF/adump'
*.audit_sys_operations=TRUE
*.audit_trail='OS'
*.compatible='19.0.0'
*.control_files='/home/oracle/backup_for_nologging_test/ORA19RF/controlfile/controlfile_01.ctl'
*.db_block_size=8192
*.db_create_file_dest='/home/oracle/backup_for_nologging_test/ORA19RF/'
*.db_create_online_log_dest_1='/home/oracle/backup_for_nologging_test/ORA19RF/onlinelog_01'
*.db_create_online_log_dest_2='/home/oracle/backup_for_nologging_test/ORA19RF/onlinelog_02'
*.db_name='ORA19RF'
*.diagnostic_dest='/u01/app/oracle'
*.disk_asynch_io=TRUE
*.dispatchers='(PROTOCOL=TCP) (SERVICE=ORA19RFXDB)'
*.filesystemio_options='SETALL'
*.heat_map='OFF'
family:dw_helper.instance_mode='read-only'
*.local_listener='(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.240.41)(PORT=1521)))'
*.log_archive_dest_1='LOCATION=/home/oracle/backup_for_nologging_test/ORA19RF/archivedlog/'
*.log_archive_format='%t_%s_%r.ARC'
*.nls_language='AMERICAN'
*.nls_territory='KOREA'
*.open_cursors=300
*.optimizer_adaptive_plans=FALSE
*.optimizer_adaptive_reporting_only=TRUE
*.optimizer_dynamic_sampling=0
*.parallel_force_local=TRUE
*.parallel_min_servers=0
*.pga_aggregate_limit=0m
*.pga_aggregate_target=268m
*.processes=1432
*.remote_login_passwordfile='exclusive'
*.resource_manager_plan='FORCE:'
*.sga_target=768m
*.undo_retention=3600
*.undo_tablespace='UNDOTBS1'
*.uniform_log_timestamp_format=FALSE
*.use_large_pages='true'
EOF

 

[ORA19RS1:oracle@ol8ora19rs1][/home/oracle/backup_for_nologging_test]$ cat /home/oracle/backup_for_nologging_test/initORA19RF.ora
*.audit_file_dest='/u01/app/oracle/admin/ORA19RF/adump'
*.audit_sys_operations=TRUE
*.audit_trail='OS'
*.compatible='19.0.0'
*.control_files='/home/oracle/backup_for_nologging_test/ORA19RF/controlfile/controlfile_01.ctl'
*.db_block_size=8192
*.db_create_file_dest='/home/oracle/backup_for_nologging_test/ORA19RF/'
*.db_create_online_log_dest_1='/home/oracle/backup_for_nologging_test/ORA19RF/onlinelog_01'
*.db_create_online_log_dest_2='/home/oracle/backup_for_nologging_test/ORA19RF/onlinelog_02'
*.db_name='ORA19RF'
*.diagnostic_dest='/u01/app/oracle'
*.disk_asynch_io=TRUE
*.dispatchers='(PROTOCOL=TCP) (SERVICE=ORA19RFXDB)'
*.filesystemio_options='SETALL'
*.heat_map='OFF'
family:dw_helper.instance_mode='read-only'
*.local_listener='(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.240.41)(PORT=1521)))'
*.log_archive_dest_1='LOCATION=/home/oracle/backup_for_nologging_test/ORA19RF/archivedlog/'
*.log_archive_format='%t_%s_%r.ARC'
*.nls_language='AMERICAN'
*.nls_territory='KOREA'
*.open_cursors=300
*.optimizer_adaptive_plans=FALSE
*.optimizer_adaptive_reporting_only=TRUE
*.optimizer_dynamic_sampling=0
*.parallel_force_local=TRUE
*.parallel_min_servers=0
*.pga_aggregate_limit=0m
*.pga_aggregate_target=268m
*.processes=1432
*.remote_login_passwordfile='exclusive'
*.resource_manager_plan='FORCE:'
*.sga_target=768m
*.undo_retention=3600
*.undo_tablespace='UNDOTBS1'
*.uniform_log_timestamp_format=FALSE
*.use_large_pages='true'

 

--필수 디렉토리 생성
[ORA19RS1:oracle@ol8ora19rs1][/home/oracle/backup_for_nologging_test]$ mkdir -pv /u01/app/oracle/admin/ORA19RF/adump
[ORA19RS1:oracle@ol8ora19rs1][/home/oracle/backup_for_nologging_test]$ mkdir -pv /home/oracle/backup_for_nologging_test/ORA19RF/controlfile
[ORA19RS1:oracle@ol8ora19rs1][/home/oracle/backup_for_nologging_test]$ mkdir -pv /home/oracle/backup_for_nologging_test/ORA19RF/archivedlog 
[ORA19RS1:oracle@ol8ora19rs1][/home/oracle/backup_for_nologging_test]$ mkdir -pv /home/oracle/backup_for_nologging_test/ORA19RF/datafile
[ORA19RS1:oracle@ol8ora19rs1][/home/oracle/backup_for_nologging_test]$ mkdir -pv /home/oracle/backup_for_nologging_test/ORA19RF/onlinelog_01
[ORA19RS1:oracle@ol8ora19rs1][/home/oracle/backup_for_nologging_test]$ mkdir -pv /home/oracle/backup_for_nologging_test/ORA19RF/onlinelog_02

[ORA19RS1:oracle@ol8ora19rs1][/home/oracle/backup_for_nologging_test]$ export ORACLE_SID=ORA19RF1
[ORA19RF1:oracle@ol8ora19rs1][/home/oracle/backup_for_nologging_test]$ echo $ORACLE_SID
ORA19RF1

 

[ORA19RF1:oracle@ol8ora19rs1][/home/oracle/backup_for_nologging_test]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'
[ORA19RF1:oracle@ol8ora19rs1][/home/oracle/backup_for_nologging_test]$ ss

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Oct 30 14:59:43 2025
Version 19.28.0.0.0

Copyright (c) 1982, 2025, Oracle.  All rights reserved.

Connected to an idle instance.

[ol8ora19rs1]<SYS@ORA19RF1>$ startup nomount pfile='/home/oracle/backup_for_nologging_test/initORA19RF.ora';
ORACLE instance started.

Total System Global Area  805305464 bytes
Fixed Size                  8944760 bytes
Variable Size             423624704 bytes
Database Buffers          364904448 bytes
Redo Buffers                7831552 bytes

 

--새로운 ssh 접속
[ORA19RF1:oracle@ol8ora19rs1][/home/oracle/backup_for_nologging_test]$ export ORACLE_SID=ORA19RF1
[ORA19RF1:oracle@ol8ora19rs1][/home/oracle/backup_for_nologging_test]$ echo $ORACLE_SID
ORA19RF1

 

[ORA19RF1:oracle@ol8ora19rs1][/home/oracle/backup_for_nologging_test]$ alias rt
alias rt='rman target /'

 

[ORA19RF1:oracle@ol8ora19rs1][/home/oracle/backup_for_nologging_test]$ rt

Recovery Manager: Release 19.0.0.0.0 - Production on Thu Oct 30 15:00:42 2025
Version 19.28.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.

connected to target database: ORA19RF (not mounted)

 

RMAN> host 'ls -l /home/oracle/backup_for_nologging_test';
host 'ls -l /home/oracle/backup_for_nologging_test';
total 957972
-rw-r-----. 1 oracle oinstall  19890176 Oct 30 22:16 c-1289426103-20251030-02
-rw-r--r--. 1 oracle oinstall      1439 Oct 30 22:26 initORA19RF.ora
-rw-r--r--. 1 oracle oinstall      2364 Oct 30 22:20 initORA19RF.ora.bak
drwxr-xr-x. 7 oracle oinstall       100 Oct 30 22:28 ORA19RF
-rw-r-----. 1 oracle oinstall 920141824 Oct 30 22:16 ORA19RF_1d47ial4_45_1_1.bkp
-rw-r-----. 1 oracle oinstall   1130496 Oct 30 22:16 ORA19RF_1e47iamh_46_1_1.bkp
-rw-r-----. 1 oracle oinstall    158720 Oct 30 22:16 ORA19RF_ARCHIVE_20251030_1g47ianq_s48_p1
-rw-r-----. 1 oracle oinstall  19857408 Oct 30 22:16 ORA19RF_CTL_1f47iamj_47_1_1_20251030
-rw-r-----. 1 oracle oinstall  19775488 Oct 30 22:16 snapcf_CA.f
host command complete

 

--컨트롤 파일 복구

RMAN> restore controlfile from '/home/oracle/backup_for_nologging_test/ORA19RF_CTL_1f47iamj_47_1_1_20251030';

 

--마운트 시킴

RMAN> alter database mount;

 

--set newname으로 복구할 디렉토리 위치를 지정하고 %b 옵션으로 원래 파일명은 유지함

RUN {
  SET NEWNAME FOR DATABASE TO '/home/oracle/backup_for_nologging_test/ORA19RF/datafile/%b';
  RESTORE DATABASE;
  SWITCH DATAFILE ALL;
}

 

executing command: SET NEWNAME

Starting restore at 2025-10-30 22:32:52
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=278 device type=DISK

channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00001 to /home/oracle/backup_for_nologging_test/ORA19RF/datafile/system.257.1213140455
channel ORA_DISK_1: restoring datafile 00002 to /home/oracle/backup_for_nologging_test/ORA19RF/datafile/tuner_data1.272.1213465041
channel ORA_DISK_1: restoring datafile 00003 to /home/oracle/backup_for_nologging_test/ORA19RF/datafile/sysaux.258.1213140481
channel ORA_DISK_1: restoring datafile 00004 to /home/oracle/backup_for_nologging_test/ORA19RF/datafile/undotbs1.259.1213140495
channel ORA_DISK_1: restoring datafile 00005 to /home/oracle/backup_for_nologging_test/ORA19RF/datafile/undotbs2.266.1213140849
channel ORA_DISK_1: restoring datafile 00007 to /home/oracle/backup_for_nologging_test/ORA19RF/datafile/users.260.1213140497
channel ORA_DISK_1: restoring datafile 00008 to /home/oracle/backup_for_nologging_test/ORA19RF/datafile/tuner_idx1.273.1213465053
channel ORA_DISK_1: reading from backup piece /home/oracle/backup_for_nologging_test/ORA19RF_1d47ial4_45_1_1.bkp
channel ORA_DISK_1: piece handle=/home/oracle/backup_for_nologging_test/ORA19RF_1d47ial4_45_1_1.bkp tag=TAG20251030T220524
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:02:25
Finished restore at 2025-10-30 22:35:22

datafile 1 switched to datafile copy
input datafile copy RECID=8 STAMP=1215902122 file name=/home/oracle/backup_for_nologging_test/ORA19RF/datafile/system.257.1213140455
datafile 2 switched to datafile copy
input datafile copy RECID=9 STAMP=1215902122 file name=/home/oracle/backup_for_nologging_test/ORA19RF/datafile/tuner_data1.272.1213465041
datafile 3 switched to datafile copy
input datafile copy RECID=10 STAMP=1215902122 file name=/home/oracle/backup_for_nologging_test/ORA19RF/datafile/sysaux.258.1213140481
datafile 4 switched to datafile copy
input datafile copy RECID=11 STAMP=1215902122 file name=/home/oracle/backup_for_nologging_test/ORA19RF/datafile/undotbs1.259.1213140495
datafile 5 switched to datafile copy
input datafile copy RECID=12 STAMP=1215902122 file name=/home/oracle/backup_for_nologging_test/ORA19RF/datafile/undotbs2.266.1213140849
datafile 7 switched to datafile copy
input datafile copy RECID=13 STAMP=1215902122 file name=/home/oracle/backup_for_nologging_test/ORA19RF/datafile/users.260.1213140497
datafile 8 switched to datafile copy
input datafile copy RECID=14 STAMP=1215902122 file name=/home/oracle/backup_for_nologging_test/ORA19RF/datafile/tuner_idx1.273.1213465053


RMAN> host 'ls -l /home/oracle/backup_for_nologging_test/*ARCHIVE*';
host 'ls -l /home/oracle/backup_for_nologging_test/*ARCHIVE*';
-rw-r-----. 1 oracle oinstall 158720 Oct 30 22:16
/home/oracle/backup_for_nologging_test/ORA19RF_ARCHIVE_20251030_1g47ianq_s48_p1

host command complete

RMAN> list backup of archivelog all;
list backup of archivelog all;

List of Backup Sets
===================


BS Key  Size       Device Type Elapsed Time Completion Time
------- ---------- ----------- ------------ -------------------
40      146.00K    DISK        00:00:00     2025-10-30 15:05:54
        BP Key: 40   Status: EXPIRED  Compressed: NO  Tag: TAG20251030T150554
        Piece Name: /home/oracle/backup_for_nologging_test/ORA19RF_ARCHIVE_20251030_1a47hi2i_s42_p1

  List of Archived Logs in backup set 40
  Thrd Seq     Low SCN    Low Time            Next SCN   Next Time
  ---- ------- ---------- ------------------- ---------- ---------
  1    57      5900414    2025-10-30 15:05:01 5900751    2025-10-30 15:05:54
  2    45      5900423    2025-10-30 15:05:03 5900748    2025-10-30 15:05:54

BS Key  Size       Device Type Elapsed Time Completion Time
------- ---------- ----------- ------------ -------------------
41      34.20M     DISK        00:00:00     2025-10-30 16:15:50
        BP Key: 41   Status: EXPIRED  Compressed: NO  Tag: TAG20251030T161550
        Piece Name: /home/oracle/backup_for_nologging_test/ARCHIVE_ORA19RF_20251030_1b47hm5m_s43_p1

  List of Archived Logs in backup set 41
  Thrd Seq     Low SCN    Low Time            Next SCN   Next Time
  ---- ------- ---------- ------------------- ---------- ---------
  1    58      5900751    2025-10-30 15:05:54 5922164    2025-10-30 16:11:48

BS Key  Size       Device Type Elapsed Time Completion Time
------- ---------- ----------- ------------ -------------------
42      32.15M     DISK        00:00:00     2025-10-30 16:15:52
        BP Key: 42   Status: EXPIRED  Compressed: NO  Tag: TAG20251030T161551
        Piece Name: /home/oracle/backup_for_nologging_test/ARCHIVE_ORA19RF_20251030_1c47hm5o_s44_p1

  List of Archived Logs in backup set 42
  Thrd Seq     Low SCN    Low Time            Next SCN   Next Time
  ---- ------- ---------- ------------------- ---------- ---------
  2    46      5900748    2025-10-30 15:05:54 5922167    2025-10-30 16:11:48
--> 소스 DB에서 컨트롤 파일 백업 시 아카이브 로그 상황임

--> 소스 DB에서 컨트롤 파일 백업 후 아카이브 로그를 백업했으므로 아카이브 로그의 백업본을 catalog에 등록시켜야함

(결국 컨트롤 파일을 백업한 시점에는 백업한 아카이브가 없었던 상황이라 안보이는 것임, 이걸 이해하는 것이 중요함)

RMAN> catalog start with '/home/oracle/backup_for_nologging_test/ORA19RF_ARCHIVE_20251030_1g47ianq_s48_p1';

catalog start with '/home/oracle/backup_for_nologging_test/ORA19RF_ARCHIVE_20251030_1g47ianq_s48_p1';
searching for all files that match the pattern /home/oracle/backup_for_nologging_test/ORA19RF_ARCHIVE_20251030_1g47ianq_s48_p1

List of Files Unknown to the Database
=====================================
File Name: /home/oracle/backup_for_nologging_test/ORA19RF_ARCHIVE_20251030_1g47ianq_s48_p1

Do you really want to catalog the above files (enter YES or NO)? YES
cataloging files...
cataloging done

List of Cataloged Files
=======================
File Name: /home/oracle/backup_for_nologging_test/ORA19RF_ARCHIVE_20251030_1g47ianq_s48_p1


RMAN> list backup of archivelog all;
list backup of archivelog all;

List of Backup Sets
===================


BS Key  Size       Device Type Elapsed Time Completion Time
------- ---------- ----------- ------------ -------------------
40      146.00K    DISK        00:00:00     2025-10-30 15:05:54
        BP Key: 40   Status: EXPIRED  Compressed: NO  Tag: TAG20251030T150554
        Piece Name: /home/oracle/backup_for_nologging_test/ORA19RF_ARCHIVE_20251030_1a47hi2i_s42_p1

  List of Archived Logs in backup set 40
  Thrd Seq     Low SCN    Low Time            Next SCN   Next Time
  ---- ------- ---------- ------------------- ---------- ---------
  1    57      5900414    2025-10-30 15:05:01 5900751    2025-10-30 15:05:54
  2    45      5900423    2025-10-30 15:05:03 5900748    2025-10-30 15:05:54

BS Key  Size       Device Type Elapsed Time Completion Time
------- ---------- ----------- ------------ -------------------
41      34.20M     DISK        00:00:00     2025-10-30 16:15:50
        BP Key: 41   Status: EXPIRED  Compressed: NO  Tag: TAG20251030T161550
        Piece Name: /home/oracle/backup_for_nologging_test/ARCHIVE_ORA19RF_20251030_1b47hm5m_s43_p1

  List of Archived Logs in backup set 41
  Thrd Seq     Low SCN    Low Time            Next SCN   Next Time
  ---- ------- ---------- ------------------- ---------- ---------
  1    58      5900751    2025-10-30 15:05:54 5922164    2025-10-30 16:11:48

BS Key  Size       Device Type Elapsed Time Completion Time
------- ---------- ----------- ------------ -------------------
42      32.15M     DISK        00:00:00     2025-10-30 16:15:52
        BP Key: 42   Status: EXPIRED  Compressed: NO  Tag: TAG20251030T161551
        Piece Name: /home/oracle/backup_for_nologging_test/ARCHIVE_ORA19RF_20251030_1c47hm5o_s44_p1

  List of Archived Logs in backup set 42
  Thrd Seq     Low SCN    Low Time            Next SCN   Next Time
  ---- ------- ---------- ------------------- ---------- ---------
  2    46      5900748    2025-10-30 15:05:54 5922167    2025-10-30 16:11:48

BS Key  Size       Device Type Elapsed Time Completion Time
------- ---------- ----------- ------------ -------------------
45      154.50K    DISK        00:00:00     2025-10-30 22:06:50
        BP Key: 45   Status: AVAILABLE  Compressed: NO  Tag: TAG20251030T220649
        Piece Name: /home/oracle/backup_for_nologging_test/ORA19RF_ARCHIVE_20251030_1g47ianq_s48_p1

  List of Archived Logs in backup set 45
  Thrd Seq     Low SCN    Low Time            Next SCN   Next Time
  ---- ------- ---------- ------------------- ---------- ---------
  1    62      6040625    2025-10-30 22:05:20 6041124    2025-10-30 22:06:49
  2    49      6040636    2025-10-30 22:05:22 6041127    2025-10-30 22:06:49
--> 해당 아카이브 로그의 백업본이 catalog 등록됨


RMAN> RECOVER DATABASE;
RECOVER DATABASE;
Starting recover at 2025-10-30 22:44:08
using channel ORA_DISK_1

starting media recovery

channel ORA_DISK_1: starting archived log restore to default destination
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=62
channel ORA_DISK_1: restoring archived log
archived log thread=2 sequence=49
channel ORA_DISK_1: reading from backup piece /home/oracle/backup_for_nologging_test/ORA19RF_ARCHIVE_20251030_1g47ianq_s48_p1
channel ORA_DISK_1: piece handle=/home/oracle/backup_for_nologging_test/ORA19RF_ARCHIVE_20251030_1g47ianq_s48_p1 tag=TAG20251030T220649
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
archived log file name=/home/oracle/backup_for_nologging_test/ORA19RF/archivedlog/1_62_1213140537.ARC thread=1 sequence=62
archived log file name=/home/oracle/backup_for_nologging_test/ORA19RF/archivedlog/2_49_1213140537.ARC thread=2 sequence=49
unable to find archived log
archived log thread=1 sequence=63
RMAN Command Id : 2025-10-30T22:31:54
RMAN Command Id : 2025-10-30T22:31:54
RMAN Command Id : 2025-10-30T22:31:54
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 10/30/2025 22:44:10
RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 63 and starting SCN of 6041124
RMAN Client Diagnostic Trace file : /u01/app/oracle/diag/clients/user_oracle/RMAN_2520668267_110/trace/ora_rman_1005_0.trc
RMAN Server Diagnostic Trace file : /u01/app/oracle/diag/rdbms/ora19rf/ORA19RF1/trace/ORA19RF1_ora_3380.trc

 

--데이터 확인을 위해 read only로 open함

RMAN> alter database open read only;
alter database open read only;
Statement processed

RMAN> select count(*) from TUNER.TB_NOLOGGING_TEST_01;
select count(*) from TUNER.TB_NOLOGGING_TEST_01;
  COUNT(*)
----------
      1000

RMAN> select * from TUNER.TB_NOLOGGING_TEST_01;
...생략
1000 rows selected

 

RMAN> select count(*) from TUNER.TB_NOLOGGING_TEST_02;
select count(*) from TUNER.TB_NOLOGGING_TEST_02;
  COUNT(*)
----------
      1000

RMAN> select * from TUNER.TB_NOLOGGING_TEST_02;
...생략
1000 rows selected
--> 테스트 테이블에 입력한 데이터가 존재하는 상황임

 

--데이터를 확인했으니 해당 타켓 DB 인스턴스를 내리고 다시 mount 모드로 기동 시킬것임

RMAN> shutdown immediate;
shutdown immediate;
database closed
database dismounted
Oracle instance shut down

 

--새로운 ssh 창 열어서
[ORA19RF1:oracle@ol8ora19rs1][/home/oracle/backup_for_nologging_test]$ echo $ORACLE_SID
ORA19RF1
[ORA19RF1:oracle@ol8ora19rs1][/home/oracle/backup_for_nologging_test]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'
[ORA19RF1:oracle@ol8ora19rs1][/home/oracle/backup_for_nologging_test]$ ss

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Oct 30 15:37:02 2025
Version 19.28.0.0.0

Copyright (c) 1982, 2025, Oracle.  All rights reserved.

Connected to an idle instance.

[ol8ora19rs1]<SYS@ORA19RF1>$ startup nomount pfile='/home/oracle/backup_for_nologging_test/initORA19RF.ora';
ORACLE instance started.

Total System Global Area  805305464 bytes
Fixed Size                  8944760 bytes
Variable Size             423624704 bytes
Database Buffers          364904448 bytes
Redo Buffers                7831552 bytes

[ol8ora19rs1]<SYS@ORA19RF1>$ alter database mount;

Database altered.

Elapsed: 00:00:04.07

[ol8ora19rs1]<SYS@ORA19RF1>$
SET LINESIZE 220
SET PAGESIZE 100
SET NUMWIDTH 20
COLUMN DBID                FORMAT 999999999999 HEADING 'DBID'
COLUMN NAME                FORMAT A10           HEADING 'DB_NAME'
COLUMN OPEN_MODE           FORMAT A12           HEADING 'OPEN_MODE'
COLUMN DB_UNIQUE_NAME      FORMAT A15           HEADING 'DB_UNIQUE_NAME'
COLUMN RESETLOGS_CHANGE#   FORMAT 999999999999 HEADING 'RESETLOGS|CHANGE#'
COLUMN RESETLOGS_TIME      FORMAT A19           HEADING 'RESETLOGS_TIME'
COLUMN CHECKPOINT_CHANGE#  FORMAT 999999999999 HEADING 'CHECKPOINT|CHANGE#'
COLUMN ARCHIVE_CHANGE#     FORMAT 999999999999 HEADING 'ARCHIVE|CHANGE#'
COLUMN CONTROLFILE_CHANGE# FORMAT 999999999999 HEADING 'CONTROLFILE|CHANGE#'
COLUMN CURRENT_SCN         FORMAT 999999999999 HEADING 'CURRENT|SCN'
COLUMN CDB                 FORMAT A3            HEADING 'CDB'

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';

SELECT
     DBID
    , NAME
    , OPEN_MODE
    , RESETLOGS_CHANGE#
    , RESETLOGS_TIME
    , CHECKPOINT_CHANGE#
    , ARCHIVE_CHANGE#
    , CONTROLFILE_CHANGE#
    , CURRENT_SCN
    , DB_UNIQUE_NAME
    , CDB
FROM
    V$DATABASE;

                                          RESETLOGS                        CHECKPOINT       ARCHIVE   CONTROLFILE       CURRENT
         DBID DB_NAME    OPEN_MODE          CHANGE# RESETLOGS_TIME            CHANGE#       CHANGE#       CHANGE#           SCN DB_UNIQUE_NAME  CDB
------------- ---------- ------------ ------------- ------------------- ------------- ------------- ------------- ------------- --------------- ---
   1289426103 ORA19RF    MOUNTED            1920977 2025-09-29 23:28:57       6040650       6040621       6041124             0 ORA19RF         NO

--> CHECKPOINT_CHANGE# : 데이터파일이 일관되게 커밋된 시점(SCN)
--> CONTROLFILE_CHANGE# : 컨트롤파일에 기록된 마지막 변경 시점의 SCN


SET LINESIZE 250
SET PAGESIZE 100
SET NUMWIDTH 20
COLUMN FILE#              FORMAT 9999           HEADING 'FILE#'
COLUMN STATUS             FORMAT A10            HEADING 'STATUS'
COLUMN TABLESPACE_NAME    FORMAT A20            HEADING 'TABLESPACE_NAME'
COLUMN RESETLOGS_CHANGE#  FORMAT 999999999999   HEADING 'RESETLOGS|CHANGE#'
COLUMN NAME               FORMAT A90            HEADING 'DATAFILE_NAME'
COLUMN CHECKPOINT_CHANGE# FORMAT 999999999999   HEADING 'CHECKPOINT|CHANGE#'
COLUMN ERROR              FORMAT A12            HEADING 'ERROR'
COLUMN CON_NAME           FORMAT A20            HEADING 'CON_NAME'

SELECT
     a.FILE#
    , a.STATUS
    , a.TABLESPACE_NAME
    , a.RESETLOGS_CHANGE#
    , a.NAME
    , a.CHECKPOINT_CHANGE#
    , a.ERROR
    , (SELECT l.name
         FROM v$containers l
        WHERE l.con_id = a.con_id) AS con_name
FROM
    v$datafile_header a
ORDER BY
    a.FILE#;

                                          RESETLOGS                                                                                               CHECKPOINT
FILE# STATUS     TABLESPACE_NAME            CHANGE# DATAFILE_NAME                                                                                    CHANGE# ERROR        CON_NAME
----- ---------- -------------------- ------------- ------------------------------------------------------------------------------------------ ------------- ------------ --------------------
    1 ONLINE     SYSTEM                     1920977 /home/oracle/backup_for_nologging_test/ORA19RF/datafile/system.257.1213140455                    6041124 (NULL)       ORA19RF
    2 ONLINE     TUNER_DATA1                1920977 /home/oracle/backup_for_nologging_test/ORA19RF/datafile/tuner_data1.272.1213465041               6041124 (NULL)       ORA19RF
    3 ONLINE     SYSAUX                     1920977 /home/oracle/backup_for_nologging_test/ORA19RF/datafile/sysaux.258.1213140481                    6041124 (NULL)       ORA19RF
    4 ONLINE     UNDOTBS1                   1920977 /home/oracle/backup_for_nologging_test/ORA19RF/datafile/undotbs1.259.1213140495                  6041124 (NULL)       ORA19RF
    5 ONLINE     UNDOTBS2                   1920977 /home/oracle/backup_for_nologging_test/ORA19RF/datafile/undotbs2.266.1213140849                  6041124 (NULL)       ORA19RF
    7 ONLINE     USERS                      1920977 /home/oracle/backup_for_nologging_test/ORA19RF/datafile/users.260.1213140497                     6041124 (NULL)       ORA19RF
    8 ONLINE     TUNER_IDX1                 1920977 /home/oracle/backup_for_nologging_test/ORA19RF/datafile/tuner_idx1.273.1213465053                6041124 (NULL)       ORA19RF

7 rows selected.

Elapsed: 00:00:00.01

$DATABASE의 CONTROLFILE_CHANGE# = 6041124 인 상황에서 V$DATAFILE_HEADER의 각 DATAFILE CHECKPOINT_CHANGE# = 6041124 으로 완전히 일치함
복구가 끝난 직후(RECOVER DATABASE) DB가 완전히 일관된 상태임을 의미

 

 

CHECKPOINT_CHANGE# (V$DATABASE) : 6040650 (복구 시작 시점에 데이터파일이 도달해 있던 SCN)

CONTROLFILE_CHANGE# : 6041124 (복구를 마친 시점에 컨트롤파일이 갱신된 SCN)

V$DATAFILE_HEADER.CHECKPOINT_CHANGE# : 6041124 (복구 완료 후, 모든 데이터파일이 컨트롤파일 SCN과 동일하게 갱신됨)

 

4. 테스트 테이블을 nologging 모드로 설정 후 append로 데이터 insert (소스 DB)

 

Using Oracle7 UNRECOVERABLE and Oracle8 NOLOGGING Option (문서 ID 147474.1) 참고
어떤 상황에서 아카이브 로그로 복구를 못하는 데이터가 만들어지는에 대해 설명한 문서임

 

----------------------------------------------문서 내용 시작-----------------------------------------

무엇을 말하나? (한줄 요약)

UNRECOVERABLE/NOLOGGING 옵션은 특정 작업에서 “데이터 블록”에 대한 redo 생성(로그 기록)을 줄여서 성능을 올리는 대신,

그 작업으로 만들어진 데이터는 사고 시 일반 복구(media/instance recovery)로는 되살릴 수 없게 만든다는 뜻이에요. 작업 직후 반드시 백업이 필요합니다.

 

왜 이런 옵션이 있나?
Redo 로그 생성은 래치/CPU와 redo 파일 I/O가 수반되어 비용이 큰 작업입니다.

그래서 일부 작업에 한해서만 redo 생성을 생략(또는 최소화)하는 모드를 제공해 성능을 끌어올리고 리두(아카이브) 생성 최소화가 목적입니다.

정확히 어떻게 동작하나?
데이터딕셔너리용 DDL 정보는 여전히 redo에 기록됩니다. (객체 생성/구조 변경 사실은 남아야 하므로)
하지만 대량 데이터 적재에서 생성되는 “실제 행 데이터(블록)”는 redo에 기록하지 않도록 할 수 있습니다.
예: CREATE TABLE ... AS SELECT 중에 들어간 데이터 자체는 로그를 거의 남기지 않음.

 

어디에 설정할 수 있나?
객체/공간 단위 속성으로 NOLOGGING을 걸 수 있습니다: 테이블, 파티션, 인덱스, 테이블스페이스 등.
단, 이 속성을 걸었다고 해서 모든 작업이 무조건 NOLOGGING이 되는 건 아님. “지원되는 작업”에서만 실제 효과가 납니다.

 

어떤 작업이 NOLOGGING을 쓸 수 있나? (문서에 명시된 대상)
Direct Path 로드: SQL*Loader Direct Load
Direct-Load INSERT (예: INSERT /*+ APPEND */ ...)
CTAS: CREATE TABLE ... AS SELECT
인덱스 작업: CREATE INDEX, ALTER INDEX ... REBUILD, REBUILD PARTITION, SPLIT PARTITION
파티션 이동/분할: ALTER TABLE ... MOVE PARTITION, SPLIT PARTITION
LOB 예외: out-of-line LOB이면서 NOCACHE NOLOGGING일 때의 INSERT/UPDATE/DELETE
In-line LOB : 데이터가 작으면 테이블 로우 안에 함께 저장됨 (일반 컬럼처럼 redo 처리됨)

out-of-line LOB : 큰 데이터(BLOB, CLOB 등)는 별도의 LOB segment에 저장됨

위 나열된 이런 류의 작업에서만 NOLOGGING로 redo 생성을 대폭 줄일 수 있습니다.

out-of line LOB 예시
CREATE TABLE t_lob (
  id NUMBER,
  data CLOB
)
LOB (data) STORE AS SECUREFILE (
  NOCACHE
  NOLOGGING
);
NOCACHE: LOB 데이터를 버퍼 캐시에 적재하지 않음
NOLOGGING: LOB 데이터를 redo 로그에 기록하지 않음.
이 LOB 컬럼에 대해 INSERT / UPDATE / DELETE 작업을 해도, 그 LOB 데이터 자체(즉, 실제 CLOB/BLOB 내용)는 redo에 거의 남지 않습니다.


결론 : 테이블이 노로깅이어도 일반적인 dml(update, delete, insert, merge)은 모두 REDO로그가 남음

       테이블이 노로깅이어도 append insert 를 제외한 update, delete, merge는 모두 REDO로그가 남음

       테이블이 노로깅인데 APPEND힌트를 기재안해도 PARALLEL DML로 DIRECT PATH LOAD가 유도되면 REDO로그가 최소화됨

       하지만 out-of-line LOB은 nocache nologging일 때 일반적인 dml이라도 redo에 안남음

 

성능 이점 vs. 복구(리스크)
이점: redo가 거의 안 생기므로 생성·쓰기 부담이 줄어 성능 향상(CPU/래치/redo I/O 감소).
리스크/제약:
해당 작업으로 적재/작성된 데이터는 미디어 복구로 복원 불가합니다.
인스턴스/DB 장애가 나면 그 작업을 “처음부터 다시” 해야 할 수도 있음(redo가 없으니 재생할 수 없음).
따라서 작업 완료 직후 백업이 필수입니다. 이 백업이 있어야 이후 장애 시 해당 시점으로 복구가 가능해요.

 

흔한 오해 정리
NOLOGGING 속성을 걸어도 **일반 DML(일반 INSERT/UPDATE/DELETE)**은 보통 redo를 만듭니다.
Direct Path가 아니면 효과가 없다고 보면 됩니다. (LOB의 특별 케이스 제외)
스키마 변경 사실(DDL 메타데이터)은 항상 redo에 기록됩니다. 데이터만 최소화되는 겁니다.

 

실무 사용 예시

CTAS 고속 적재
CREATE TABLE sales_nologging NOLOGGING
AS
SELECT * FROM sales_source;
적재 끝나면 즉시 백업.

 

대용량 Append INSERT
ALTER TABLE fact_sales NOLOGGING;

INSERT /*+ APPEND */
INTO fact_sales
SELECT ... FROM staging_data;

Direct Path로 들어가며 redo가 크게 줄어듦. 끝나면 백업 필수.

인덱스 재구성
ALTER INDEX idx_orders REBUILD NOLOGGING;
리빌드가 빠름. 이후 백업.
----------------------------------------------문서 내용 종료-----------------------------------------

4-1. 일반 테이블 (NOLOGGING 모드로 테이블 속성 변경 후 데이터 입력)

[ol8ora19rf1]<SYS@ORA19RF1>$ select current_scn from v$database;

CURRENT_SCN
-----------
    6065883

1 row selected.

Elapsed: 00:00:00.01

 

[ol8ora19rf1]<SYS@ORA19RF1>$

 

--테이블을 노로깅으로 설정
alter table TUNER.TB_NOLOGGING_TEST_01 nologging;

 

--append 힌트주고 insert (row단위 redo 로그 안남음)

insert /*+ append */ into TUNER.TB_NOLOGGING_TEST_01
WITH TMP_1 AS
(
    SELECT /*+ MATERILAIZE */
           MAX(TEST_NO) MAX_TEST_NO
      FROM TUNER.TB_NOLOGGING_TEST_01
)
SELECT MAX_TEST_NO+LEVEL AS TEST_NO
     , 'NOLOGGING' AS DATA_GB
     , DBMS_RANDOM.STRING('A', 4000) AS CONTS_CLOB
  FROM TMP_1 CONNECT BY LEVEL <= 1000
;

 

COMMIT;

 

[ol8ora19rf1]<SYS@ORA19RF1>$ select current_scn from v$database;

CURRENT_SCN
-----------
    6066033

1 row selected.

Elapsed: 00:00:00.00

 

4-2. clob 칼럼이 존재하는 테이블 (NOLOGGING 모드로 테이블 및 CLOB 칼럼의 속성 변경 후 데이터 입력)

 

CURRENT_SCN
-----------
    6066092

1 row selected.

Elapsed: 00:00:00.00

 

--테이블을 노로깅으로 설정

alter table TUNER.TB_NOLOGGING_TEST_02 nologging;

 

--lob 칼럼 단위로도 노로깅 설정

ALTER TABLE TUNER.TB_NOLOGGING_TEST_02 MODIFY LOB (CONTS_CLOB) (NOCACHE nologging);

insert /*+ append */ into TUNER.TB_NOLOGGING_TEST_02
WITH TMP_1 AS
(
    SELECT /*+ MATERILAIZE */
           MAX(TEST_NO) MAX_TEST_NO
      FROM TUNER.TB_NOLOGGING_TEST_02
)
SELECT MAX_TEST_NO+LEVEL AS TEST_NO
     , 'NOLOGGING' AS DATA_GB
     , DBMS_RANDOM.STRING('A', 4000) AS CONTS_CLOB
  FROM TMP_1 CONNECT BY LEVEL <= 1000
;

COMMIT;

 

select current_scn from v$database;

CURRENT_SCN
-----------
    6066811

1 row selected.

Elapsed: 00:00:00.00

 

--체크 포인트 및 아카이브 로그 생성 (각각의 노드에서 실행)

[ol8ora19rf1]<SYS@ORA19RF1>$ alter system checkpoint;
[ol8ora19rf2]<
SYS@ORA19RF2>$ alter system checkpoint;

[ol8ora19rf1]<SYS@ORA19RF1>$ ALTER SYSTEM ARCHIVE LOG CURRENT;
[ol8ora19rf2]<
SYS@ORA19RF2>$ ALTER SYSTEM ARCHIVE LOG CURRENT;


SET LINESIZE 220
SET PAGESIZE 200
SET NUMWIDTH 20
COLUMN THREAD#         FORMAT 999      HEADING 'THR'
COLUMN SEQUENCE#       FORMAT 999999   HEADING 'SEQ'
COLUMN RESETLOGS_CHANGE# FORMAT 999999999999 HEADING 'RESETLOGS|CHANGE#'
COLUMN FIRST_CHANGE#   FORMAT 999999999999 HEADING 'FIRST|CHANGE#'
COLUMN NEXT_CHANGE#    FORMAT 999999999999 HEADING 'NEXT|CHANGE#'
COLUMN ARCHIVED        FORMAT A8       HEADING 'ARCHIVED'
COLUMN DELETED         FORMAT A8       HEADING 'DELETED'
COLUMN NAME            FORMAT A100     HEADING 'ARCHIVELOG NAME'

SELECT
       A.NAME
     , A.THREAD#
     , A.SEQUENCE#
     , A.RESETLOGS_CHANGE#
     , A.FIRST_CHANGE#
     , A.NEXT_CHANGE#
     , A.ARCHIVED
     , A.DELETED
  FROM V$ARCHIVED_LOG A
 WHERE 1=1
   AND A.FIRST_CHANGE# <= 6066811  
--타켓 DB가 가야할 지점은 6066811 이므로 FIRST_CHANGE# 이 6066811 보다 작거나 같은 것은 복구 대상임
   AND A.NEXT_CHANGE#  >= 6041125   --타켓 DB은 6041124 까지 적용된 상태이므로 A.NEXT_CHANGE# 이 6041124+1=6041125 보다 같거나 큰 것은 복구대상임
 ORDER BY A.THREAD#, A.SEQUENCE#
;

ARCHIVELOG NAME                                                                                       THR     SEQ       CHANGE#       CHANGE#       CHANGE# ARCHIVED DELETED
---------------------------------------------------------------------------------------------------- ---- ------- ------------- ------------- ------------- -------- --------
(NULL)                                                                                                  1      62       1920977       6040625       6041124 YES      YES
+FRA1/ORA19RF/ARCHIVELOG/2025_10_30/thread_1_seq_63.292.1215905289                                      1      63       1920977       6041124       6067001 YES      NO
(NULL)                                                                                                  2      49       1920977       6040636       6041127 YES      YES
+FRA1/ORA19RF/ARCHIVELOG/2025_10_30/thread_2_seq_50.293.1215905289                                      2      50       1920977       6041127       6066998 YES      NO

4 rows selected.

Elapsed: 00:00:00.01

 

--새로운 ssh 창 열어서

--소스DB에서 아카이브를 백업 받음
[ORA19RF1:oracle@ol8ora19rf1][/home/oracle]$ export ORACLE_SID=ORA19RF1
[ORA19RF1:oracle@ol8ora19rf1][/home/oracle]$ echo $ORACLE_SID
ORA19RF1

[ORA19RF1:oracle@ol8ora19rf1][/home/oracle]$ alias rt
alias rt='rman target /'
[ORA19RF1:oracle@ol8ora19rf1][/home/oracle]$ rt

Recovery Manager: Release 19.0.0.0.0 - Production on Thu Oct 30 23:33:49 2025
Version 19.28.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.

connected to target database: ORA19RF (DBID=1289426103)

RMAN>
run {
crosscheck archivelog all;
BACKUP ARCHIVELOG FROM SEQUENCE 63 UNTIL SEQUENCE 63 THREAD 1 format '/home/oracle/backup_for_nologging_test/ARCHIVE_%d_%T_%u_s%s_p%p';
BACKUP ARCHIVELOG FROM SEQUENCE 50 UNTIL SEQUENCE 50 THREAD 2 format '/home/oracle/backup_for_nologging_test/ARCHIVE_%d_%T_%u_s%s_p%p';
}

Starting backup at 2025-10-30 23:33:56
using channel ORA_DISK_1
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=63 RECID=103 STAMP=1215905288
channel ORA_DISK_1: starting piece 1 at 2025-10-30 23:33:56
channel ORA_DISK_1: finished piece 1 at 2025-10-30 23:33:57
piece handle=/home/oracle/backup_for_nologging_test/ARCHIVE_ORA19RF_20251030_1i47ifr4_s50_p1 tag=TAG20251030T233356 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 2025-10-30 23:33:57

Starting backup at 2025-10-30 23:33:57
using channel ORA_DISK_1
channel ORA_DISK_1: starting archived log backup set
channel ORA_DISK_1: specifying archived log(s) in backup set
input archived log thread=2 sequence=50 RECID=102 STAMP=1215905288
channel ORA_DISK_1: starting piece 1 at 2025-10-30 23:33:57
channel ORA_DISK_1: finished piece 1 at 2025-10-30 23:33:58
piece handle=/home/oracle/backup_for_nologging_test/ARCHIVE_ORA19RF_20251030_1j47ifr5_s51_p1 tag=TAG20251030T233357 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 2025-10-30 23:33:58

Starting Control File and SPFILE Autobackup at 2025-10-30 23:33:58
piece handle=/home/oracle/backup_for_nologging_test/c-1289426103-20251030-03 comment=NONE
Finished Control File and SPFILE Autobackup at 2025-10-30 23:33:59


5. 타켓 DB에서 소스DB에서 백업받은 아카이브 로그를 가져와서 Recover (타켓 DB)

 

[ORA19RF1:oracle@ol8ora19rs1][/home/oracle/backup_for_nologging_test]$ scp 192.168.240.31:/home/oracle/backup_for_nologging_test/ARCHIVE_ORA19RF_20251030_1i47ifr4_s50_p1 /home/oracle/backup_for_nologging_test
oracle@192.168.240.31's password:
'
ARCHIVE_ORA19RF_20251030_1i47ifr4_s50_p1                                                                                                                               100%   40MB 333.0MB/s   00:00

[ORA19RF1:oracle@ol8ora19rs1][/home/oracle/backup_for_nologging_test]$ scp 192.168.240.31:/home/oracle/backup_for_nologging_test/ARCHIVE_ORA19RF_20251030_1j47ifr5_s51_p1 /home/oracle/backup_for_nologging_test
oracle@192.168.240.31's password:
'
ARCHIVE_ORA19RF_20251030_1j47ifr5_s51_p1                                                                                                                               100%   37MB 344.7MB/s   00:00

[ORA19RS1:oracle@ol8ora19rs1][/home/oracle]$ ls -alrt /home/oracle/backup_for_nologging_test
total 1036996
-rw-r-----.  1 oracle oinstall  19890176 Oct 30 22:16 c-1289426103-20251030-02
-rw-r-----.  1 oracle oinstall 920141824 Oct 30 22:16 ORA19RF_1d47ial4_45_1_1.bkp
-rw-r-----.  1 oracle oinstall   1130496 Oct 30 22:16 ORA19RF_1e47iamh_46_1_1.bkp
-rw-r-----.  1 oracle oinstall    158720 Oct 30 22:16 ORA19RF_ARCHIVE_20251030_1g47ianq_s48_p1
-rw-r-----.  1 oracle oinstall  19857408 Oct 30 22:16 ORA19RF_CTL_1f47iamj_47_1_1_20251030
-rw-r-----.  1 oracle oinstall  19775488 Oct 30 22:16 snapcf_CA.f
-rw-r--r--.  1 oracle oinstall      2364 Oct 30 22:20 initORA19RF.ora.bak
-rw-r--r--.  1 oracle oinstall      1439 Oct 30 22:26 initORA19RF.ora
drwxr-xr-x.  8 oracle oinstall       115 Oct 30 22:44 ORA19RF
drwx------. 13 oracle oinstall      4096 Oct 30 23:35 ..
-rw-r-----.  1 oracle oinstall  42316800 Oct 30 23:35 ARCHIVE_ORA19RF_20251030_1i47ifr4_s50_p1
drwxr-xr-x.  3 oracle oinstall      4096 Oct 30 23:36 .
-rw-r-----.  1 oracle oinstall  38590464 Oct 30 23:36 ARCHIVE_ORA19RF_20251030_1j47ifr5_s51_p1

 

[ORA19RFS1:oracle@ol8ora19rs1][/home/oracle]$ export ORACLE_SID=ORA19RF1
[ORA19RF1:oracle@ol8ora19rs1][/home/oracle]$ echo $ORACLE_SID
ORA19RF1

[ORA19RF1:oracle@ol8ora19rs1][/home/oracle]$ alias rt
alias rt='rman target /'
[ORA19RF1:oracle@ol8ora19rs1][/home/oracle]$ rt

Recovery Manager: Release 19.0.0.0.0 - Production on Thu Oct 30 23:39:18 2025
Version 19.28.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.

connected to target database: ORA19RF (DBID=1289426103, not open)

RMAN> catalog start with '/home/oracle/backup_for_nologging_test/ARCHIVE_ORA19RF_20251030_1i47ifr4_s50_p1';
catalog start with '/home/oracle/backup_for_nologging_test/ARCHIVE_ORA19RF_20251030_1i47ifr4_s50_p1';
using target database control file instead of recovery catalog
searching for all files that match the pattern /home/oracle/backup_for_nologging_test/ARCHIVE_ORA19RF_20251030_1i47ifr4_s50_p1

List of Files Unknown to the Database
=====================================
File Name: /home/oracle/backup_for_nologging_test/ARCHIVE_ORA19RF_20251030_1i47ifr4_s50_p1

Do you really want to catalog the above files (enter YES or NO)? YES
cataloging files...
cataloging done

List of Cataloged Files
=======================
File Name: /home/oracle/backup_for_nologging_test/ARCHIVE_ORA19RF_20251030_1i47ifr4_s50_p1


RMAN> catalog start with '/home/oracle/backup_for_nologging_test/ARCHIVE_ORA19RF_20251030_1j47ifr5_s51_p1';
catalog start with '/home/oracle/backup_for_nologging_test/ARCHIVE_ORA19RF_20251030_1j47ifr5_s51_p1';
searching for all files that match the pattern /home/oracle/backup_for_nologging_test/ARCHIVE_ORA19RF_20251030_1j47ifr5_s51_p1

List of Files Unknown to the Database
=====================================
File Name: /home/oracle/backup_for_nologging_test/ARCHIVE_ORA19RF_20251030_1j47ifr5_s51_p1

Do you really want to catalog the above files (enter YES or NO)? YES
cataloging files...
cataloging done

List of Cataloged Files
=======================
File Name: /home/oracle/backup_for_nologging_test/ARCHIVE_ORA19RF_20251030_1j47ifr5_s51_p1

 

--복구 목표 SCN 6066811 까지 복구
RUN {
 SET UNTIL SCN 6066811;
 RECOVER DATABASE;
}

RMAN> alter database open resetlogs;

 

6. 테스트 테이블 조회 (타켓 DB)

 

ORA-1578 / ORA-26040 Corrupt blocks by NOLOGGING - Error explanation and solution (문서 ID 794505.1) 문서 참고할 것

----------------------------------------------문서 내용 시작-----------------------------------------

Doc ID 794505.1 ORA-1578 / ORA-26040 Corrupt blocks by NOLOGGING - Error explanation and solution

 

이론 요약
NOLOGGING 또는 UNRECOVERABLE 작업(또는 impdp DISABLE_ARCHIVE_LOGGING=Y)으로 만들어진 블록은 복구 시 무효화되어 이후 읽을 때 ORA-1578과 ORA-26040이 발생한다.
이런 블록의 데이터는 복구 불가능하며, NOLOGGING 작업 이후의 백업이 있을 때만 정상 데이터로 복원할 수 있다.

RMAN DUPLICATE나 RESTORE 이후 오류 발생 시
원본 DB에서 FORCE LOGGING 설정
ALTER DATABASE FORCE LOGGING;
새로운 백업을 다시 수행한 후 DUPLICATE 또는 RESTORE를 다시 진행한다.

물리적 스탠바이 환경에서 오류가 발생한 경우
Primary DB에 문제가 없다면 해당 파일을 Primary에서 복원하여 교체한다.
Doc ID 958181.1 절차(RMAN Incremental Backup으로 NOLOGGING 수정) 사용 가능하다.
12c 이상에서는 RMAN 명령으로 복구 가능하다.

RECOVER DATABASE NONLOGGED BLOCK;
재발 방지를 위해 Primary DB에서 FORCE LOGGING을 설정한다.
Primary와 Standby 간 NOLOGGING 블록 위치가 다를 경우 event 10231 또는 DBMS_REPAIR로 스킵 설정 후 파일 교체가 필요하다.

영향받은 세그먼트나 객체 식별
RMAN VALIDATE 명령으로 탐지 가능하다.
12c 이상은 V$NONLOGGED_BLOCK 뷰를 확인하고
10g~11g는 V$DATABASE_BLOCK_CORRUPTION 뷰에서 CORRUPTION_TYPE=NOLOGGING을 확인한다.
DBVERIFY(DBV) 도구로도 확인 가능하다.

세그먼트 유형별 조치

FREE 블록의 경우
DBA_FREE_SPACE에 속한 FREE 블록이라면 재사용 시 자동으로 재포맷되어 복구된다.
필요 시 Doc ID 336133.1의 재포맷 절차를 참조한다.

인덱스의 경우
인덱스를 드롭 후 재생성한다.

테이블의 경우
DBMS_REPAIR로 손상 블록을 스킵하도록 설정한다.
BEGIN
DBMS_REPAIR.SKIP_CORRUPT_BLOCKS(
SCHEMA_NAME => '<스키마>',
OBJECT_NAME => '<테이블>',
OBJECT_TYPE => DBMS_REPAIR.TABLE_OBJECT,
FLAGS => DBMS_REPAIR.SKIP_FLAG);
END;
/
설정이 적용되었는지 확인한다.

SELECT SKIP_CORRUPT FROM DBA_TABLES WHERE OWNER='<스키마>' AND TABLE_NAME='<테이블>';
테이블을 이동하거나 재생성한다.
ALTER TABLE <테이블> MOVE;
또는 export/import, CTAS로 새 테이블을 생성한 후 원본 테이블을 삭제한다.

LOB의 경우
Doc ID 293515.1 절차를 적용한다.

세그먼트를 드롭하면 블록은 FREE로 표시되고 이후 재사용 시 자동 재포맷된다.
RMAN VALIDATE를 실행해 V$DATABASE_BLOCK_CORRUPTION 또는 V$NONLOGGED_BLOCK의 잔여 표시를 제거한다.

모니터링 및 사전 탐지
RMAN REPORT UNRECOVERABLE 명령으로 NOLOGGING 이후 백업되지 않은 파일을 확인한다.
RMAN VALIDATE DATABASE NONLOGGED BLOCK 명령으로 비로그 블록을 검증한다.
V$DATAFILE의 관련 컬럼은 다음과 같다.
UNRECOVERABLE_CHANGE#
UNRECOVERABLE_TIME
FIRST_NONLOGGED_SCN
FIRST_NONLOGGED_TIME
스탠바이 환경에서는 event 16490 level 1을 설정하면 MRP가 alert log에 invalidated block 메시지를 남긴다.

NOLOGGING 블록 생성 시점 확인
Trace 파일의 블록 SCN 또는 V$DATABASE_BLOCK_CORRUPTION.CORRUPTION_CHANGE# 값을 사용한다.
12c 이상은 V$NONLOGGED_BLOCK.NONLOGGED_START_CHANGE# 값을 사용한다.
SELECT SCN_TO_TIMESTAMP(:SCN) FROM DUAL;
GV$ARCHIVED_LOG나 GV$LOG_HISTORY로 SCN 구간을 매핑하여 시점을 확인한다.

특수 케이스
11.1.0.6부터 11.2.0.1 버전까지 NOARCHIVELOG + Direct Path 작업 시 FORCE LOGGING이어도 AWR 또는 EM(SYSAUX)에서 ORA-1578과 ORA-26040이 발생할 수 있다.
Doc ID 1071869.1을 참조한다.
11.2.0.2 이상에서는 이 문제가 해결되었다.
Exadata 환경에서는 ORA-26040 대신 ORA-27616이 발생할 수 있다.
암호화된 블록에서는 ORA-28304와 ORA-26040이 함께 보고될 수 있다.

점검 및 조치 순서 요약
NOLOGGING 이후 백업이 있는지 확인한다.
스탠바이 여부를 확인하고 Primary와 비교한다.
RMAN VALIDATE 또는 DBV로 손상 블록을 확인한다.
세그먼트 종류에 맞는 복구 절차를 수행한다.
RMAN VALIDATE로 상태를 정리한다.
Primary에 FORCE LOGGING을 설정한다.
REPORT UNRECOVERABLE로 사전 모니터링을 수행한다.

출처 Oracle Support Doc ID 794505.1

----------------------------------------------문서 내용 종료-----------------------------------------

 

select * from tuner.TB_NOLOGGING_TEST_01;

...생략
999 rows selected
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of sql statement command at 10/30/2025 23:42:53
ORA-01578: ORACLE data block corrupted (file # 2, block # 178178)
ORA-01110: data file 2: '/home/oracle/backup_for_nologging_test/ORA19RF/datafile/tuner_data1.272.1213465041'
ORA-26040: Data block was loaded using the NOLOGGING option

RMAN Client Diagnostic Trace file : /u01/app/oracle/diag/clients/user_oracle/RMAN_2520668267_110/trace/ora_rman_681_0.trc


BEGIN
  DBMS_REPAIR.SKIP_CORRUPT_BLOCKS(
      SCHEMA_NAME => 'TUNER'                
    , OBJECT_NAME => 'TB_NOLOGGING_TEST_01' 
    , OBJECT_TYPE => DBMS_REPAIR.TABLE_OBJECT
    , FLAGS       => DBMS_REPAIR.SKIP_FLAG
  );
END;
/

 

select * from tuner.TB_NOLOGGING_TEST_01;

1000 rows selected.

Elapsed: 00:00:02.46

 

select * from tuner.TB_NOLOGGING_TEST_02;

...생략
1000 rows selected
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of sql statement command at 10/30/2025 23:43:21
ORA-01578: ORACLE data block corrupted (file # 2, block # 175209)
ORA-01110: data file 2: '/home/oracle/backup_for_nologging_test/ORA19RF/datafile/tuner_data1.272.1213465041'
ORA-26040: Data block was loaded using the NOLOGGING option

 

BEGIN
  DBMS_REPAIR.SKIP_CORRUPT_BLOCKS(
      SCHEMA_NAME => 'TUNER'                
    , OBJECT_NAME => 'TB_NOLOGGING_TEST_02' 
    , OBJECT_TYPE => DBMS_REPAIR.TABLE_OBJECT
    , FLAGS       => DBMS_REPAIR.SKIP_FLAG
  );
END;
/

 

select * from tuner.TB_NOLOGGING_TEST_02;

1000 rows selected.

Elapsed: 00:00:01.25


--DBMS_REPAIR.SKIP_CORRUPT_BLOCKS 를 사용하면 해당 테이블 조회 시 에러 메시지는 사라짐
--하지만 결국 데이터는 유실된 상태임
--소스 DB에서 데이터를 DB Link로 가져오거나, datapump로 exporing해서 import 시켜야함


99. 작업 후 정리

 

99-1. 타켓 DB 정리

 

[ORA19RS1:oracle@ol8ora19rs1][/home/oracle]$ ps -ef | grep -i pmon | grep -i ora19rf
oracle    1868     1  0 Oct30 ?        00:00:09 ora_pmon_ORA19RF1

[ORA19RS1:oracle@ol8ora19rs1][/home/oracle]$ export ORACLE_SID=ORA19RF1
[ORA19RF1:oracle@ol8ora19rs1][/home/oracle]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'

[ORA19RF1:oracle@ol8ora19rs1][/home/oracle]$ ss

SQL*Plus: Release 19.0.0.0.0 - Production on Sat Nov 1 16:04:31 2025
Version 19.28.0.0.0

Copyright (c) 1982, 2025, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.28.0.0.0

[ol8ora19rs1]<SYS@ORA19RF1>$ shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
[ol8ora19rs1]<
SYS@ORA19RF1>$ quit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.28.0.0.0

[ORA19RF1:oracle@ol8ora19rs1][/home/oracle]$ ps -ef | grep -i pmon | grep -i ora19rf
[ORA19RF1:oracle@ol8ora19rs1][/home/oracle]$ rm -rf /home/oracle/backup_for_nologging_test
[ORA19RF1:oracle@ol8ora19rs1][/u01/app/oracle/admin]$ rm -rf /u01/app/oracle/admin/ORA19RF
[ORA19RF1:oracle@ol8ora19rs1][/u01/app/oracle/audit]$ rm -rf /u01/app/oracle/audit/ORA19RF1
[ORA19RF1:oracle@ol8ora19rs1][/home/oracle]$ rm -rf /u01/app/oracle/diag/rdbms/ora19rf

 

99-2. 소스 DB 정리

 

[ORA19RF1:oracle@ol8ora19rf1][/home/oracle/backup_for_nologging_test]$ rm -rf /home/oracle/backup_for_nologging_test

[ORA19RF1:oracle@ol8ora19rf1][/home/oracle]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'

[ORA19RF1:oracle@ol8ora19rf1][/home/oracle]$ ss

SQL*Plus: Release 19.0.0.0.0 - Production on Sat Nov 1 16:14:09 2025
Version 19.28.0.0.0

Copyright (c) 1982, 2025, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.28.0.0.0

[ol8ora19rf1]<SYS@ORA19RF1>$

drop table TUNER.TB_NOLOGGING_TEST_01 purge;
drop table TUNER.TB_NOLOGGING_TEST_02 purge;

 

반응형

+ Recent posts