[TIBERO] 백업&복구 시나리오(Controlfile, redo 유실,Acrhive 일부)

반응형

1. Redolog

0 ONLINE /DBMS/TIBERO/tbdata/redo001.redo
1 ONLINE /DBMS/TIBERO/tbdata/redo011.redo
2 ONLINE /DBMS/TIBERO/tbdata/redo021.redo


2. 백업 전 TSN값

 select CURRENT_TSN as Controlfile_TSN   from v$database
 /
select distinct(CKPT_TSN) as Datafile_TSN from v$datafile
/
CONTROLFILE_TSN
---------------
       98834368

DATAFILE_TSN
------------
    98834332



3. Table 생성 데이터 삽입

-- 1. 테이블 생성
CREATE TABLE tibero.test_backup (
    id         NUMBER PRIMARY KEY,
    name       VARCHAR2(100),
    created_at DATE
)tablespace TS_TEST;

-- 2. 데이터 삽입 
BEGIN
   FOR i IN 1 .. 100 LOOP
      INSERT INTO tibero.test_backup (
         id, name, created_at
      ) VALUES (
         i,
         'User_' || TO_CHAR(i),
         SYSDATE - MOD(i, 365)
      );
   END LOOP;
   COMMIT;
END;

select count(*) from TIBERO.TEST_BACKUP;
100 개

 

3. begin backup + 데이터 insert

alter database begin backup;

CONTROLFILE_TSN
---------------
    98834489

DATAFILE_TSN
------------
    98834454    -> 이때가 row100개 까지 있을때 찍힌 TSN

data 200개 insert 후 commit
-> redo log기록됨
-> data buffer에 기록되있음

alter system switch logfile;
alter system switch logfile;
alter system switch logfile;
->  redo logfile -> Archive로 떨군다

-rw-------. 1 tibero dba    512  5월  8 13:28 log-t0-r98827215-s10.arc
-rw-------. 1 tibero dba    512  5월  8 13:28 log-t0-r98827215-s11.arc
-rw-------. 1 tibero dba 882688  5월  8 13:28 log-t0-r98827215-s9.arc
3개 생성됨

ALTER SYSTEM CHECKPOINT;
-> 데이터 파일에 기록

System altered.

select CURRENT_TSN as Controlfile_TSN   from v$database
  /
select distinct(CKPT_TSN) as Datafile_TSN from v$datafile

CONTROLFILE_TSN
---------------
       98835463

1 row selected.


DATAFILE_TSN
------------
    98834454 -> begin이 찍혀있어서 datafile TSN값은 변하지 않지만, Datafile에 데이터는 계쏙 쓰여지고 있는거임

-rw-------.  1 tibero dba 807424  5월  8 14:07 log-t0-r98827215-s12.arc
-rw-------.  1 tibero dba    512  5월  8 14:07 log-t0-r98827215-s13.arc
-rw-------.  1 tibero dba    512  5월  8 14:07 log-t0-r98827215-s14.arc

12, 13 ,14 여기에 checkpoint.한 시점까지의 Archive 있음

98834454 은 log-t0-r98827215-s9.arc ~ log-t0-r98827215-s10.arc 사이의 TSN 이다 .





4. 추가로 데이터 100개 insert + endbackup

데이터 파일 Copy
cp -R tbdata tbdata_bak

data 100개 insert
지금까지 400개임

alter database end backup;

alter system switch logfile;
alter system switch logfile;
alter system switch logfile;

-rw-------.  1 tibero dba    512  5월  8 13:28 log-t0-r98827215-s10.arc
-rw-------.  1 tibero dba    512  5월  8 13:28 log-t0-r98827215-s11.arc
-rw-------.  1 tibero dba 807424  5월  8 14:07 log-t0-r98827215-s12.arc
-rw-------.  1 tibero dba    512  5월  8 14:07 log-t0-r98827215-s13.arc
-rw-------.  1 tibero dba    512  5월  8 14:07 log-t0-r98827215-s14.arc
-rw-------.  1 tibero dba  60416  5월  8 14:11 log-t0-r98827215-s15.arc
-rw-------.  1 tibero dba    512  5월  8 14:11 log-t0-r98827215-s16.arc
-rw-------.  1 tibero dba    512  5월  8 14:11 log-t0-r98827215-s17.arc

data 100개 insert
500개임


 

5. controfile 파일 백업 

ALTER DATABASE BACKUP CONTROLFILE TO TRACE AS '/DBMS/TIBERO/tbcontrol_file/con_bak.sql' REUSE NORESETLOGS;

 


※장애발생 controlfile, redolog 파일 유실, Archive 일부 유실


 

1. copy 했던 datafile 로 복구 

