DB 백업 및 복구

티베로 Database 백업과 복구의 기본 개념에 대해서 설명합니다.

문서 다운로드

기본 개념

다음은 백업과 복구의 개념에 대한 설명입니다.

  • 백업(Backup) 백업은 여러 가지 유형의 장애로부터 데이터베이스를 보호하기 위한 과정으로 MTBF(Mean Time Between Failure)를 증가시키고, MTTR(Mean Time To Recover)를 감소시킵니다. 관리자는 시스템에 장애가 발행하는 경우 손실을 최소화하고 복구 가능한 상태로 데이터베이스를 운용해야 한다. 따라서, 최소한 한달에 한 번 데이터베이스 전체 백업을 하거나 하루에 한번씩 Export 백업을 권장합니다. 데이터베이스 관리자는 백업에 대한 정책을 수립하고 꼭 필요한 데이터를 최소한의 양으로 백업해야 합니다. 또한 백업이 정상적으로 수행되었는지 주기적으로 검증하는 것을 권장합니다.

  • 복구(Recovery) 복구는 시스템에 장애가 발생하는 경우 복원 또는 시스템 작동을 유지하기 위한 절차 또는 기법입니다.

주요 용어

TSN

TSN은 데이터베이스의 버전 또는 Commit 버전으로 Data Concurrency Control, Redo Ordering, 복구 등에 사용되며 트랜잭션이 commit될 때 generate됩니다.

Checkpoint

Checkpoint는 주기적으로 사용자의 요청에 따라 메모리에 있는 모든 변경된(dirty) 블록을 디스크에 쓰는 작업을 말하며 복구에 필요한 Log 파일의 양을 줄여줍니다.

모든 Log Switch가 발생할 때 인스턴스가 NORMAL, POST_TX, IMMEDIATE 옵션으로 종료되면 사용자 요청에 따라 Checkpoint가 수동으로 발생(alter system checkpoint)하며, DBWR가 작동하기 전에 LGWR이 현재 Log 버퍼의 내용을 Online Log 파일에 Write하고 해당 dirty 버퍼에 mark 되면 이 정보를 DBWR이 받아서 모든 marked dirty 버 퍼를 디스크에 기록합니다.

Checkpoint는 Checkpoint TSN 이전에 발생한 Online Log 파일 내의 모든 변경 사항이 디스크에 저장 되음을 의 미합니다.

Log 모드

다음은 Log 모드에 대한 설명입니다.

  • NO ARCHIVE LOG - 기본적인 Log 모드로 Redo Log 파일은 순환하여 사용되고 Log Switch가 발생하면 이전의 Log 파일을 Overwrite합니다. 이전의 Log가 없기 때문에 트랜잭션 기록 중 최근의 부분만 사용할 수 있습니다. - Redo Log가 Overwrite되면 결국 마지막 전체 백업(offline 백업)을 통한 복구만 가능합니다. - 백업은 반드시 데이터베이스가 정상 종료된 상태에서 해야 하며 이로 인해 서비스의 중지가 발생합니다.

  • ARCHIVE LOG - 이 Log 모드에서 Redo Log 파일은 LOGA(Log Archiver)에 의해 백업이 완료되기 전에는 사용할 수 없고, Archive Log 파일은 미디어 복구(Media Recovery)에 사용될 수 있습니다. - 데이터베이스 기동 중에 백업을 할 수 있습니다.

백업

본 장에서는 백업의 종류와 각 종류별 백업 방법에 대해 설명합니다.

개요

  • 논리적인 백업 데이터베이스의 논리적인 단위의 백업으로 Export 툴로 백업합니다. 예를 들어 Table, Index, Constraint, Sequence 등이 있습니다.

  • 물리적인 백업 데이터베이스를 구성하는 파일을 운영체제 레벨에서 copy 명령으로 백업합니다. 예를 들어 데이터 파일, 컨트롤 파 일, Archive Log 파일 등이 있습니다.

백업은 NO ARCHIVE LOG 모드와0 ARCHIVE LOG 모드의 처리 방법이 다릅니다.

  • NO ARCHIVE LOG 모드(Offline 백업 / Cold 백업) 데이터베이스를 구성하는 전체 파일에 대해 운영을 멈춘 상태에서 백업을 하는 것으로 데이터베이스를 백업 받은 시점으로의 복구만 가능합니다.

  • ARCHIVE LOG 모드(Online 백업 / Hot 백업) 데이터베이스 운영 중에도 백업이 가능하고 컨트롤 파일 생성문, 데이터 파일, Archive Log 파일을 백업합니다. 백업된 Archive Log 파일의 시점에 따라 데이터 파일 백업 시점 이전으로 복구도 가능합니다.

각 모드별로 Consistent와 Inconsistent 백업을 할 수 있습니다.

구분

설명

Consistent 백업

정상적인 Shutdown 후의 백업이다.

Inconsistent 백업

정상 종료되지 않은 상태에서의 백업 또는 DB 운영 중의 백업이다. (NO ARCHIVE LOG 모드에서는 사용을 권장하지 않음)

백업 방법

컨트롤 파일 백업

컨트롤 파일은 데이터베이스의 구조를 이진 파일 형태로 저장하며 데이터베이스를 mount할 때 반드시 필요합니다. 만약 해당 파일이 없으면 복구하거나 재생성해야 하므로 데이터베이스를 구성할 때 컨트롤 파일을 2개 이상으로 구 성하고 각 파일은 서로 다른 디스크에 위치시킬 것을 권고합니다.

다음의 동적 뷰로 컨트롤 파일의 위치 정보와 다중화 여부를 확인합니다.

v$controlfile

백업 방법

다음은 컨트롤 파일을 백업하는 과정에 대한 설명입니다.

  • 컨트롤 파일 다중화

    1. tbdown 명령어를 사용해서 데이터베이스를 down합니다.

    2. 컨트롤 파일을 다른 위치로 복사합니다.

    3. $TB_SID.tip 파일에서 CONTROL_FILES 파라미터를 추가합니다.

    4. tbboot 명령어로 데이터베이스를 기동시킵니다.

  • 컨트롤 파일 Trace 생성 O/S의 copy 명령을 통해 별도의 위치에 복사하고 아래 문법을 사용하여 Trace를 생성합니다.

SQL> ALTER DATABASE BACKUP CONTROLFILE TO TRACE AS '<FILENAME>' REUSE NORESETLOGS;

항목

설명

FILENAME

생성할 Trace 파일 이름을 지정한다. (경로를 미지정 하는 경우 $TB_SID.tip 파일의

DB_CREATE_FILE_DEST 파라미터에 정의된 디렉터리에 생성됨)

REUSE

컨트롤 파일의 생성 문장을 백업할 때 이미 존재하는 파일을 재사용하려면 REUSE 옵션을 사용한다.

RESETLOGS

기존의 Log 파일은 무시하고 Log를 초기화한다.

NORESETLOGS

기존의 유효한 Log 파일을 계속 사용한다.

참고 컨트롤 파일을 백업 할 때 컨트롤 파일 다중화가 필수 사항은 아니지만 컨트롤 파일 Trace 생성 전에 진행하는 것을 권장합니다.

Online 백업

Online 백업은 Tibero를 운영하는 중에 백업하는 것으로 ALTER DATABASE 명령으로 Tablespace의 데이터 파일 을 백업하며 ARCHIVE LOG 모드에서만 사용 가능합니다.

백업 방법

다음은 Online 백업하는 과정에 대한 설명입니다.

  1. 데이터베이스에 Online 백업의 시작을 알립니다.

SQL> ALTER TABLESPACE SYSTEM BEGIN BACKUP;
  1. 동적 뷰(v$backup)로 아래와 같이 현재의 백업 모드를 확인합니다.

SQL> select * from v$backup;
    FILE#     STATUS	     CHANGE# TIME
---------     ---------      ------------
       0      ACTIVE	     21091
       1      NOT ACTIVE     0
       2      NOT ACTIVE     0
       3      NOT ACTIVE     0
  1. O/S 명령으로 해당 Tablespace의 데이터 파일을 복사합니다.

SQL> !cp /home/tibero/tbdata/system001.dtf /home/tibero/tbdata_bak/system001.dtf
  1. Tibero 데이터베이스에 Online 백업 종료를 알립니다.

SQL> ALTER TABLESPACE SYSTEM END BACKUP;

Offline 백업

Offline 백업은 Tibero를 종료한 후 백업하는 방법입니다.

Tibero를 정상 종료한 후 O/S의 copy 명령을 이용해 데이터 파일, Log 파일, 컨트롤 파일, Tip 파일 등을 백업합니다. MOUNT 또는 OPEN 모드에서 v$datafile, v$logfile 뷰를 통해 백업할 파일 정보를 조회할 수 있으며 ARCHIVE LOG 모드에서는 Archive 파일도 백업합니다.

백업 방법

다음은 Offline 백업하는 과정에 대한 설명합니다.

  1. 동적 뷰(v$datafile)로 아래와 같이 백업 대상 파일을 조회합니다.

SQL> select name from v$datafile; 
NAME
--------------------------------------------
/home/tibero/tbdata/system001.dtf
/home/tibero/tbdata/undo001.dtf
/home/tibero/tbdata/usr001.dtf
/home/tibero/tbdata/apm_ts.dtf
  1. 동적 뷰(v$logfile)로 아래와 같이 백업 대상 Log 파일을 조회합니다.

SQL> select group#, member from v$logfile; 
GROUP#  MEMBER
------  ----------------------------------
    0	/home/tibero/tbdata/redo01.redo
    1	/home/tibero/tbdata/redo11.redo
    2	/home/tibero/tbdata/redo21.redo
  1. 동적 뷰(v$controlfile)로 아래와 같이 백업 대상 컨트롤 파일을 조회합니다.

SQL> select name from v$controlfile; 
NAME
-------------------------------------
/home/tibero/tbdata/c1.ctl
/home/tibero/tbdata/c2.ctl
  1. tbdown 명령어로 Tibero를 종료합니다.

tbdown
  1. 조회한 백업 대상 파일을 복사합니다.