mv tbdata tbdata_temp
mv tbdata_bak tbdata


2. tbboot nomount

nomount 기동후 controlfile 재생성

CREATE CONTROLFILE REUSE DATABASE "IDC42"
LOGFILE
 GROUP 1 '/DBMS/TIBERO/tbdata/redo001.redo' SIZE 50M,
 GROUP 2 '/DBMS/TIBERO/tbdata/redo011.redo' SIZE 50M,
 GROUP 3 '/DBMS/TIBERO/tbdata/redo021.redo' SIZE 50M
RESETLOGS
~~~~
;

Tibero는 Controlfile 재생성 시, 자동으로 mount 단계로 넘어감

 

3. 다 유실 했다는 가정하에, Datafile만 가지고 recover,

 

4. recover

alter database open resetlogs;

********************************************************
* Critical Warning : Raise svmode failed. The reason is 
*   TBR-1024 :  Database needs media recovery: improperly closed(/DBMS/TIBERO/tbdata/system001.dtf).   
*   Current server mode is MOUNT.
********************************************************

TBR-1024: Database needs media recovery: improperly closed(/DBMS/TIBERO/tbdata/system001.dtf). 

바로 resetlogs로 안올라감

alter database recover automatic;

SQL> alter database recover automatic;
TBR-1027: Unable to find archive log file for thread 0 from change 98834454.  
log-t0-r98827215-s9.arc ~ log-t0-r98827215-s10.arc 사이의 TSN

위 2개의 Archive log만 가져와서 복구 시도


[2025-05-08T14:32:18.406051] [DDL-46] [I] Executing DDL: alter database recover automatic
[2025-05-08T14:32:18.406162] [RVP-12] [I] RV master received MEDIA_RECOVERY request
[2025-05-08T14:32:18.406219] [CLC-21] [I] RV slave 1 received MEDIA_RECOVERY job
[2025-05-08T14:32:18.406802] [CLR-21] [I] DF #0 (ts 0) resetlogs tsn=98827215, CF resetlogs tsn=98827215
[2025-05-08T14:32:18.406814] [RV-21] [I] DF #0(0) CKPT 2025-05-08 13:23:24,0000.05e41816(2737,2738) CF[CKPT 2025-05-08 13:23:24,0000.05e41816(2738), STOP 2025-05-08 14:18:22,ffff.ffffffff] FUZZY(online=1,backup=1,mr=0) rf(0000.00000000) 3
[2025-05-08T14:32:18.407152] [CLR-21] [I] DF #1 (ts 1) resetlogs tsn=98827215, CF resetlogs tsn=98827215
[2025-05-08T14:32:18.407164] [RV-21] [I] DF #1(1) CKPT 2025-05-08 13:23:24,0000.05e41816(2737,2738) CF[CKPT 2025-05-08 13:23:24,0000.05e41816(2738), STOP 2025-05-08 14:18:22,ffff.ffffffff] FUZZY(online=1,backup=1,mr=0) rf(0000.00000000) 3
[2025-05-08T14:32:18.407486] [CLR-21] [I] DF #2 (ts 3) resetlogs tsn=98827215, CF resetlogs tsn=98827215
[2025-05-08T14:32:18.407494] [RV-21] [I] DF #2(3) CKPT 2025-05-08 13:23:24,0000.05e41816(2737,2738) CF[CKPT 2025-05-08 13:23:24,0000.05e41816(2738), STOP 2025-05-08 14:18:22,ffff.ffffffff] FUZZY(online=1,backup=1,mr=0) rf(0000.00000000) 3
[2025-05-08T14:32:18.407796] [CLR-21] [I] DF #3 (ts 4) resetlogs tsn=98827215, CF resetlogs tsn=98827215
[2025-05-08T14:32:18.407804] [RV-21] [I] DF #3(4) CKPT 2025-05-08 13:23:24,0000.05e41816(2696,2697) CF[CKPT 2025-05-08 13:23:24,0000.05e41816(2697), STOP 2025-05-08 14:18:22,ffff.ffffffff] FUZZY(online=1,backup=1,mr=0) rf(0000.00000000) 3
[2025-05-08T14:32:18.408113] [CLR-21] [I] DF #4 (ts 5) resetlogs tsn=98827215, CF resetlogs tsn=98827215
[2025-05-08T14:32:18.408123] [RV-21] [I] DF #4(5) CKPT 2025-05-08 13:23:24,0000.05e41816(2546,2547) CF[CKPT 2025-05-08 13:23:24,0000.05e41816(2547), STOP 2025-05-08 14:18:22,ffff.ffffffff] FUZZY(online=1,backup=1,mr=0) rf(0000.00000000) 3
[2025-05-08T14:32:18.408429] [CLR-21] [I] DF #5 (ts 12) resetlogs tsn=98827215, CF resetlogs tsn=98827215
[2025-05-08T14:32:18.408437] [RV-21] [I] DF #5(12) CKPT 2025-05-08 13:23:24,0000.05e41816(1080,1081) CF[CKPT 2025-05-08 13:23:24,0000.05e41816(1081), STOP 2025-05-08 14:18:22,ffff.ffffffff] FUZZY(online=1,backup=1,mr=0) rf(0000.00000000) 3
[2025-05-08T14:32:18.408725] [CLR-21] [I] DF #6 (ts 13) resetlogs tsn=98827215, CF resetlogs tsn=98827215
[2025-05-08T14:32:18.408733] [RV-21] [I] DF #6(13) CKPT 2025-05-08 13:23:24,0000.05e41816(1073,1074) CF[CKPT 2025-05-08 13:23:24,0000.05e41816(1074), STOP 2025-05-08 14:18:22,ffff.ffffffff] FUZZY(online=1,backup=1,mr=0) rf(0000.00000000) 3
[2025-05-08T14:32:18.409018] [CLR-21] [I] DF #7 (ts 14) resetlogs tsn=98827215, CF resetlogs tsn=98827215
[2025-05-08T14:32:18.409025] [RV-21] [I] DF #7(14) CKPT 2025-05-08 13:23:24,0000.05e41816(1071,1072) CF[CKPT 2025-05-08 13:23:24,0000.05e41816(1072), STOP 2025-05-08 14:18:22,ffff.ffffffff] FUZZY(online=1,backup=1,mr=0) rf(0000.00000000) 3
[2025-05-08T14:32:18.423067] [CLC-21] [I] MRSET (2097152 buckets) initialized
[2025-05-08T14:32:18.453993] [CLC-21] [I] MR set next logfile (THREAD#0, seq 9) - /DBMS/TIBERO/tbarch/log-t0-r98827215-s9.arc
[2025-05-08T14:32:18.455030] [RCF-21] [I] DATAFILES OPEN: for recovery (stop 0000.05e418a4)
[2025-05-08T14:32:18.465892] [CLR-21] [I] invalid logfile(/DBMS/TIBERO/tbarch/log-t0-r98827215-s9.arc, seq#9): too old
[2025-05-08T14:32:18.465916] [CLC-21] [I] MR set next logfile (THREAD#0, seq 10) - /DBMS/TIBERO/tbarch/log-t0-r98827215-s10.arc
[2025-05-08T14:32:18.466611] [RCF-21] [I] DATAFILES OPEN: for recovery (stop 0000.05e418a6)
[2025-05-08T14:32:18.471660] [CLR-21] [I] invalid logfile(/DBMS/TIBERO/tbarch/log-t0-r98827215-s10.arc, seq#10): too old
[2025-05-08T14:32:18.589675] [CLR-21] [I] Searching online logfile dest current lfid = 65535, seqno= 4294967295
[2025-05-08T14:32:18.590334] [CLL-21] [I] size error: file_size=0, block_size=512 (/DBMS/TIBERO/tbdata/redo001.redo)
[2025-05-08T14:32:18.590348] [RLS-21] [I] Failed to read 1 log blocks LF#1(member=0, blkno=0)
[2025-05-08T14:32:18.590379] [FRM-21] [I] THROW. ec=ERROR_CACHE_LOG_READ_FAILED(-1007) [ Unable to read log file in group 1, block 0.   ] (csr_id:4294967295) [rv_lscan.c:435:lscan_read_blks_]
[2025-05-08T14:32:18.590394] [CLL-21] [I] logfile 1 is invalid online log file
[2025-05-08T14:32:18.591993] [RCF-21] [I] DATAFILES OPEN: for recovery (stop 0000.05e418a6)
[2025-05-08T14:32:18.599647] [RV-21] [I] MMR start 29 blks (size 17129692(17390128)/442285380)
[2025-05-08T14:32:18.606415] [CLC-21] [I] MMR 29 blks DONE
[2025-05-08T14:32:18.607007] [RCF-21] [I] REDO THREAD #0 CKPT updated to 0.0/0000.05e418a6 (prev 0.0/0000.05e41816)
[2025-05-08T14:32:18.607023] [RCF-21] [I] DB CKPT updated: 0000.05e41816 => 0000.05e418a6 (open count=0)
[2025-05-08T14:32:18.615308] [COM-21] [I] Internal Error with condition 'cf_ckpt_tsn == df_ckpt_tsn' (2 args) (cf_df.c:2891:cf_mrfinish_df) (pid=15109, sessid=21, tid=21)
[2025-05-08T14:32:24.902001] [COM-21] [I] Internal Error with condition '(dfhdrblk->status & (DFHDR_FUZZY_BACKUP | DFHDR_FUZZY_ONLINE | DFHDR_FUZZY_MR)) == 0' (1 args) (cf_df.c:2896:cf_mrfinish_df) (pid=15109, sessid=21, tid=21)


internal 에러 맞고 DB 죽음

 

5. Archive로그를 하나씩 부어가면서 어디까지 넣어야 복구가 되는지 확인

log-t0-r98827215-s11.arc -> 실패
log-t0-r98827215-s12.arc -> 실패
log-t0-r98827215-s13.arc -> 실패
log-t0-r98827215-s14.arc -> 실패
log-t0-r98827215-s15.arc 

SQL> alter database recover automatic;
TBR-1072: Current online log file (thread 0 seq -1) is outdated.
Need a log with seq 16 to recover from TSN 98835598.
Recovery done until 2025/05/08 14:11:22 TSN 98835597.
Recovery is incomplete and resetlogs is required.   

16을 요구함 

로그확인
[2025-05-08T14:40:05.688249] [CLC-32] [I] MR set next logfile (THREAD#0, seq 15) - /DBMS/TIBERO/tbarch/log-t0-r98827215-s15.arc
[2025-05-08T14:40:05.688904] [RCF-32] [I] DATAFILES OPEN: for recovery (stop 0000.05e41c8e)
[2025-05-08T14:40:05.694574] [CLR-32] [I] invalid logfile(/DBMS/TIBERO/tbarch/log-t0-r98827215-s15.arc, seq#15): too old
[2025-05-08T14:40:05.828775] [CLR-32] [I] Searching online logfile dest current lfid = 65535, seqno= 4294967295
[2025-05-08T14:40:05.829425] [CLL-32] [I] size error: file_size=0, block_size=512 (/DBMS/TIBERO/tbdata/redo001.redo)
[2025-05-08T14:40:05.829444] [RLS-32] [I] Failed to read 1 log blocks LF#1(member=0, blkno=0)
[2025-05-08T14:40:05.829467] [FRM-32] [I] THROW. ec=ERROR_CACHE_LOG_READ_FAILED(-1007) [ Unable to read log file in group 1, block 0.   ] (csr_id:4294967295) [rv_lscan.c:435:lscan_read_blks_]
[2025-05-08T14:40:05.829488] [CLL-32] [I] logfile 1 is invalid online log file
[2025-05-08T14:40:05.830793] [RCF-32] [I] DATAFILES OPEN: for recovery (stop 0000.05e41c8e)
[2025-05-08T14:40:05.838216] [RV-32] [I] MMR start 115 blks (size 17936062(18278392)/436203180)
[2025-05-08T14:40:05.872390] [CLC-32] [I] MMR 115 blks DONE
[2025-05-08T14:40:05.972800] [RCF-32] [I] REDO THREAD #0 CKPT updated to 0.0/0000.05e41c8e (prev 0.0/0000.05e41c2d)
[2025-05-08T14:40:05.972843] [RCF-32] [I] DB CKPT updated: 0000.05e41c2d => 0000.05e41c8e (open count=0)
[2025-05-08T14:40:05.990092] [RV-32] [I] current online log file is outdated. seqno=-1, need seqno=16
[2025-05-08T14:40:05.990168] [FRM-32] [I] THROW. ec=ERROR_CACHE_MR_NO_MORE_LOGS_RESETLOGS(-1072) [ Current online log file (thread 0 seq -1) is outdated.
Need a log with seq 16 to recover from TSN 98835598.
Recovery done until 2025/05/08 14:11:22 TSN 98835597.
Recovery is incomplete and resetlogs is required.   ] (csr_id:4294967295) [rv_mr.c:2605:rv_mr_get_logfile_needed]
[2025-05-08T14:40:06.023821] [RVP-13] [I] RV master received SLAVE 1(32) DONE
[2025-05-08T14:40:06.023961] [DDL-57] [I] DDL execution failed (ec = -1072): alter database recover automatic



유실했다고 가정하고 resetlogs로 open
alter database open resetlogs;

Database altered.

 

6. Data 갯수 확인

-> 400개 까지 있음

 

📦 예를 들어 TSN= 100 이라면 Begin  backup 이후에 checkpoint발생해서 TSN이 101이 됬다면, 101까지의 Archive log만 있다면, 101 시점까지 복구 될줄 알았는데, 안되는거 같다.

 

결론 : Tibero는 Endbackup 찍고 떨어진 Archive log까지가 있어야 한다. 



 

 

 

 

 

 

 

 

 

 

 

 

반응형