$ cp /home/tibero/tbdata/*.dtf /home/tibero/tbdata_bak/
$ cp /home/tibero/tbdata/*.redo /home/tibero/tbdata_bak/
$ cp /home/tibero/tbdata/*.ctl /home/tibero/tbdata_bak/
또는
$ cp /home/tibero/tbdata/*.* /home/tibero/tbdata_bak/

복구(Single)

본 장에서는 복구 작업에 대한 설명과 각 장애 상황별 해결 방법에 대해 설명합니다.

개요

복구는 시스템에 장애가 발생하는 경우 복원 또는 시스템 작동을 유지하기 위한 절차 또는 기법입니다. 다음은 부트 과정별 복구 관련 작업입니다.

  • NOMOUNT : 인스턴스 시작 - 데이터베이스 생성 가능 - 컨트롤 파일 재생성 가능

  • MOUNT : 컨트롤 파일 오픈 - 데이터 파일 이름 변경 가능 - Archive 모드 옵션 활성화 또는 비활성화 가능 - 전체 데이터베이스 복구 작업 가능

  • OPEN : 컨트롤 파일에 정의한 모든 파일 오픈

파손 복구(Crash Recovery)

시스템 이상이나 Shutdown abort 등 비정상적인 데이터베이스 종료 후 Tibero가 기동하는 과정에서 자동으로 수 행되는 복구 작업입니다. Online Redo Log 파일, Online 데이터 파일, Current 컨트롤 파일만을 사용하고, Undo Tablespace를 이용하여 commit되지 않은 데이터에 대해 복구 작업을 진행합니다.

다음은 파손 복구의 특징입니다.

  • 복구 작업이 자동으로 수행되며 데이터베이스 관리자가 데이터 복구를 위한 로그를 적용하는 등의 수작업을 하지 않고 자동으로 처리됩니다.

  • Online Log(Redo Log)를 사용하며 Archive Log는 사용하지 않습니다.

  • Redo의 Roll-forward와 Rollback을 사용합니다.

미디어 복구(Media Recovery)

미디어 복구는 Tibero를 구성하는 파일에 물리적인 손상이 발생하였거나 정상 동작을 할 수 없는 경우 복구하는 과 정입니다.

데이터 파일의 버전이 다른 경우(데이터 파일의 손상으로 백업해 놓은 데이터 파일을 이용하는 경우), 컨트롤 파일 을 복구한 경우, Online Redo Log 파일에 손상이 있는 경우, 사용자의 실수로 데이터가 유실된 경우, Archive Log 파일이 유실된 경우는 미디어 복구를 해야 합니다.

다음은 미디어 복구의 특징입니다.

  • DBA의 명령에 의해 수동으로 수행합니다. (ALTER DATABASE RECOVER ...)

  • 백업 받은 데이터 파일을 이용해서 복구합니다.

  • Redo Log 파일이나 Archive Log 파일로부터 Redo record를 적용합니다.

  • MOUNT 모드에서만 가능합니다.

미디어 복구의 종류는 다음과 같습니다.

구분

설명

완전 복구

Archive Log파일과 Online Log파일을 모두 사용해서 가장 최근 Log까지 모두 반영한다.

불완전 복구

Log 파일 일부만 적용 하거나 특정 시점으로 복구가 가능하다.

  • Point-in-Time 복구

  • Redo record의 일부만 적용

불완전 복구를 하게 되면 반드시 resetlogs로 데이터베이스를 기동해야 한다.

미디어 복구는 다음의 동적 뷰를 사용합니다.

V$RECOVER_FILE 
V$RECOVERY_FILE_STATUS 
V$LOGFILE V$CONTROLFILE 
V$LOG

RESETLOGS

불완전 복구를 하게 되면 반드시 resetlogs로 데이터베이스를 기동해야 합니다.

resetlogs 이전의 데이터 파일 및 Log 파일과 resetlogs 이후의 파일은 서로 호환되지 않습니다. resetlogs 이전의 백 업 파일이나 Log 파일들을 이용하여 resetlogs 이후로 복구할 수 없습니다. 또한 resetlogs 이후의 파일들을 가지고 resetlogs 이전 상태로 불완전 복구도 불가능합니다.

다음은 RESETLOGS의 사용 예입니다.

$ tbboot -t resetlogs

참고: resetlogs로 시작한 경우 반드시 새로운 백업을 받기를 권장합니다.

복구 환경 구성

다음은 복구 환경을 구성하는 방법에 대한 설명입니다.

  1. Tibero 파라미터 설정

DB_NAME=tibero 
LISTENER_PORT=8629
CONTROL_FILES="/home/tibero/tbdata/c1.ctl", "/home/tibero/tbdata/c2.ctl"
DB_CREATE_FILE_DEST="/home/tibero/tbdata" 
LOG_ARCHIVE_DEST="/home/tibero/tbarch" 
#CERTIFICATE_FILE="/home/tibero/tibero7/config/svr_wallet/tibero.crt" 
#PRIVKEY_FILE="/home/tibero/tibero7/config/svr_wallet/tibero.key" 
#WALLET_FILE="/home/tibero/tibero7/config/svr_wallet/WALLET"

MAX_SESSION_COUNT=100


TOTAL_SHM_SIZE=1024M
  1. 데이터베이스 생성

CREATE DATABASE "tibero"
USER SYS IDENTIFIED BY TIBERO 
MAXDATAFILES 4096
CHARACTER SET MSWIN949
LOGFILE GROUP 0 ('redo01.redo', 'redo02.redo') SIZE 50M, 
        GROUP 1 ('redo11.redo', 'redo12.redo') SIZE 50M, 
        GROUP 2 ('redo21.redo', 'redo22.redo') SIZE 50M
MAXLOGFILES 100
MAXLOGMEMBERS 8 ARCHIVELOG 
DATAFILE 'system001.dtf' SIZE 256M
        AUTOEXTEND ON NEXT 16M MAXSIZE 3072M
        DEFAULT TABLESPACE USR 
DATAFILE 'usr001.dtf' SIZE 128M
        AUTOEXTEND ON NEXT 16M MAXSIZE 3072M 
        DEFAULT TEMPORARY TABLESPACE TEMP
TEMPFILE 'temp001.dtf' SIZE 512M
        AUTOEXTEND ON NEXT 16M MAXSIZE 10240M EXTENT MANAGEMENT 
        LOCAL AUTOALLOCATE UNDO TABLESPACE UNDO
DATAFILE 'undo001.dtf' SIZE 512M 
        AUTOEXTEND ON NEXT 16M MAXSIZE 10240M 
        EXTENT MANAGEMENT LOCAL AUTOALLOCATE;
  1. Tablespace 생성

DROP TABLESPACE "MY_FILE001" INCLUDING CONTENTS AND DATAFILES; 
CREATE TABLESPACE "MY_FILE001" DATAFILE 'my_file001.dtf' SIZE 10M 
AUTOEXTEND ON NEXT 1M MAXSIZE 3G
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;
  1. 사용자 생성

DROP USER TIBERO CASCADE;
CREATE USER tibero IDENTIFIED BY tmax 
DEFAULT TABLESPACE MY_FILE001;

GRANT CONNECT, RESOURCE, DBA TO tibero;

복구 방법

컨트롤 파일 복구

본 절에서는 컨트롤 파일을 각 상황별로 복구하는 방법에 대해 설명합니다.

컨트롤 파일이 삭제된 경우

운영상태에서 컨트롤 파일이 삭제되어 장애가 발생한 경우 백업된 컨트롤 파일의 생성 문장으로 컨트롤 파일을 재 생성합니다.

  • 장애 상황

$ tbboot
$ tbsql sys/tibero


SQL> ALTER DATABASE BACKUP CONTROLFILE TO TRACE AS
'/home/tibero/tbdata/ctl_backup.sql' REUSE NORESETLOGS;


$ rm -f /home/tibero/tbdata/c1.ctl
  • 해결 방법

$ tbdown

Tibero instance terminated (NORMAL mode).

$ tbboot
change core dump dir to /home/tibero/tibero7/bin/prof 
listener port = 8629
********************************************************
*	Warning: Control file open failed
*	/home/tibero/tbdata/SYSTEM/c1.ctl
********************************************************


********************************************************
*Critical Warning : Raise svmode failed. The reason is
*TBR-24003 : Unable to read control file.
*Current server mode is NOMOUNT.
********************************************************

Tibero 7

TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.

Tibero instance started suspended at NOMOUNT mode.

$ tbsql sys/tibero

tbSQL 7

TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.

Connected to Tibero.

SQL> @ctl_backup.sql 
Control File created.

SQL> exit 
Disconnected.
$ tbdown

Tibero instance terminated (NORMAL mode).

$ tbboot
change core dump dir to /home/tibero/tibero7/bin/prof 
Listener port = 8629

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

Tibero 7

TmaxTibero Corporation Copyright (c) 2020-. All rights reserved. 
Tibero instance started suspended at MOUNT mode.

$ tbsql sys/tibero tbSQL 7

TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.

Connected to Tibero.

SQL> select * from v$recover_file;

    FILE#     ONLINE	 ERROR	                    CHANGE#     TIME
---------     -------    ------------------------   --------    --------
        0     ONLINE     media recovery required    18144       2023/07/15
        1     ONLINE	 media recovery	required    18144	2023/07/15
        2     ONLINE	 media recovery	required    18144	2023/07/15
        3     ONLINE	 media recovery	required    18144	2023/07/15
        4     ONLINE	 media recovery	required    18144	2023/07/15

rows selected.

SQL> alter database recover automatic database; 
Database altered.

SQL> select * from v$recover_file;
0 row selected.

SQL> exit Disconnected.
$ tbdown

Tibero instance terminated (NORMAL mode).

$ tbboot
change core dump dir to /home/tibero/tibero7/bin/prof

Listener port = 8629

Tibero 7

TmaxTibero Corporation Copyright (c) 2020-. All rights reserved. 
Tibero instance started up (NORMAL mode)

$ tbsql sys/tibero tbSQL 7

TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.

Connected to Tibero.

--백업한 컨트롤 파일 스크립트내의 주석 스크립트 부분을 활용하여 Temp 파일 생성
SQL> ALTER TABLESPACE TEMP ADD TEMPFILE '/home/tibero/tbdata/temp001.dtf' 
SIZE 1G REUSE AUTOEXTEND OFF;
Tablespace 'TEMP' altered. 
SQL> exit

Disconnected.

참고 만약 운영상태에서 컨트롤 파일이 다른 파일로 덮어 씌워진 경우도 위의 방법으로 해결할 수 있습니다.

이중화 컨트롤 파일 하나가 삭제된 경우

데이터베이스가 down 상태에서 이중화 컨트롤 파일 하나가 삭제된 경우 삭제된 컨트롤 파일을 재생성하거나 파라 미터 파일의 내용을 수정합니다.

  • 장애 상황

$ rm -f /home/tibero/tbdata/c1.ctl
$ tbdown
$ tbboot
Change core dump dir to /home/test/tibero7/bin/prof. 
Listener port = 8629

********************************************************
*	Warning: Control file open failed
*	/home/tibero/tbdata/SYSTEM/c1.ctl
********************************************************

Tibero 7

TmaxTibero Corporation Copyright (c) 2020-. All rights reserved. 
Tibero instance started up (NORMAL mode).

$ tail -f sys.log
[2023-07-15T16:03:06.098870] [CLC-28] [I] control file write failed: no fd for 
'/home/tibero/tbdata/SYSTEM/c1.ctl'
[2023-07-15T16:03:08.099663] [CLC-28] [I] control file read failed : 
'/home/tibero/tbdata/SYSTEM/c1.ctl' (blkno=1) (no fd)
[2023-07-15T16:03:08.100278] [CLC-28] [I] control file write failed: no fd for
'/home/tibero/tbdata/SYSTEM/c1.ctl'
[2023-07-15T16:03:10.101093] [CLC-28] [I] control file read failed : 
'/home/tibero/tbdata/SYSTEM/c1.ctl' (blkno=1) (no fd)
[2023-07-15T16:03:10.101527] [CLC-28] [I] control file write failed: no fd for
'/home/tibero/tbdata/SYSTEM/c1.ctl'
[2023-07-15T16:03:12.101537] [CLC-28] [I] control file read failed : 
'/home/tibero/tbdata/SYSTEM/c1.ctl' (blkno=1) (no fd)
[2023-07-15T16:03:12.102669] [CLC-28] [I] control file write failed: no fd for 
'/home/tibero/tbdata/SYSTEM/c1.ctl'
[2023-07-15T16:03:14.103789] [CLC-28] [I] control file read failed : 
'/home/tibero/tbdata/SYSTEM/c1.ctl' (blkno=1) (no fd)
[2023-07-15T16:03:14.105566] [CLC-28] [I] control file write failed: no fd for 
'/home/tibero/tbdata/SYSTEM/c1.ctl'
[2023-07-15T16:03:16.107421] [CLC-28] [I] control file read failed :
'/home/tibero/tbdata/SYSTEM/c1.ctl' (blkno=1) (no fd)
[2023-07-15T16:03:16.107935] [CLC-28] [I] control file write failed: no fd for 
'/home/tibero/tbdata/SYSTEM/c1.ctl'


$ tbdown
  • 해결 방법

$ cp /home/tibero/tbdata/c2.ctl /home/tibero/tbdata/c1.ctl
$ tbboot

Online Log 파일 복구

redo Log 유실에 따른 Tibero의 동작은 다음과 같습니다.

  • boot할 때 redo 파일이 하나 이상 없는 경우 - boot가 실패합니다.

  • 정상적으로 기동 된 상태에서 동작 중 redo log 파일이 삭제되는 경우 - boot 이후 한 번도 사용되지 않은 redo log 파일이 삭제된 경우 (파일 디스크립터 없음) : 그룹 내에 이용 가능한 다른 멤버 파일이 있을 경우는 sys log에 메시지만 남기고 정상 동작합니다. : 그룹 내에 멤버가 모두 삭제된 경우 sys log에 에러 메시지를 남기면서 Tibero가 down됩니다. - boot 이후 사용된 적이 있는 redo log 파일이 삭제된 경우 (파일 디스크립터 있음) : 정상적으로 진행됩니다.

INACTIVE 모드 로그 그룹의 로그 멤버 하나가 삭제된 경우

운영상태에서 INACTIVE 모드 로그 그룹의 로그 멤버 하나가 삭제된 경우에는 장애가 발생한 멤버를 삭제한 후 재생성합니다.

  • 장애 상황

SQL> set line 200
SQL> col group# for 999 
SQL> col member for a50 
SQL> col SEQ# for 999 
SQL> col MB for 999
SQL> select a.group#, a.member, b.bytes/1024/1024 "MB", b.archived "ARC",
b.sequence# "SEQ#", b.status

from v$logfile a, v$log b 
where a.group#=b.group# 
order by 1;	

GROUP#     MEMBER	                MB	ARC	        SEQ#	STATUS
0	/home/tibero/tbdata/redo02.redo	50	YES		3	INACTIVE
1	/home/tibero/tbdata/redo11.redo	50	NO		4	CURRENT
1	/home/tibero/tbdata/redo12.redo	50	NO		4	CURRENT
2	/home/tibero/tbdata/redo21.redo	50	YES		2	INACTIVE
2	/home/tibero/tbdata/redo22.redo	50	YES		2	INACTIVE

6 rows selected.
SQL> !rm -f /home/tibero/tbdata/redo01.redo 
SQL> !ls /home/tibero/tbdata/redo01.redo
ls: /home/tibero/tbdata/redo01.redo: No such file or directory 
SQL> alter system switch logfile;

System altered.

SQL> /

System altered.

SQL> /

System altered.

SQL> /

System altered.

SQL> /

System altered.

SQL> set line 200
SQL> col group# for 999 
SQL> col member for a50 
SQL> col SEQ# for 999 
SQL> col MB for 999
SQL> select a.group#, a.member, b.bytes/1024/1024 "MB", b.archived "ARC", 
b.sequence# "SEQ#", b.status
from v$logfile a, v$log b
where a.group#=b.group# 
order by 1;

GROUP#     MEMBER	                    MB         ARC     SEQ#     STATUS
------   ---------------------            ----       -----    -----     --------
    0	 /home/tibero/tbdata/redo01.redo    50		NO	9	CURRENT
    0	 /home/tibero/tbdata/redo02.redo    50		NO	9	CURRENT
    1	 /home/tibero/tbdata/redo11.redo    50		YES	7	INACTIVE
    1	 /home/tibero/tbdata/redo12.redo    50		YES	7	INACTIVE
    2	 /home/tibero/tbdata/redo21.redo    50		YES	8	INACTIVE
    2	 /home/tibero/tbdata/redo22.redo    50		YES	8	INACTIVE


6 rows selected.

SQL> !

$vi /home/tibero/tibero7/instance/tibero/log/slog/sys.log
[2023-07-15T17:34:46.359823] [DDL-91] [I] Executing DDL: alter system switch logfile 
[2023-07-15T17:34:46.360003] [CLL-26] [I] switch log file 2 -> 0 ...
[2023-07-15T17:34:46.364365] [RLS-26] [I] lf hdrblk write: fno(2) cf_seq(143) seq(36) 
nab(1) low(0000.0000c5ed) next(0000.0000c5f2) st(33)
[2023-07-15T17:34:46.365318] [RLS-26] [I] lf hdrblk write: fno(2) cf_seq(143) seq(36) 
nab(1) low(0000.0000c5ed) next(0000.0000c5f2) st(33)
[2023-07-15T17:34:46.365433] [CFD-26] [I] open (stat) failed (errno=2, No such file or
directory) (flag=010002) (filename=/home/tibero/tbdata/redo01.redo)
[2023-07-15T17:34:46.365445] [CLL-26] [I] WARNING: LOG MEMBER missing during log switch,
filename: /home/tibero/tbdata/redo01.redo
[2023-07-15T17:34:46.365566] [CFD-26] [I] open (stat) failed (errno=2, No such file or 
directory) (flag=010002) (filename=/home/tibero/tbdata/redo01.redo)
[2023-07-15T17:34:46.366158] [RLS-26] [I] Failed to read 1 log blocks in logfile group #0
(member=1, blkno=0)
[2023-07-15T17:34:46.366206] [CLL-26] [I] One of the log member(lf id = 0, lm id = 1) is 
invalid, all must be valid
[2023-07-15T17:34:46.366820] [RLS-26] [I] lf hdrblk write: fno(0) cf_seq(143) seq(37) 
nab(4294967295) low(0000.0000c5f2) next(ffff.ffffffff) st(129)
[2023-07-15T17:34:46.366850] [RLS-26] [I] lf hdrblk write: fno(0) cf_seq(143) seq(37) 
nab(4294967295) low(0000.0000c5f2) next(ffff.ffffffff) st(129)
[2023-07-15T17:34:46.369945] [CLL-26] [I] LOGFILE SWITCHED. LF#2(seqno=36, blocks=0
next=0000.0000c5f2)

  • 해결 방법

$ tbsql sys/tibero

tbSQL 7

TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.

Connected to Tibero.

SQL> alter system switch logfile;

System altered.

SQL> alter database drop logfile member '/home/tibero/tbdata/redo01.redo';

Database altered.

SQL> alter database add logfile member '/home/tibero/tbdata/redo01.redo' to group 0;

Database altered.

SQL> alter system switch logfile; 
System altered.

SQL> /
System altered.

SQL> /
System altered.

SQL> !
$vi /home/tibero/tibero7/instance/tibero/log/slog/sys.log

[2023-07-15T10:29:16.500746] [DDL-91] [I] Executing DDL: alter database add logfile 
member '/home/tibero/tbdata/redo01.redo' to group 0

[2023-07-15T10:29:16.687006] [DDL-91] [I] Alter database type 1 succeeded.

[2023-07-15T10:29:16.687169] [DDL-91] [I] DDL execution succeeded

[2023-07-15T10:29:35.029699] [DDL-91] [I] Executing DDL: alter system switch logfile

[2023-07-15T10:29:35.029934] [CLL-26] [I] switch log file 1 -> 2 …

[2023-07-15T10:29:35.032529] [RLS-26] [I] lf hdrblk write: fno(1) cf_seq(155) seq(38) 
nab(23) low(0000.0000c853) next(0000.0000c8ad) st(33)

[2023-07-15T10:29:35.033078] [RLS-26] [I] lf hdrblk write: fno(1) cf_seq(155) seq(38) 
nab(23) low(0000.0000c853) next(0000.0000c8ad) st(33)

[2023-07-15T10:29:35.034520] [RLS-26] [I] lf hdrblk write: fno(2) cf_seq(155) seq(39) 
nab(4294967295) low(0000.0000c8ad) next(ffff.ffffffff) st(129)

[2023-07-15T10:29:35.034964] [RLS-26] [I] lf hdrblk write: fno(2) cf_seq(155) seq(39) 
nab(4294967295) low(0000.0000c8ad) next(ffff.ffffffff) st(129)

[2023-07-15T10:29:35.038120] [CLL-26] [I] LOGFILE SWITCHED. LF#1(seqno=38, blocks=22
next=0000.0000c8ad)

[2023-07-15T10:29:35.038217] [DDL-91] [I] DDL execution succeeded

[2023-07-15T10:29:35.038881] [CLA-27] [I] LOG GROUP 1 (lsn=38) archive start.
(/home/tibero/tbdata/arch/log-t0-r0-s38.arc)


[2023-07-15T10:29:35.040019] [CLA-27] [I] LOG GROUP 1 (lsn=38) ARCHIVED.
(/home/tibero/tbdata/arch/log-t0-r0-s38.arc)

INACTIVE 모드 로그 그룹이 삭제된 경우

운영상태에서 INACTIVE 모드 로그 그룹이 삭제된 경우 장애가 발생한 로그 그룹을 삭제한 후 재생성합니다.

  • 장애 상황

$ tbsql sys/tibero

tbSQL 7
TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.

Connected to Tibero.

SQL> set line 200
SQL> col group# for 999 
SQL> col member for a50 
SQL> col SEQ# for 999
SQL> col MB for 999
SQL> select a.group#, a.member, b.bytes/1024/1024 "MB", b.archived "ARC", 
b.sequence# "SEQ#", b.status
from v$logfile a, v$log b 
where a.group#=b.group# 
order by 1;

GROUP#     MEMBER	                    MB     ARC     SEQ#     STATUS
------    ---------------------------       ----   ----    -----    --------
    0	  /home/tibero/tbdata/redo01.redo    50	    YES      4	     INACTIVE
    0	  /home/tibero/tbdata/redo02.redo    50	    YES	     4	     INACTIVE
    1	  /home/tibero/tbdata/redo11.redo    50	    NO       5	     CURRENT
    1	  /home/tibero/tbdata/redo12.redo    50	    NO	     5	     CURRENT
    2	  /home/tibero/tbdata/redo21.redo    50	    YES	     3	     INACTIVE
    2	  /home/tibero/tbdata/redo22.redo    50	    YES	     3	     INACTIVE


6 rows selected.

SQL> !rm -f /home/tibero/tbdata/redo01.redo 
SQL> !rm -f /home/tibero/tbdata/redo02.redo 
SQL> !ls /home/tibero/tbdata/redo01.redo
ls: /home/tibero/tbdata/redo01.redo: No such file or directory 
SQL> !ls /home/tibero/tbdata/redo02.redo
ls: /home/tibero/tbdata/redo02.redo: No such file or directory

SQL> alter system switch logfile;

System altered.

SQL> /

System altered.

SQL> /

System altered.

SQL> exit 
Disconnected.
  • 해결 방법

$ tbsql sys/tibero

tbSQL 7

TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.

Connected to Tibero.

SQL> alter database drop logfile group 0;
Database altered.

SQL> alter database add logfile group 0 ('/home/tibero/tbdata/redo01.redo', 
'/home/tibero/tbdata/redo02.redo') size 50M;
Database altered.

SQL> set line 200
SQL> col group# for 999 
SQL> col member for a50 
SQL> col SEQ# for 999 
SQL> col MB for 999
SQL> select a.group#, a.member, b.bytes/1024/1024 "MB", b.archived "ARC",
b.sequence# "SEQ#", b.status

from v$logfile a, v$log b 
where a.group#=b.group# 
order by 1;	

GROUP#   MEMBER	                            MB	 ARC	SEQ#	STATUS
-------  --------------------------------  ----  ----   ------  --------
    0	 /home/tibero/tbdata/redo01.redo    50	 YES	-1	UNUSED
    0	 /home/tibero/tbdata/redo02.redo    50	 YES	-1	UNUSED
    1	 /home/tibero/tbdata/redo11.redo    50	 NO	 5	CURRENT
    1	 /home/tibero/tbdata/redo12.redo    50	 NO	 5	CURRENT
    2	 /home/tibero/tbdata/redo21.redo    50	 YES	 3	INACTIVE
    2	 /home/tibero/tbdata/redo22.redo    50	 YES	 3	INACTIVE
    
6 rows selected.

CURRENT 모드 로그 그룹 삭제 후 abort로 종료된 경우

ARCHIVE LOG 모드 운영상태에서 CURRENT 모드 로그 그룹이 삭제되고 abort로 종료된 경우 특정 시점의 TSN을 이용하여 불완전 복구를 해야 합니다.

마지막 Archive Log 파일의 NEXT_TSN 정보를 이용하여 변경 기반 복구를 진행하며 v$archive_dest_files의 next_tsn 정보를 확인하거나 Archive 파일 덤프를 발생시켜 next_tsn 정보를 확인합니다. 변경 기반 복구 작업을 하는 경우에는 next_tsn - 1 값으로 진행합니다.

  • 장애 상황

$ tbsql sys/tibero tbSQL 7

TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.

Connected to Tibero.

SQL> set line 200
SQL> col group# for 999 
SQL> col member for a50 
SQL> col SEQ# for 999 
SQL> col MB for 999
SQL> select a.group#, a.member, b.bytes/1024/1024 "MB", b.archived "ARC", 
b.sequence# "SEQ#", b.status
from v$logfile a, v$log b
where a.group#=b.group# 
order by 1;

GROUP#   MEMBER	                            MB	 ARC	SEQ#	STATUS
-------  --------------------------------  ----  ----   ------  --------
    0	 /home/tibero/tbdata/redo01.redo    50	 NO	7	CURRENT
    0	 /home/tibero/tbdata/redo02.redo    50	 NO	7	CURRENT
    1	 /home/tibero/tbdata/redo11.redo    50	 YES	5	CURRENT
    1	 /home/tibero/tbdata/redo12.redo    50	 YES	5	CURRENT
    2	 /home/tibero/tbdata/redo21.redo    50	 YES	6	INACTIVE
    2	 /home/tibero/tbdata/redo22.redo    50	 YES	6	INACTIVE

6 rows selected.

SQL> CREATE TABLE T1 (C1 VARCHAR(5));
Table 'T1' created.

SQL> INSERT INTO T1 (C1) VALUES ('00011');
1 row inserted.

SQL> COMMIT;
Commit completed.

SQL> ALTER SYSTEM SWITCH LOGFILE;
System altered.

SQL> INSERT INTO T1 (C1) VALUES ('00012');
1 row inserted.

SQL> COMMIT;
Commit completed.

SQL> ALTER SYSTEM SWITCH LOGFILE;
System altered.

SQL> INSERT INTO T1 (C1) VALUES ('00013');
1 row inserted.

SQL> COMMIT;
Commit completed.

SQL> ALTER SYSTEM SWITCH LOGFILE;
System altered.

SQL> INSERT INTO T1 (C1) VALUES ('00014');
1 row inserted.

SQL> COMMIT;
Commit completed.

SQL> set line 200
SQL> col group# for 999 
SQL> col member for a50 
SQL> col SEQ# for 999 
SQL> col MB for 999
SQL> select a.group#, a.member, b.bytes/1024/1024 "MB", b.archived "ARC", 
b.sequence# "SEQ#", b.status
from v$logfile a, v$log b
where a.group#=b.group# 
order by 1;

GROUP#   MEMBER	                            MB	 ARC	SEQ#	STATUS
-------  --------------------------------  ----  ----   ------  --------
    0	 /home/tibero/tbdata/redo01.redo    50	 NO	10	CURRENT
    0	 /home/tibero/tbdata/redo02.redo    50	 NO	10	CURRENT
    1	 /home/tibero/tbdata/redo11.redo    50	 YES	8	INACTIVE
    1	 /home/tibero/tbdata/redo12.redo    50	 YES	8	INACTIVE
    2	 /home/tibero/tbdata/redo21.redo    50	 YES	9	INACTIVE
    2	 /home/tibero/tbdata/redo22.redo    50	 YES	9	INACTIVE

6 rows selected.

SQL> !rm -f /home/tibero/tbdata/redo01.redo 
SQL> !rm -f /home/tibero/tbdata/redo02.redo 
SQL> !ls /home/tibero/tbdata/redo01.redo
/home/tibero/tbdata/redo01.redo not found 
SQL> !ls /home/tibero/tbdata/redo02.redo
/home/tibero/tbdata/redo02.redo not found

SQL> exit 
Disconnected.

$ tbdown abort

Tibero instance terminated (ABORT mode).
  • 해결 방안

$ cp /home/tibero/tbdata_bak/*.dtf /home/tibero/tbdata

$ tbboot mount
change core dump dir to /home/tibero/tibero7/bin/prof

listener port = 8629 
Tibero 7

TmaxTibero Corporation Copyright (c) 2020-. All rights reserved. 
Tibero instance started up (MOUNT mode).

$ tbsql sys/tibero

tbSQL 7
TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.

Connected to Tibero.

SQL> set line 200 SQL> set line 200
SQL> col group# for 999
SQL> col member for a50 
SQL> col SEQ# for 999 
SQL> col MB for 999
SQL> select a.group#, a.member, b.bytes/1024/1024 "MB", b.archived "ARC", 
b.sequence# "SEQ#", b.status
from v$logfile a, v$log b 
where a.group#=b.group# 
order by 1;

GROUP#   MEMBER	                            MB	 ARC	SEQ#	STATUS
-------  --------------------------------  ----  ----   ------  --------
    0	 /home/tibero/tbdata/redo01.redo    50	 NO	10	CURRENT
    0	 /home/tibero/tbdata/redo02.redo    50	 NO	10	CURRENT
    1	 /home/tibero/tbdata/redo11.redo    50	 YES	8	INACTIVE
    1	 /home/tibero/tbdata/redo12.redo    50	 YES	8	INACTIVE
    2	 /home/tibero/tbdata/redo21.redo    50	 YES	9	INACTIVE
    2	 /home/tibero/tbdata/redo22.redo    50	 YES	9	INACTIVE

6 rows selected.

--next_change# - 1 값 조회
SQL>	set	line 200
SQL>	col	name for a40
SQL>	col	SEQ# for 999
SQL>	col	TSN for 999999999
SQL> select name, sequence# seq#, next_change#-1	tsn	
from v$archive_dest_files order by 2;		

NAME	                                        SEQ#		 TSN
--------------------------------------------   ------      -----------
/home/tibero/tbdata/arch/log-t0-r0-s7.arc	7		45589
/home/tibero/tbdata/arch/log-t0-r0-s8.arc	8		45597
/home/tibero/tbdata/arch/log-t0-r0-s9.arc	9		45606

3 rows selected.		

--TSN 정보가 없을 경우 Log 파일 덤프를 발생시킨다.
SQL> alter system dump logfile '/home/tibero/tbdata/arch/log-t0-r0-s9.arc';

System altered.

SQL> exit 
Disconnected.

$ cd $TB_HOME/instance/$TB_SID/dump/tracedump
$ ls -rlt

total 24
-rw-r--r-- 1 tibero dba 2688 Jul 15 19:08 tb_dump_47120982_37_2.trc

--next_tsn 값을 10진수로 변경 : 0000.0000b227 (hex) => 45607 (dec)
--next_tsn - 1 = 45606

$ grep next tb_dump_47120982_37_2.trc

low=0000.0000b21e 2023-07-10 18:59:28 next=0000.0000b227 2023-07-15 18:59:43
...(이하생략)

$ tbsql sys/tibero

tbSQL 7

TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.

Connected to Tibero.

SQL> alter database recover automatic database until change 45606;

Database altered.

SQL> exit 
Disconnected.

$ tbdown

Tibero instance terminated (NORMAL mode).

$ tbboot -t resetlogs
change core dump dir to /home/tibero/tibero7/bin/prof

listener port = 8629

Tibero 7

TmaxTibero Corporation Copyright (c) 2020-. All rights reserved. 
Tibero instance started up (NORMAL RESETLOGS mode).

$ tbsql sys/tibero

tbSQL 7

TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.

Connected to Tibero.

SQL> select * from t1;

C1
--------
00011
00012
00013

3 rows selected.

CURRENT 모드 로그 그룹 삭제 후 immediate로 종료된 경우

ARCHIVE LOG 모드 운영상태에서 CURRENT 모드 로그 그룹이 삭제되고 immediate로 종료된 경우 마지막까지commit된 데이터는 데이터 파일에 저장된 후 정상 종료되므로 취소 기반으로 복구를 진행합니다.

  • 장애 상황

$ tbsql sys/tibero tbSQL 7

TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.

Connected to Tibero.

SQL> CREATE TABLE T1 (C1 VARCHAR(5));
Table 'T1' created.

SQL> INSERT INTO T1 (C1) VALUES ('00011');
1 row inserted.

SQL> COMMIT;
Commit completed.

SQL> ALTER SYSTEM SWITCH LOGFILE;
System altered.

SQL> INSERT INTO T1 (C1) VALUES ('00012');
1 row inserted.

SQL> COMMIT;
Commit completed.

SQL> ALTER SYSTEM SWITCH LOGFILE;
System altered.

SQL> INSERT INTO T1 (C1) VALUES ('00013');
1 row inserted.

SQL> COMMIT;
Commit completed.

SQL> ALTER SYSTEM SWITCH LOGFILE;
System altered.

SQL> INSERT INTO T1 (C1) VALUES ('00014');
1 row inserted.

QL> COMMIT;
Commit completed.

SQL> set line 200
SQL> col group# for 999 
SQL> col member for a50 
SQL> col SEQ# for 999 
SQL> col MB for 999
SQL> select a.group#, a.member, b.bytes/1024/1024 "MB", b.archived "ARC", 
b.sequence# "SEQ#", b.status
from v$logfile a, v$log b
where a.group#=b.group# 
order by 1;

GROUP#   MEMBER	                            MB	 ARC	SEQ#	STATUS
-------  --------------------------------  ----  ----   ------  --------
    0	 /home/tibero/tbdata/redo01.redo    50	 NO	7	CURRENT
    0	 /home/tibero/tbdata/redo02.redo    50	 NO	7	CURRENT
    1	 /home/tibero/tbdata/redo11.redo    50	 NO	5	INACTIVE
    1	 /home/tibero/tbdata/redo12.redo    50	 NO	5	INACTIVE
    2	 /home/tibero/tbdata/redo21.redo    50	 NO	6	INACTIVE
    2	 /home/tibero/tbdata/redo22.redo    50	 NO	6	INACTIVE

6 rows selected.

SQL> !rm -f /home/tibero/tbdata/redo01.redo 
SQL> !rm -f /home/tibero/tbdata/redo02.redo 
SQL> !ls /home/tibero/tbdata/redo01.redo
/home/tibero/tbdata/redo01.redo not found
SQL> !ls /home/tibero/tbdata/redo02.redo
/home/tibero/tbdata/redo02.redo not found

SQL> exit 
Disconnected.

$ tbdown immediate

Tibero instance terminated (IMMEDIATE mode).
  • 해결 방안

$ tbboot

change core dump dir to /home/tibero/tibero7/bin/prof 
listener port = 8629

********************************************************
*Critical Warning : Raise svmode failed. The reason is
*TBR-1042 : Unable to read log member file in group 0, member 1
(/home/tibero/tbdata/redo01.redo), block 0.
* Current server mode is MOUNT.
********************************************************

Tibero 7
TmaxTibero Corporation Copyright (c) 2020-. All rights reserved. 
Tibero instance started suspended at MOUNT mode.

$ tbsql sys/tibero

tbSQL 7

TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.

Connected to Tibero.

SQL> ALTER DATABASE RECOVER DATABASE UNTIL CANCEL;
Database altered.

SQL> exit 
Disconnected.

$ tbdown

Tibero instance terminated (NORMAL mode).

$ tbboot resetlogs
change core dump dir to /home/tibero/tibero7/bin/prof

listener port = 8629

Tibero 7

TmaxTibero Corporation Copyright (c) 2020-. All rights reserved. 
Tibero instance started up (NORMAL RESETLOGS mode).

$ tbsql sys/tibero 
tbSQL 7
TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.

Connected to Tibero

SQL> !ls /home/tibero/tbdata/redo01.redo
/home/tibero/tbdata/redo01.redo
SQL> !ls /home/tibero/tbdata/redo02.redo
/home/tibero/tbdata/redo02.redo

/home/tibero/tbdata/redo02.redo

SQL> set line 200
SQL> col group# for 999 
SQL> col member for a50
SQL> col SEQ# for 999 
SQL> col MB for 999
SQL> select a.group#, a.member, b.bytes/1024/1024 "MB", b.archived "ARC",
b.sequence# "SEQ#", b.status
from v$logfile a, v$log b
where a.group#=b.group#
order by 1;

GROUP#   MEMBER	                            MB	 ARC	SEQ#	STATUS
-------  --------------------------------  ----  ----   ------  --------
    0	 /home/tibero/tbdata/redo01.redo    50	 NO	1	CURRENT
    0	 /home/tibero/tbdata/redo02.redo    50	 NO	1	CURRENT
    1	 /home/tibero/tbdata/redo11.redo    50	 NO	-1	UNUSED
    1	 /home/tibero/tbdata/redo12.redo    50	 NO	-1	UNUSED
    2	 /home/tibero/tbdata/redo21.redo    50	 NO	-1	UNUSED
    2	 /home/tibero/tbdata/redo22.redo    50	 NO	-1	UNUSED

6 rows selected.

SQL> select * from t1;

C1
-------
00011
00012
00013
00014

4 rows selected

Temp Tablespace 복구

Temp 파일이 삭제된 경우

Temp Tablespace의 파일이 삭제된 경우 tbboot을 실행하면 Temp 파일이 자동적으로 생성됩니다.

  • 장애상황

$ tbboot
$ tbsql sys/tibero
$ rm –rf /home/tibero/tbdata/temp001.dtf
  • 해결 방안

$ tbdown
$ ls -al /home/tibero/tbdata/temp001.dtf
ls: /home/tibero/tbdata/temp001.dtf: No such file or directory

$ tbboot
$ ls -al /home/tibero/tbdata/temp001.dtf
-rw------- 1 tibero dba 536870912 Jun 15 17:25 /home/tibero/tbdata/temp001.dtf

데이터 파일 장애 완전 복구

자동 완전 복구

ARCHIVE LOG 모드 운영상태에서 데이터 파일이 삭제된 경우 기존 백업된 데이터 파일을 복사한 후 AUTOMATIC 명령어로 복구합니다.

  • 장애 상황

$ tbdown
$ cp –R /home/tibero/tbdata /home/tibero/tbdata_bak
$ tbboot


$ tbsql tibero/tmax


SQL> CREATE TABLE T1 (C1 VARCHAR(5)) TABLESPACE MY_FILE001;
Table 'T1' created.


SQL> INSERT INTO T1 (C1) VALUES ('00011');
1 row inserted.


SQL> INSERT INTO T1 (C1) VALUES ('00012');
1 row inserted.


SQL> INSERT INTO T1 (C1) VALUES ('00013');
1 row inserted.


SQL> COMMIT;
Commit completed.


SQL> ALTER SYSTEM SWITCH LOGFILE;
System altered.


SQL> /
System altered.


SQL> exit


$ tbdown
$ rm –f /home/tibero/tbdata/my_file001.dtf
  • 해결 방안

$ cp /home/tibero/tbdata_bak/*.dtf /home/tibero/tbdata


$ tbboot mount


$ tbsql sys/tibero tbSQL 7


TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.


Connected to Tibero.



SQL> ALTER DATABASE RECOVER AUTOMATIC;
Database altered.


SQL> exit Disconnected.

$ tbdown


Tibero instance terminated (NORMAL mode).


$ tbboot


listener port = 8629


change core dump dir to /home/tibero_td/tibero7/bin/prof


Tibero 7
TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.


Tibero instance started up (NORMAL mode).


$ tbsql tibero/tmax tbSQL 7


TmaxTibero Corporation Copyright (c) 2020-. All rights reserved. Connected to Tibero.

SQL> select * from t1;


C1
------
00011
00012
00013


3 rows selected.

사용자 완전 복구

ARCHIVE LOG 모드 운영상태에서 데이터 파일이 삭제된 경우 Archive 파일로 생성된 것은 Archive 파일을 이용하 여 명시적으로 각각 복구 하고, Archive 파일로 생성되지 않은 current 상태인 것은 Redo 파일로 복구합니다.

  • 장애 상황

$ tbdown


$ cp –R /home/tibero/tbdata /home/tibero/tbdata_bak


$ tbboot


$ tbsql tibero/tmax


SQL> CREATE TABLE T1 (C1 VARCHAR(5)) TABLESPACE MY_FILE001;
Table 'T1' created.


SQL> INSERT INTO T1 (C1) VALUES ('00011');
1 row inserted.


SQL> INSERT INTO T1 (C1) VALUES ('00012');
1 row inserted.


SQL> INSERT INTO T1 (C1) VALUES ('00013');
1 row inserted.


SQL> COMMIT;
Commit completed.


SQL> ALTER SYSTEM SWITCH LOGFILE;
System altered.


SQL> /
System altered.


SQL> /
System altered.


SQL> exit


$ tbdown
$ rm –f /home/tibero/tbdata/my_file001.dtf
  • 해결 방안

$ cp /home/tibero/tbdata_bak/*.dtf /home/tibero/tbdata


$ tbboot mount


$ tbsql sys/tibero
tbSQL 7


TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.


Connected to Tibero.


SQL> ALTER DATABASE RECOVER;
Database altered.


SQL> ALTER DATABASE RECOVER LOGFILE '/home/tibero/tbarch/log-t0-r0-s1.arc'; 
Database altered.

SQL> ALTER DATABASE RECOVER LOGFILE '/home/tibero/tbarch/log-t0-r0-s2.arc'; 
Database altered.

SQL> ALTER DATABASE RECOVER LOGFILE '/home/tibero/tbarch/log-t0-r0-s3.arc'; 
Database altered.

SQL> select * from v$log;
THREAD#	GROUP# SEQUENCE#  BYTES	   MEMBERS ARCHIVED  STATUS   FIRST_CHANGE#  FIRST_TIME
------  ------ ---------  -------- ------- --------- ------   -------------  -----------	
0	0	4	  52428800  2	   NO	     CURRENT  14521          2023/07/15						
0	1	2	  52428800  2	   YES	     CURRENT  14516          2023/07/15						
0	2	3	  52428800  2	   YES	     CURRENT  14518	     2023/07/15						

3 rows selected.


SQL> select * from v$logfile;


GROUP#	STATUS_TYPE	MEMBER
------  ------------    ---------------------------------
0	ONLINE		/home/tibero/tbdata/redo01.redo
0	ONLINE		/home/tibero/tbdata/redo02.redo
1	ONLINE		/home/tibero/tbdata/redo11.redo
1	ONLINE		/home/tibero/tbdata/redo12.redo
2	ONLINE		/home/tibero/tbdata/redo21.redo
2	ONLINE		/home/tibero/tbdata/redo22.redo

6 rows selected.			


SQL> ALTER DATABASE RECOVER LOGFILE '/home/tibero/tbdata/redo01.redo'; 
Database altered.

SQL> exit Disconnected.

$ tbdown
Tibero instance terminated (NORMAL mode).


$ tbboot


listener port = 8629
change core dump dir to /home/tibero/tibero7/bin/prof


Tibero 7


TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.


Tibero instance started up (NORMAL mode).


$ tbsql tibero/tmax


tbSQL 7


TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.


Connected to Tibero.


SQL> select * from t1;


C1
-------
00011
00012
00013


3 rows selected.

백업 데이터 파일이 없을 경우 완전 복구

ARCHIVE LOG 모드 운영상태에서 백업 데이터 파일이 없을 경우 먼저 데이터 파일을 생성하고 AUTOMATIC 명령어로 완전 복구합니다. 단, 데이터 파일이 생성되는 시점부터 Archive 파일이 존재해야 합니다.

  • 장애 상황

$ tbdown
$ cp –R /home/tibero/tbdata /home/tibero/tbdata_bak
$ tbboot


$ tbsql tibero/tmax


SQL> CREATE TABLE T1 (C1 VARCHAR(5)) TABLESPACE MY_FILE001;
Table 'T1' created.


SQL> INSERT INTO T1 (C1) VALUES ('00011');
1 row inserted.


SQL> INSERT INTO T1 (C1) VALUES ('00012');
1 row inserted.


SQL> INSERT INTO T1 (C1) VALUES ('00013');
1 row inserted.


SQL> COMMIT;
Commit completed.


SQL> ALTER SYSTEM SWITCH LOGFILE;
System altered.


SQL> /
System altered.


SQL> /
System altered.


SQL> exit


$ tbdown
$ rm –f /home/tibero/tbdata/my_file001.dtf
  • 해결 방안

$ tbboot mount


$ tbsql sys/tibero


SQL> ALTER DATABASE CREATE DATAFILE '/home/tibero/tbdata/my_file001.dtf'; 
Database altered.

SQL> ALTER DATABASE RECOVER AUTOMATIC;
Database altered.


SQL> exit


$ tbdown


$ tbboot


$ tbsql tibero/tmax


SQL> SELECT * FROM T1;


C1
-------
00011
00012
00013


3 rows selected.

백업 데이터 파일이 있을 경우 Online 중에 완전 복구

백업 데이터 파일이 있고 Online 중에 데이터 파일이 삭제된 경우 해당 Tablespace를 Offline시키고 Partial 복구

(해당 Tablespace)를 합니다. 복구 후에는 Tablespace를 Online시킵니다.

  • 장애 상황

$ tbdown
$ cp –R /home/tibero/tbdata /home/tibero/tbdata_bak
$ tbboot


$ tbsql tibero/tmax


SQL> CREATE TABLE T1 (C1 VARCHAR(5)) TABLESPACE MY_FILE001;
Table 'T1' created.


SQL> INSERT INTO T1 (C1) VALUES ('00011');
1 row inserted.


SQL> INSERT INTO T1 (C1) VALUES ('00012');
1 row inserted.


SQL> INSERT INTO T1 (C1) VALUES ('00013');
1 row inserted.


SQL> COMMIT;
Commit completed.


SQL> ALTER SYSTEM SWITCH LOGFILE;
System altered.


SQL> /
System altered.


SQL> /
System altered.


SQL> exit Disconnected.


$ rm –f /home/tibero/tbdata/my_file001.dtf
  • 해결 방안

$ tbsql sys/tibero tbSQL 7

TmaxTibero Corporation Copyright (c) 2020-. All rights reserved. 
Connected to Tibero.

SQL> alter tablespace MY_FILE001 offline immediate; 
Tablespace 'MY_FILE001' altered.

SQL> exit Disconnected.

$ cp /home/tibero/tbdata_bak/my_file001.dtf /home/tibero/tbdata

$ tbsql sys/tibero

tbSQL 7
TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.

Connected to Tibero.

SQL> alter database recover automatic tablespace MY_FILE001; 
Database altered.

SQL> alter tablespace MY_FILE001 online; 
Tablespace 'MY_FILE001' altered.

SQL> conn tibero/tmax Connected to Tibero.

SQL> select * from t1;

C1
------
00011
00012
00013

3 rows selected.

데이터 파일 장애 불완전 복구

corrupt block 에러가 발생하는 경우 "alter system set enable_mr_corrupt_recovery=y "를 적용하거나$TB_SID.tip 파일에 파라미터 기재 후 재기동합니다. (Tibero6 FS01 까지)

  • 변경 기반(TSN) 불완전 복구

alter database recover automatic database until change 15666 allow <BLOCK수> corruption;

  • 시간 기반 불완전 복구

alter database recover automatic database until time '2023/06/13 15:58:50' allow <BLOCK수
> corruption;

  • 취소 기반 불완전 복구

alter database recover until cancel allow <BLOCK수> corruption;

참고 취소 기반 복구의 경우 DPL/DPI, nologging 데이터를 포함하면 log block corruption 발생 가능성이 있으므로 해당 작업 후에는 반드시 Full 백업 수행을 권장합니다.

변경 기반(TSN) 불완전 복구

ARCHIVE LOG 모드 운영상태에서 데이터 파일이 삭제된 경우 특정시점의 TSN을 이용하여 변경 기반 불완전 복구 를 합니다.

마지막 Archive Log 파일의 NEXT_TSN 정보를 이용하여 변경 기반 복구를 진행하며 v$archive_dest_files 의 next_tsn 정보나 Archive 파일 덤프를 발생시켜 next_tsn 정보를 확인합니다. 변경 기반 복구 작업을 하는 경우에는 next_tsn - 1 값으로 진행합니다.

  • 장애 상황

$ tbdown
$ cp –R /home/tibero/tbdata /home/tibero/tbdata_bak
$ tbboot
$ tbsql sys/tibero

SQL> SELECT *	FROM V$LOG;

SQL> select *	from v$log;


THREAD#	GROUP# SEQUENCE#  BYTES	    MEMBERS  ARCHIVED STATUS    FIRST_CHANGE#  FIRST_TIME
------  ------ ---------  --------  -------  -------- --------  -------------- ------------
0	0	1	  52428800  2	     YES      INACTIVE  0								
0	1	2	  52428800  2	     NO	      CURRENT   15543	       2023/07/15						
0	2      -1	  52428800  2	     NO	      UNUSED    0	

										
3 rows selected.


SQL> CREATE TABLE T1 (C1 VARCHAR(5));
Table 'T1' created.


SQL> INSERT INTO T1 (C1) VALUES ('00011');
1 row inserted.


SQL> INSERT INTO T1 (C1) VALUES ('00012');
1 row inserted.


SQL> INSERT INTO T1 (C1) VALUES ('00013');
1 row inserted.


SQL> COMMIT;
Commit completed.


SQL> ALTER SYSTEM SWITCH LOGFILE;
System altered.


SQL> INSERT INTO T1 (C1) VALUES ('00021');
1 row inserted.


SQL> INSERT INTO T1 (C1) VALUES ('00022');
1 row inserted.


SQL> INSERT INTO T1 (C1) VALUES ('00023');
1 row inserted.


SQL> COMMIT;
Commit completed.


SQL> ALTER SYSTEM SWITCH LOGFILE;
System altered.


SQL> INSERT INTO T1 (C1) VALUES ('00031');
1 row inserted.


SQL> INSERT INTO T1 (C1) VALUES ('00032');
1 row inserted.


SQL> INSERT INTO T1 (C1) VALUES ('00033');
1 row inserted.


SQL> COMMIT;
Commit completed.


SQL> ALTER SYSTEM SWITCH LOGFILE;
System altered.


SQL> INSERT INTO T1 (C1) VALUES ('00041');
1 row inserted.


SQL> INSERT INTO T1 (C1) VALUES ('00042');
1 row inserted.


SQL> INSERT INTO T1 (C1) VALUES ('00043');
1 row inserted.


SQL> COMMIT;
Commit completed.


SQL> exit Disconnected.

$ tbdown


Tibero instance terminated (NORMAL mode).
$ rm /home/tibero/tbdata/*.dtf


$ tbboot


listener port = 8629
change core dump dir to /home/tibero/tibero7/bin/prof


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


Tibero 7

TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.
Tibero instance started up (MOUNT mode).
  • 해결 방안

$ tbdown


Tibero instance terminated (NORMAL mode).


$ cp /home/tibero/tbdata_bak/*.dtf /home/tibero/tbdata


$ tbboot mount


Listener port=8629
change core dump dir to /home/tibero/tibero7/bin/prof


Tibero 7


TmaxTibero Corporation Copyright (c) 2020-. All rights reserved. 
Tibero instance started up (MOUNT mode).

$ tbsql sys/tibero


tbSQL 7
TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.


Connected to Tibero.


SQL> SELECT * FROM V$LOG;

SQL> select * from v$log;

THREAD#	GROUP# SEQUENCE#  BYTES	    MEMBERS  ARCHIVED STATUS    FIRST_CHANGE#  FIRST_TIME
------  ------ ---------  --------  -------  -------- --------  -------------- ------------
	
0	0	4	  52428800  2	     YES      INACTIVE  15652	       2023/07/15						
0	1	5	  52428800  2	     NO	      CURRENT   15667	       2023/07/15						
0	2	3	  52428800  2	     YES      INACTIVE  15619	       2023/07/15						

3 rows selected.


--next_change# - 1 값 조회
SQL> set line 200 
SQL> col name for a40 
SQL> col SEQ# for 999
SQL> col TSN for 999999999
SQL> select name, sequence# seq#, next_change#-1 tsn 
from v$archive_dest_files order by 2;

NAME						SEQ#		TSN
---------------------------------------         ----------      -------------
/home/tibero/tbarch/log-t0-r0-s1.arc		1		15542
/home/tibero/tbarch/log-t0-r0-s2.arc		2		15618
/home/tibero/tbarch/log-t0-r0-s3.arc		3		15651
/home/tibero/tbarch/log-t0-r0-s4.arc		4		15666

4 rows selected.

--TSN 정보가 없을 경우 Log 파일 덤프를 발생시킨다.
SQL> alter system dump logfile '/home/tibero/tbarch/log-t0-r0-s4.arc'; 
System altered.

SQL> exit 
Disconnected.

$ cd $TB_HOME/instance/$TB_SID/dump/tracedump
$ ls -rlt 
total 1
-rw-r--r-- 1 tibero dba 12420 Jun 15 22:37 tb_dump_13457_3_0.trc


--next_tsn 값을 10진수로 변경 : 0000.0000b227 (hex) => 15667 (dec)
--next_tsn - 1 = 15666
$ cat tb_dump_21951_18_2.trc | grep next


low=0000.00003d24 2023-06-14 09:21:26 next=0000.00003d33 2023-06-14 09:21:59


$ tbsql sys/tibero


tbSQL 7


TmaxTibero Corporation Copyright (c) 2020-. All rights reserved. 
Connected to Tibero.

SQL> alter database recover automatic database until change 15666; 
Database altered.

SQL> exit 
Disconnected.

$ tbdown


Tibero instance terminated (NORMAL mode).


$ tbboot -t resetlogs


listener port = 8629
change core dump dir to /home/tibero/tibero7/bin/prof


Tibero 7


TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.


Tibero instance started up (NORMAL RESETLOGS mode).


$ tbsql tibero/tmax


tbSQL 7


TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.


Connected to Tibero.



SQL> select * from t1;


C1
------
00021
00022
00023
00031
00032
00033
00011
00012
00013


9 rows selected.

시간 기반 불완전 복구

ARCHIVE LOG 모드 운영상태에서 데이터 파일이 삭제된 경우 시간을 지정하여 복구합니다.

  • 장애 상황

$ tbdown

$ cp –R /home/tibero/tbdata /home/tibero/tbdata_bak

$ tbboot

$ tbsql sys/tibero

tbSQL 7

TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.

Connected to Tibero.

SQL> CREATE TABLE T1 (C1 VARCHAR(5));
Table 'T1' created.

SQL> INSERT INTO T1 (C1) VALUES ('00011');
1 row inserted.

SQL> COMMIT;
Commit completed.

SQL> select * from t1; 
C1
-----
00011

1 row selected.

SQL> !date
Thu Jun 15 15:58:50 KST 2023

SQL> INSERT INTO T1 (C1) VALUES ( '00021');
1 row inserted.

SQL> COMMIT;
Commit completed.

SQL> select * from t1;


C1
------
00011
00021

2 rows selected.


SQL> exit Disconnected.

$ tbdown


Tibero instance terminated (NORMAL mode).


$ rm /home/tibero/tbdata/*.dtf


$ tbboot


listener port = 8629


change core dump dir to /home/tibero/tibero7/bin/prof


********************************************************
*	Critical Warning : Raise svmode failed. The reason is
*	TBR-1024 : Database needs media recovery:


open failed(/home/tibero/tbdata/system001.dtf).


*	Current server mode is MOUNT.
********************************************************


Tibero 7


TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.


Tibero instance started suspended at MOUNT mode.
  • 해결 방안

$ tbdown
Tibero instance terminated (NORMAL mode).

$ cp /home/tibero/tbdata_bak/*.dtf /home/tibero/tbdata

$ tbboot mount

listener port = 8629
change core dump dir to /home/tibero/tibero7/bin/prof

Tibero 7

TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.

Tibero instance started up (MOUNT mode).

$ export TB_NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS'

$ tbsql sys/tibero


tbSQL 7


TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.


Connected to Tibero.


SQL> alter database recover automatic database until time '2023/06/13 15:58:50'; 
Database altered.

SQL> exit Disconnected.
$ tbdown


Tibero instance terminated (NORMAL mode).


$ tbboot resetlogs


listener port = 8629


change core dump dir to /home/tibero/tibero7/bin/prof Tibero 7


TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.


Tibero instance started up (NORMAL RESETLOGS mode).


$ tbsql tibero/tmax


tbSQL 7


TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.


Connected to Tibero.


SQL> select * from t1;


C1
------
00011

1 row selected.

취소 기반 불완전 복구

ARCHIVE LOG 모드 운영상태에서 데이터 파일이 삭제된 경우 Archive 파일을 이용하여 명시적으로 복구합니다.

  • 장애 상황

$ tbdown
$ cp –R /home/tibero/tbdata /home/tibero/tbdata_bak


$ tbboot


listener port = 8629


change core dump dir to /home/tibero/tibero7/bin/prof Tibero 7


TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.


Tibero instance started up (NORMAL mode).


$ tbsql sys/tibero tbSQL 7


TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.


Connected to Tibero.


SQL> CREATE TABLE T1 (C1 VARCHAR(5)) TABLESPACE MY_FILE001;
Table 'T1' created.


SQL> INSERT INTO T1 (C1) VALUES ('00011');
1 row inserted.


SQL> COMMIT;
Commit completed.


SQL> select * from t1;


C1

00011


1 row selected.


SQL> ALTER SYSTEM SWITCH LOGFILE;
System altered.


SQL> col name format a40;
SQL> select name, sequence# from v$archived_log order by sequence#;


NAME	                                SEQUENCE#
------------------------------------    -----------
home/tibero/tbarch/log-t0-r0-s1.arc	1


1 row selected.


SQL> exit 
Disconnected.

$ tbdown
Tibero instance terminated (NORMAL mode).


$ rm /home/tibero/tbdata/*.dtf


$ tbboot


listener port = 8629
change core dump dir to /home/tibero/tibero7/bin/prof


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


Tibero 7


TmaxTibero Corporation Copyright (c) 2020-. All rights reserved. 
Tibero instance started up (MOUNT mode).
  • 해결 방안

$ tbdown

Tibero instance terminated (NORMAL mode).

$ cp /home/tibero/tbdata_bak/*.dtf /home/tibero/tbdata
$ tbboot mount

listener port = 8629
change core dump dir to /home/tibero/tibero7/bin/prof

Tibero 7

TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.

Tibero instance started up (MOUNT mode).

$ tbsql sys/tibero

tbSQL 7

TmaxTibero Corporation Copyright (c) 2020-. All rights reserved..

Connected to Tibero.

SQL> ALTER DATABASE RECOVER DATABASE UNTIL CANCEL;
Database altered.

SQL> ALTER DATABASE RECOVER LOGFILE '/home/tibero/tbarch/log-t0-r0-s1.arc'; 
Database altered.

SQL> ALTER DATABASE RECOVER CANCEL;
Database altered.

SQL> exit 
Disconnected.

$ tbdown

Tibero instance terminated (NORMAL mode).

$ tbboot -t resetlogs

listener port = 8629
change core dump dir to /home/tibero/tibero7/bin/prof

Tibero 7

TmaxTibero Corporation Copyright (c) 2020-. All rights reserved..

Tibero instance started up (NORMAL RESETLOGS mode).

$ tbsql sys/tibero

tbSQL 7

TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.

Connected to Tibero. SQL> select * from t1;

C1
------
00011

1 row selected.

복구(TAC)

본 장에서는 TAC의 복구 방법에 대해서 설명합니다.

개요

TAC 복구의 경우 Single DB 복구 절차와 유사하지만 아래와 같은 차이점이 있습니다.

  • 미디어 복구는 한 인스턴스만 MOUNT 모드로 부팅한 후 진행합니다.

  • 모든 NODE의 Archive Log 파일이 복구할 NODE의 LOG_ARCHIVE_DEST 파라미터의 지정된 디렉터리에 모두 위치해야 합니다.

복구 방법

본 절에서는 TAC 취소 기반의 불완전 복구에 대해서 설명합니다. TAC의 완전복구, 시간 기반 불완전 복구, TSN 기반 불완전 복구 절차는 Single DB와 동일하므로 자세한 내용은 “3.3. 복구 방법”을 참고합니다.

다음은 TAC 취소 기반의 불완전 복구 절차입니다.

  1. 취소 기반 복구를 시작합니다.

alter database recover database until cancel;
  1. 복구할 Log 파일을 등록합니다.

alter database recover logfile '<logfile name>';
  1. 등록된 Log 파일을 merge하면서 Log 파일 끝에 도달할 때까지 복구를 진행합니다.

alter database recover continue;
  1. 복구를 중지하려면 아래 명령을 실행합니다.

alter database recover cancel;

취소 기반의 불완전 복구

ARCHIVE LOG 모드 운영상태에서 데이터 파일이 삭제된 경우 Archive 파일로 생성된 것은 Archive 파일을 이용하 여 명시적으로 각각 복구하고, Archive 파일로 생성되지 않은 current 상태인 것은 Redo 파일로 복구합니다.

  • 장애 상황

  1. 테이블 및 데이터 입력(NODE1)

$ tbsql sys/tibero

tbSQL 7

TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.

Connected to Tibero.

SQL> select * from v$log;

THREAD#	GROUP#  SEQUENCE#  BYTES     MEMBERS  ARCHIVED STATUS    FIRST_CHANGE#  FIRST_TIME
------  ------  ---------  --------  -------  -------- --------  -------------- ------------
0	0	7	   52428800  1	      NO       CURRENT	 39873          2023/07/15						
0	1	5	   52428800  1	      YES      INACTIVE  39862          2023/07/15						
0	2	6	   52428800  1	      YES      INACTIVE	 39870          2023/07/15						
1	3	7	   52428800  1	      NO       CURRENT	 39880          2023/07/15						
1	4	5	   52428800  1	      YES      INACTIVE	 39875          2023/07/15						
1	5	6	   52428800  1	      YES      INACTIVE	 39878          2023/07/15						

6 rows selected.

SQL> CREATE TABLE T1 (C1 VARCHAR(5));
Table 'T1' created.


SQL> INSERT INTO T1 (C1) VALUES ('00011');
1 row inserted.


SQL> COMMIT;
Commit completed.


SQL> ALTER SYSTEM SWITCH LOGFILE;
System altered.


SQL> INSERT INTO T1 (C1) VALUES ('00012');
1 row inserted.


SQL> COMMIT;
Commit completed.


SQL> ALTER SYSTEM SWITCH LOGFILE;
System altered.


SQL> exit
Disconnected.


$ tbdown


Tibero instance terminated (NORMAL mode).
  1. 데이터 입력(NODE2)

$ tbsql sys/tibero

tbSQL 7

TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.

Connected to Tibero.

SQL> INSERT INTO T1 (C1) VALUES ('00013');
1 row inserted.

SQL> COMMIT;
Commit completed.

SQL> ALTER SYSTEM SWITCH LOGFILE;
System altered.

SQL> exit 
Disconnected.

$ tbdown

Tibero instance terminated (NORMAL mode)
  1. 데이터 파일 초기화(NODE1)

$ dd if=/dev/zero of=/dev/rdata4g081 bs=8192k 
514+0 records in
512+0 records out


$ dd if=/dev/zero of=/dev/rdata4g082 bs=8192k 
514+0 records in
512+0 records out


$ dd if=/dev/zero of=/dev/rdata4g083 bs=8192k 
514+0 records in
512+0 records out


$ dd if=/dev/zero of=/dev/rdata4g084 bs=8192k 
514+0 records in
512+0 records out


$ dd if=/dev/zero of=/dev/rdata4g085 bs=8192k 
514+0 records in
512+0 records out


$ dd if=/dev/zero of=/dev/rdata4g086 bs=8192k 
514+0 records in
512+0 records out


$ tbboot
change core dump dir to /home/tibero/tibero7/bin/prof 
listener port = 8629

******************************************************** 
Critical Warning : Raise svmode failed. The reason is
TBR-1024:Database needs media recovery:wrong database file(/dev/rdata4g081). 
Current server mode is MOUNT.
********************************************************


Tibero 7


TmaxTibero Corporation Copyright (c) 2020-. All rights reserved. 
Tibero instance started suspended at MOUNT mode.
  • 해결 방안

  1. 백업된 파일로 데이터 파일 복구(NODE1)

$ dd if=/data1/tstac1/bak/system001.dtf of=/dev/rdata4g081 bs=8192k 
512+0 records in
512+0 records out


$ dd if=/data1/tstac1/bak/usr001.dtf of=/dev/rdata4g082 bs=8192k 
512+0 records in
512+0 records out


$ dd if=/data1/tstac1/bak/temp001.dtf of=/dev/rdata4g083 bs=8192k 
512+0 records in
512+0 records out


$ dd if=/data1/tstac1/bak/undo001.dtf of=/dev/rdata4g084 bs=8192k 
512+0 records in
512+0 records out


$ dd if=/data1/tstac1/bak/undo002.dtf of=/dev/rdata4g086 bs=8192k 
512+0 records in
512+0 records out


$ dd if=/data1/tstac1/bak/apm_ts.dtf of=/dev/rdata4g085 bs=8192k 
512+0 records in
512+0 records out
  1. NODE2의 Archive Log 파일을 NODE1으로 전송

ftp> ls -rlt
200 PORT command successful.
150 Opening data connection for /bin/ls. total 416


-rw------- 1 tstac2	tsteam 211456 Jun 22 12:33 log-t1-r0-s7.arc


226 Transfer complete. 
ftp> bi
200 Type set to I. 
ftp> ha
Hash mark printing on (1024 bytes/hash mark).
ftp> mget *.arc
mget log-t1-r0-s7.arc? y
200 PORT command successful.
150 Opening data connection for log-t1-r0-s7.arc (211456 bytes). 
################################################################
226 Transfer complete.
211456 bytes received in 0.003092 seconds (6.679e+04 Kbytes/s) 
local: log-t1-r0-s7.arc remote: log-t1-r0-s7.arc
  1. 취소 기반 불완전 복구 수행

    1. Log 파일 확인

$ tbboot
change core dump dir to /home/tibero/tibero7/bin/prof listener port = 8629

********************************************************
*Critical Warning : Raise svmode failed. The reason is
*TBR-1024 : Database needs media recovery: file restored(/dev/rdata4g081).
*Current server mode is MOUNT.
********************************************************


Tibero 7


TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.


Tibero instance started suspended at MOUNT mode.


$ tbsql sys/tibero


tbSQL 7


Tibero Corporation Copyright © 2020-. All rights reserved.


Connected to Tibero.


SQL> select * from v$log;

THREAD#	GROUP#  SEQUENCE#  BYTES     MEMBERS  ARCHIVED STATUS    FIRST_CHANGE#  FIRST_TIME
------  ------  ---------  --------  -------  -------- --------  -------------- ------------
0	0	7	   52428800  1	      YES      CURRENT	 39873          2023/07/15						
0	1	8	   52428800  1	      YES      INACTIVE	 41124          2023/07/15						
0	2	9	   52428800  1	      NO       INACTIVE	 41133          2023/07/15						
1	3	7	   52428800  1	      YES      CURRENT	 39980          2023/07/15						
1	4	8	   52428800  1	      NO       INACTIVE	 41149          2023/07/15						
1	5	6	   52428800  1	      UES      INACTIVE	 39878          2023/07/15						

6 rows selected.

SQL> select * from v$archive_dest_files;

NAME                                        THREAD# SEQUENCE# FIRST_CHANGE# FIRST_TIME NEXT_CHANGE# RESETLOGS_CHANGE# RESETLOGS_TIME
-----------------------------------------   ------- --------- ------------- ---------- ------------ ----------------- ---------------
/home/tibero/tbdata/arch/log-t0-r0-s7.arc   0	    7	      39873         2023/07/15 41124	    0
/home/tibero/tbdata/arch/log-t0-r0-s8.arc   0	    8	      41124         2023/07/15 41133	    0
/home/tibero/tbdata/arch/log-t0-r0-s7.arc   1	    7	      39980         2023/07/15 41149	    0

3 rows selected.

SQL> select * from v$logfile;


GROUP#   STATUS_TYPE	MEMBER 
-------  ------------   ---------------------------
0	 ONLINE		/dev/rdata1g123
1	 ONLINE		/dev/rdata1g124
2	 ONLINE		/dev/rdata1g125
3	 ONLINE		/dev/rdata1g126
4	 ONLINE		/dev/rdata1g127
5	 ONLINE		/dev/rdata1g128

6 rows selected.

b. 취소 기반 복구시작

SQL> ALTER DATABASE RECOVER DATABASE UNTIL CANCEL;
Database altered.

c. 복구할 Log 파일 등록 및 복구 진행

SQL> ALTER DATABASE RECOVER LOGFILE '/data1/tstac1/tbdata/arch/log-t0-r0-s7.arc';
Database altered.

SQL> ALTER DATABASE RECOVER LOGFILE '/data1/tstac1/tbdata/arch/log-t1-r0-s7.arc'; 
Database altered.

SQL> ALTER DATABASE RECOVER CONTINUE;
Database altered.


SQL> ALTER DATABASE RECOVER LOGFILE '/data1/tstac1/tbdata/arch/log-t0-r0-s8.arc'; D
atabase altered.

SQL> ALTER DATABASE RECOVER CONTINUE;
Database altered.


SQL> ALTER DATABASE RECOVER LOGFILE '/dev/rdata1g125';
Database altered.


SQL> ALTER DATABASE RECOVER CONTINUE;
Database altered.

d. 취소 기반 복구 종료

SQL> ALTER DATABASE RECOVER CANCEL;
Database altered.

e. 후처리

SQL> exit 
Disconnected.

$ tbdown


Tibero instance terminated (NORMAL mode).


$ tbboot -t resetlogs


change core dump dir to /home/tibero/tibero7/bin/prof


listener port = 8629


Tibero 7


TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.


Tibero instance started up (NORMAL RESETLOGS mode).


$ tbsql sys/tibero


tbSQL 7


TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.
Connected to Tibero.


SQL> select * from t1;


C1
-------
00011
00012
00013


3 rows selected.

Appendix A. TAC 온라인 백업본 Single 구성

본 장에서는 TAC 온라인 백업본으로 Single 환경 구성과 구성 방법에 대해서 설명합니다.

환경 구성

다음과 같이 온라인 백업 및 데이터 생성합니다.

  • NODE1

    1. 데이터 파일 및 컨트롤 파일을 백업한다.

$ tbsql sys/tibero


tbSQL 7


TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.


Connected to Tibero.


SQL> set line 200
SQL> col group# for 999 SQL> col member for a50 SQL> col SEQ# for 999 SQL> col MB for 999
SQL> select a.group#, a.member, b.bytes/1024/1024 "MB", b.archived "ARC",
b.sequence# "SEQ#", b.status from v$logfile a, v$log b where a.group#=b.group# order by 1;



GROUP#	MEMBER	          MB	ARC	SEQ#	STATUS
------  ---------------   ----  ----    -----   ---------
0	/dev/rdata1g123	  50	NO	 1	CURRENT
1	/dev/rdata1g124	  50	NO      -1	UNUSED
2	/dev/rdata1g125	  50	NO	-1	UNUSED
3	/dev/rdata1g126	  50	NO	 1	CURRENT
4	/dev/rdata1g127	  50	NO	-1	UNUSED
5	/dev/rdata1g128	  50	NO	-1	UNUSED

6 rows selected.


SQL> alter database begin backup;


Database altered.


SQL> !dd if=/dev/rdata4g081 of=/data1/tstac1/bak/system001.dtf bs=8192k 
512+0 records in
512+0 records out

SQL> !dd if=/dev/rdata4g082 of=/data1/tstac1/bak/usr001.dtf bs=8192k 512+0 records in
512+0 records out


SQL> !dd if=/dev/rdata4g084 of=/data1/tstac1/bak/undo001.dtf bs=8192k 
512+0 records in
512+0 records out


SQL> !dd if=/dev/rdata4g086 of=/data1/tstac1/bak/undo002.dtf bs=8192k 
512+0 records in
512+0 records out


SQL> !dd if=/dev/rdata4g085 of=/data1/tstac1/bak/apm_ts.dtf bs=8192k 
512+0 records in
512+0 records out


SQL> alter database end backup; 
Database altered.

SQL> ALTER DATABASE BACKUP CONTROLFILE TO TRACE AS
'/home/tibero/bak/c1.sql' REUSE RESETLOGS;


Database altered.

  1. 데이터를 생성합니다.

SQL> CREATE TABLE T1 (C1 VARCHAR(5));
Table 'T1' created.


SQL> INSERT INTO T1 (C1) VALUES ('00011');
1 row inserted.


SQL> COMMIT;
Commit completed.


SQL> ALTER SYSTEM SWITCH LOGFILE;
System altered.


SQL> INSERT INTO T1 (C1) VALUES ('00012');
1 row inserted.


SQL> COMMIT;
Commit completed.

  1. Archive Log 파일을 생성합니다.

복구할 때 Current Redo가 없는 상태이므로 Archive 파일이 어디까지 있는지에 따라 복구된 내용이 달라질 수 있기 때문에 추가적으로 Archive Log 파일을 생성합니다.

SQL> ALTER SYSTEM SWITCH LOGFILE;
System altered.


SQL> /
System altered.


SQL> /
System altered.

  • NODE2

  1. 데이터를 생성합니다.

$ tbsql sys/tibero


tbSQL 7


TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.


Connected to Tibero.


SQL> INSERT INTO T1 (C1) VALUES ('00013');
1 row inserted.


SQL> COMMIT;
Commit completed.

  1. Archive Log 파일을 생성합니다.

복구할 때 Current Redo가 없는 상태이므로 Archive 파일이 어디까지 있는지에 따라 복구된 내용이 달라질 수 있기 때문에 추가적으로 Archive Log 파일을 생성합니다.

SQL> ALTER SYSTEM SWITCH LOGFILE;
System altered.


SQL> /
System altered.


SQL> /
System altered.

구성 방법

다음은 TAC 온라인 백업본 환경을 구성하는 방법에 대한 설명입니다.

  1. 엔진을 설치한다. 설치에 대한 자세한 내용은 "Tibero 설치 안내서"를 참고합니다.

  2. $TB_SID.tip에 Tibero parameter 설정을 변경합니다.

  • dest가 명시된 파라미터 경로 수정

CONTROL_FILES="/home/tibero/tbdata/tac1/c1.ctl" 
DB_CREATE_FILE_DEST="/home/tibero/tbdata" 
LOG_ARCHIVE_DEST="/home/tibero/tbdata/arch"

  • TAC 관련 파라미터 제거

#CLUSTER_DATABASE=Y #THREAD=0 
#UNDO_TABLESPACE=UNDO0 
#CM_CLUSTER_MODE=ACTIVE_SHARED 
#CM_PORT=58631 
#LOCAL_CLUSTER_ADDR=10.10.1.1 
#LOCAL_CLUSTER_PORT=58632
#CM_FILE_NAME=/dev/rdata1g122

  1. 데이터 파일, Archive Log 파일, 컨트롤 파일 생성 구문으로 Single 환경을 구성합니다. a. Single 서버 복사

--Online으로 백업받은 데이터 파일을 Single 서버로 복사
$ cp /data1/tstac1/bak/*.dtf /home/tibero/tbdata


--백업받은 컨트롤 파일을 Single 서버로 복사
$ cp /data1/tstac1/bak/c1.sql /home/tibero/tbdata


--NODE1, NODE2의 Archive 파일을 Single 서버로 복사
$ cp /data1/tstac1/tbdata/arch/*.arc /home/tibero/tbdata/arch


...(ftp 접속절차는 생략) 
ftp> bi
200 Type set to I. 
ftp> ha
Hash mark printing on (1024 bytes/hash mark). 
ftp> prompt off
Interactive mode off.
ftp> mget *.arc
200 PORT command successful.
150 Opening data connection for log-t1-r0-s1.arc (77312 bytes). 
############################################################################
226 Transfer complete.
77312 bytes received in 0.001275 seconds (5.922e+04 Kbytes/s) 
local: log-t1-r0-s1.arc remote: log-t1-r0-s1.arc
200 PORT command successful.
150 Opening data connection for log-t1-r0-s2.arc (1024 bytes). 
##
226 Transfer complete.
1024 bytes received in 5.8e-05 seconds (1.724e+04 Kbytes/s) 
local: log-t1-r0-s2.arc remote: log-t1-r0-s2.arc
200 PORT command successful.
150 Opening data connection for log-t1-r0-s3.arc (512 bytes). 
#
226 Transfer complete.
512 bytes received in 4.9e-05 seconds (1.02e+04 Kbytes/s)
local: log-t1-r0-s3.arc remote: log-t1-r0-s3.arc
200 PORT command successful.
150 Opening data connection for log-t1-r0-s4.arc (512 bytes). 
#
226 Transfer complete.
512 bytes received in 5.2e-05 seconds (9615 Kbytes/s) 
local: log-t1-r0-s4.arc remote: log-t1-r0-s4.arc
ftp> bye
221 Goodbye.


$ ls -rlt /home/tibero/tbdata/arch 
total 43112
-rw-------	1	tibero	dba	512 Jul 15 11:53 log-t0-r0-s5.arc
-rw-------	1	tibero	dba	512 Jul 15 11:53 log-t0-r0-s4.arc
-rw-------	1	tibero	dba	2560 Jul 15 11:53 log-t0-r0-s3.arc
-rw-------	1	tibero	dba	1536 Jul 15 11:53 log-t0-r0-s2.arc
-rw-------	1	tibero	dba	21959680 Jul 15 11:53 log-t0-r0-s1.arc
-rw-r--r--	1	tibero	dba	512 Jul 15 11:54 log-t1-r0-s4.arc
-rw-r--r--	1	tibero	dba	512 Jul 15 11:54 log-t1-r0-s3.arc
-rw-r--r--	1	tibero	dba	1024 Jul 15 11:54 log-t1-r0-s2.arc
-rw-r--r--	1	tibero	dba	77312 Jul 15 11:54 log-t1-r0-s1.arc

b. 컨트롤 파일 재생성

$ tbboot nomount


listener port = 8629


change core dump dir to /home/tibero/tibero7/bin/prof


Tibero 7


TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.


Tibero instance started up (NOMOUNT mode).


$ tbsql sys/tibero


tbSQL 7


TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.


Connected to Tibero.


--백업받은 컨트롤 파일 스크립트에서 Redo 파일, 데이터 파일 경로
--수정 후 컨트롤 파일 재생성
SQL> !vi /home/tibero/tbdata/c1.sql


CREATE CONTROLFILE REUSE DATABASE "tibero" LOGFILE
GROUP 0 '/home/tibero/tbdata/redo01.redo' SIZE 50M, 
GROUP 1 '/home/tibero/tbdata/redo02.redo' SIZE 50M,
GROUP 2 '/home/tibero/tbdata/redo03.redo' SIZE 50M 
RESETLOGS
DATAFILE
'/home/tibero/tbdata/system001.dtf', 
'/home/tibero/tbdata/undo001.dtf', 
'/home/tibero/tbdata/usr001.dtf', 
'/home/tibero/tbdata/undo002.dtf', 
'/home/tibero/tbdata/apm_ts.dtf' 
ARCHIVELOG
MAXLOGFILES 100
MAXLOGMEMBERS 8
MAXDATAFILES 1024 
CHARACTER SET MSWIN949
NATIONAL CHARACTER SET UTF16
;
--ALTER DATABASE MOUNT
---- Adding Logfiles is required in MOUNT mode.
--ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 3 '/dev/rdata1g126' SIZE 50M reuse;
--ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 4 '/dev/rdata1g127' SIZE 50M reuse;
--ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 5 '/dev/rdata1g128' SIZE 50M reuse;
--ALTER DATABASE ENABLE PRIVATE THREAD 1;
---- Recovery is required in MOUNT mode.
--ALTER DATABASE RECOVER AUTOMATIC;


--ALTER DATABASE OPEN RESETLOGS;


---- Adding Tempfiles is required in OPEN mode.
-- ALTER TABLESPACE TEMP ADD TEMPFILE '/data1/tstac1/bak/temp001.dtf'
-- SIZE 512M REUSE AUTOEXTEND OFF ;


SQL> @/home/tibero/tbdata/c1.sql


Control File created.


File finished.


SQL> exit 
Disconnected.

$ tbdown


Tibero instance terminated (NORMAL mode).

c. 불완전 복구 수행

다음은 TSN 기반으로 불완전 복구를 수행한 예입니다.

$ tbboot mount

listener port = 8629
change core dump dir to /home/tibero/tibero7/bin/prof Tibero 7

TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.

Tibero instance started up (MOUNT mode).

$ tbsql sys/tibero tbSQL 7

TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.

Connected to Tibero.

SQL> select * from v$archive_dest_files;

NAME                                       THREAD#  SEQUENCE#  FIRST_CHANGE#  FIRST_TIME  NEXT_CHANGE#  RESETLOGS_CHANGE# RESETLOGS_TIME
-----------------------------------------  -------  ---------  -------------  ----------  ------------  ----------------- --------------
/home/tibero/tbdata/arch/log-t0-r0-s1.arc  0	    1	       0	      2023/07/15  14135	        0
/home/tibero/tbdata/arch/log-t0-r0-s2.arc  0	    2	       14135	      2023/07/15  14140	        0
/home/tibero/tbdata/arch/log-t0-r0-s3.arc  0	    3	       14140	      2023/07/15  14604	        0
/home/tibero/tbdata/arch/log-t0-r0-s4.arc  0	    4	       14604	      2023/07/15  14606	        0
/home/tibero/tbdata/arch/log-t0-r0-s5.arc  0	    5	       14606	      2023/07/15  14609	        0
/home/tibero/tbdata/arch/log-t1-r0-s1.arc  1	    1	       0	      2023/07/15  14585	        0
/home/tibero/tbdata/arch/log-t1-r0-s2.arc  1	    2	       14585	      2023/07/15  14617	        0
/home/tibero/tbdata/arch/log-t1-r0-s3.arc  1	    3	       14617	      2023/07/15  14620	        0
/home/tibero/tbdata/arch/log-t1-r0-s4.arc  1	    4	       14620	      2023/07/15  14622	        0

9 rows selected.


--복구할 때 사용 된 TSN 번호는 각 노드의 마지막 Archive Log 파일에서
--TSN - 1 값 중 작은 값(예 : min(NODE1, NODE2) = min(14609-1, 14622-1) = 14608)
SQL> alter database recover automatic database until change 14608; 
Database altered.

SQL> exit 
Disconnected.

$ tbdown


Tibero instance terminated (NORMAL mode).


$ tbboot -t resetlogs
listener port = 8629


change core dump dir to /home/tibero/tibero7/bin/prof Tibero 7


TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.


Tibero instance started up (NORMAL RESETLOGS mode).


$ tbsql sys/tibero


tbSQL 7


TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.


Connected to Tibero.

d. temp 파일 생성

백업한 컨트롤 파일 스크립트내의 주석 스크립트 부분을 활용하여 temp 파일을 생성합니다.

SQL> ALTER TABLESPACE TEMP ADD TEMPFILE '/home/tibero/tbdata/temp001.dtf' 
SIZE 512M REUSE AUTOEXTEND OFF ;
Tablespace 'TEMP' altered.


SQL> select * from t1; 
C1
------
00011
00012
00013


3 rows selected.

Last updated