본문 바로가기
Tibero/Tibero6

신규 기능 - OFFLINE FOR DROP

by dan.de.lion 2016. 11. 3.

신규 기능 - OFFLINE FOR DROP


OFFLINE FOR DROP

테스트 환경

OS : OEL release 7.2
Tibero : 6 FS04

OFFLINE FOR DROP


Permanent 테이블스페이스 중 비시스템 테이블스페이스의 데이터 파일이 손상된 경우 해당 테이블스페이스를 제거하는 방법이다.
즉, 데이터를 복구할 수 없는 경우 해당 테이블스페이스에 포함된 모든 데이터의 복구를 포기하고 데이터베이스를 복구한다.
데이터를 포기하는 게 의아할 수 있으나 경우에 따라 필수 불가결할 수 있으며 복구 방안에 대한 선택의 폭이 넓어진다.
즉, 하이 리스크, 하이 리턴의 관계이다.
다음과 같은 경우 사용을 고려해볼 만하다.

  • 대용량 데이터베이스의 경우 백업에 소요되는 시간적 공간적인 리소스를 줄일 수 있다.
    1. 로그성 테이블 등의 경우 의사결정을 통해 DBMS 장애시 복구에서 제외한다.
    2. 해당 테이블스페이스를 제외하고 백업을 수행한다.
      (일부 테이블스페이스가 제외되므로 백업용량이 감소하며 따라서 백업시간도 단축된다.)
    3. 향후 장애 발생시 해당 기능을 통해 백업에서 제외된 테이블스페이스의 복구를 포기하고 DBMS 기동할 수 있다.
  • 실시간 서비스가 중요한 DBMS의 경우 복구시간을 단축시켜줄 수 있다.
    1. DBMS 장애발생으로 백업본을 통한 복구 필요시 의사결정을 통해 일부 테이블스페이스의 복구를 포기한다.
      (즉, 과거 이력이 현재의 서비스에 미치는 영향이 해당 장애로 인한 영향에 비하여 미미한 경우)
    2. 복원(Restore)단계에서 테이블스페이스가 제외되므로 복원시간이 단축된다.
    3. 또한, Archive log 및 Redo log 적용에서 해당 테이블스페이스가 제외되므로 복구시간 또한 단축될 여지가 있다.
  • DBMS 복구가 필요하나 백업본의 일부 파일이 손상된 경우 해당 테이블스페이스를 제외하고 복구가 가능하다.
  • 사용자의 실수(잘못된 DDL, DML 수행)로 인한 일부테이블의 불완전 복구시 해당 테이블스페이스를 제외하여 복구가 가능하다.
    (이건 나중에 해보자.)

기능 테스트


Test용 Tablespace 생성


  • 기존 데이터베이스에 테스트용 테이블스페이스를 2개 추가해 준다.
  • 하나는 살리고 하나는 버릴(OFFLINE FOR DROP) 예정이다.
  • DBA 권한을 가진 SYS계정에서 수행한다.(권한만 있으면 크게 상관은 없다.)
SQL> CREATE TABLESPACE TEST_TS1
     DATAFILE 'test_ts1.dbf' SIZE 100M ;

Tablespace 'TEST_TS1' created.

-- TEST_TS2 Tablespace 복구 제외(제거)
SQL> CREATE TABLESPACE TEST_TS2
     DATAFILE 'test_ts2.dbf' SIZE 100M ;

Tablespace 'TEST_TS2' created.

Archivelog 모드 설정


  • 실제 OFFLINE FOR DROP과 Archivelog 모드의 연관성은 없다.
  • 다만, 테스트에서 다음 단계의 Online backup을 진행하기 위해 설정한다.
  • $TB_HOME/config/$TB_SID.tip 파일에 LOG_ARCHIVE_DEST 파라미터에 Archive log 경로를 설정한다.
(전략)
DB_NAME=tb6FS04
#_LSNR_SPECIAL_PORT=8629
LISTENER_PORT=16620
CONTROL_FILES="/tibero/tb6dataFS04/c1.ctl"
DB_CREATE_FILE_DEST="/tibero/tb6dataFS04"
#LOG_ARCHIVE_DEST=Archive log 경로
LOG_ARCHIVE_DEST="/tibero/tb6archFS04"
#CERTIFICATE_FILE="/tibero/tb6FS04/config/svr_wallet/tb6FS04.crt"
#PRIVKEY_FILE="/tibero/tb6FS04/config/svr_wallet/tb6FS04.key"
#WALLET_FILE="/tibero/tb6FS04/config/svr_wallet/WALLET"
#EVENT_TRACE_MAP="/tibero/tb6FS04/config/event.map"

MAX_SESSION_COUNT=20

TOTAL_SHM_SIZE=512M
MEMORY_TARGET=1G
  • 데이터베이스를 Mount 모드로 기동한다.
  • Archivelog 모드는 데이터베이스 단위로 설정되므로 다중화되어 있는 경우 모두 내리고 1개 노드만 Mount 모드로 기동한다.
$ tbdown

Tibero instance terminated (NORMAL mode).

$ tbboot mount
Listener port = 16620

Tibero 6

TmaxData Corporation Copyright (c) 2008-. All rights reserved.
Tibero instance started up (MOUNT mode).
  • SYS 계정으로 접속한다.
$ tbsql sys/tibero

tbSQL 6

TmaxData Corporation Copyright (c) 2008-. All rights reserved.

Connected to Tibero.

SQL>
  • Archivelog 모드를 설정하고 데이터베이스를 OPEN 한다.
SQL> ALTER DATABASE ARCHIVELOG ;

Database altered.

SQL> ALTER DATABASE OPEN ;

Database altered.

SQL>
  • 정상적으로 Archive log가 생성되는지 확인한다.
SQL> ALTER SYSTEM SWITCH LOGFILE;

System altered.

SQL> exit
Disconnected.
$ ls -arlt /tibero/tb6archFS04 #Archivelog 경로
-rw-------   1 tibero dba  4789760 Mar 10 15:39 log-t0-r0-s74.arc

-

전체 백업(Online backup)


  • 정확하게는 TEST_TS2 테이블스페이스는 제외하고 받는다.
  • SYS 계정에서 BEGIN BACKUP을 수행하여 백업을 시작한다.
SQL> ALTER DATABASE BEGIN BACKUP ;

Database altered.

SQL> SELECT D.FILE#, B.STATUS, D.NAME
       FROM V$BACKUP   B,
            V$DATAFILE D
      WHERE D.FILE# = B.FILE#;

     FILE# STATUS     NAME
---------- ---------- --------------------------------------------
         0 ACTIVE     /tibero/tb6dataFS04/system001.dtf
         1 ACTIVE     /tibero/tb6dataFS04/undo001.dtf
         2 ACTIVE     /tibero/tb6dataFS04/usr001.dtf
         3 ACTIVE     /tibero/tb6dataFS04/tpr_ts.dtf
         4 ACTIVE     /tibero/tb6dataFS04/test_ts1.dbf
         5 ACTIVE     /tibero/tb6dataFS04/test_ts2.dbf  -- 백업 제외

6 rows selected.
  • OS의 cp 명령으로 백업을 수행한다.
$ cp $HOME/tb6dataFS04/system001.dtf       $HOME/backup/.
$ cp $HOME/tb6dataFS04/undo001.dtf         $HOME/backup/.
$ cp $HOME/tb6dataFS04/usr001.dtf          $HOME/backup/.
$ cp $HOME/tb6dataFS04/tpr_ts.dtf          $HOME/backup/.
$ cp $HOME/tb6dataFS04/test_ts1.dbf        $HOME/backup/.
$ ls -ar1t $HOME/backup/
..
system001.dtf
undo001.dtf
usr001.dtf
tpr_ts.dtf
test_ts1.dbf
.
  • SYS 계정에서 END BACKUP을 수행하여 백업을 종료한다.
SQL> ALTER DATABASE END BACKUP ;

Database altered.

SQL> SELECT D.FILE#, B.STATUS, D.NAME
       FROM V$BACKUP   B,
            V$DATAFILE D
      WHERE D.FILE# = B.FILE#;

     FILE# STATUS     NAME
---------- ---------- --------------------------------------------
         0 NOT ACTIVE /tibero/tb6dataFS04/system001.dtf
         1 NOT ACTIVE /tibero/tb6dataFS04/undo001.dtf
         2 NOT ACTIVE /tibero/tb6dataFS04/usr001.dtf
         3 NOT ACTIVE /tibero/tb6dataFS04/tpr_ts.dtf
         4 NOT ACTIVE /tibero/tb6dataFS04/test_ts1.dbf
         5 NOT ACTIVE /tibero/tb6dataFS04/test_ts2.dbf  -- 백업 제외

6 rows selected.

Test Table 생성


  • Tibero에 사용자 계정으로 Test를 위한 Table을 생성한다.
  • 본 테스트에서는 기본 계정인 TIBERO계정을 사용한다.
$ tbsql tibero/tmax

tbSQL 6

TmaxData Corporation Copyright (c) 2008-. All rights reserved.

Connected to Tibero.

SQL>
  • Test Table의 데이터는 DBA_OBJECTS라는 Data Dictionary1Static View2의 내용을 복사하여 사용한다.
SQL> DROP TABLE TEST_TBL1;
TBR-7071: Schema object 'TIBERO.TEST_TBL1' was not found or is invalid.

SQL> DROP TABLE TEST_TBL2;
TBR-7071: Schema object 'TIBERO.TEST_TBL2' was not found or is invalid.

SQL> CREATE TABLE TEST_TBL1
     TABLESPACE TEST_TS1
     AS
     SELECT * FROM DBA_OBJECTS;

Table 'TEST_TBL1' created.

SQL> CREATE TABLE TEST_TBL2 -- TEST_TBL2 Table 복구 제외(제거)
     TABLESPACE TEST_TS2
     AS
     SELECT * FROM DBA_OBJECTS;

Table 'TEST_TBL2' created.

SQL> BEGIN
     FOR A IN 1..8
     LOOP
       INSERT INTO TEST_TBL1
       SELECT * FROM TEST_TBL1 ;
       COMMIT ;
     END LOOP;
     END;
     /

PSM completed.

SQL> BEGIN
     FOR A IN 1..8
     LOOP
       INSERT INTO TEST_TBL2
       SELECT * FROM TEST_TBL2 ;
       COMMIT ;
     END LOOP;
     END;
     /

PSM completed.

SQL> SELECT COUNT(*) FROM TEST_TBL1;

  COUNT(*)
----------
    796416

1 row selected.

SQL> SELECT COUNT(*) FROM TEST_TBL2;

  COUNT(*)
----------
    796672

1 row selected.

SQL>

장애 발생


  • 모든 Datafile을 삭제한다.
  • 반드시 모든 Datafile을 삭제할 필요는 없으며 일부 Datafile만 장애가 발생하는 경우도 복구 과정은 별반 다르지 않다.
rm $HOME/tb6dataFS04/system001.dtf
rm $HOME/tb6dataFS04/undo001.dtf
rm $HOME/tb6dataFS04/usr001.dtf
rm $HOME/tb6dataFS04/tpr_ts.dtf
rm $HOME/tb6dataFS04/test_ts1.dbf
rm $HOME/tb6dataFS04/test_ts2.dbf
  • Tibero DBMS를 재기동 한다.
  • 기동시 장애가 발생된다.
  • Datafile을 Open 할수 없으므로 MOUNT3 모드로 기동된다.
$ tbdown

Tibero instance terminated (NORMAL mode).

$ tbboot
Listener port = 16620

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


Tibero 6

TmaxData Corporation Copyright (c) 2008-. All rights reserved.
Tibero instance started suspended at MOUNT mode.
$
  • 장애가 발생된 파일에 대해 확인 한다.
tbsql sys/tibero

tbSQL 6

TmaxData Corporation Copyright (c) 2008-. All rights reserved.

Connected to Tibero.

SQL>
SQL> SELECT * FROM V$RECOVER_FILE ;

     FILE# ONLINE  ERROR                   CHANGE# TIME
---------- ------- -------------------- ---------- --------------------------------
         0 ONLINE  open failed                   0
         1 ONLINE  open failed                   0
         2 ONLINE  open failed                   0
         3 ONLINE  open failed                   0
         4 ONLINE  open failed                   0
         5 ONLINE  open failed                   0

6 rows selected.

SQL>

복구 수행(OFFLINE FOR DROP)


  • DBMS를 종료시킨 후 Datafile을 Restore(복원)한다.
$ tbdown

Tibero instance terminated (NORMAL mode).

$ cp $HOME/backup/* $HOME/tb6dataFS04/. #백업 받은 파일을 복사한다. test_ts2.dbf는 제외된다.
$ tbboot
Listener port = 16620

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


Tibero 6

TmaxData Corporation Copyright (c) 2008-. All rights reserved.
Tibero instance started suspended at MOUNT mode.
$
  • Datafile의 상태를 확인한다.
tbsql sys/tibero

tbSQL 6

TmaxData Corporation Copyright (c) 2008-. All rights reserved.

Connected to Tibero.

SQL>
SQL> SELECT * FROM V$RECOVER_FILE ;

     FILE# ONLINE  ERROR                   CHANGE# TIME
---------- ------- -------------------- ---------- --------------------------------
         0 ONLINE  file restored            164768 20170310
         1 ONLINE  file restored            164768 20170310
         2 ONLINE  file restored            164768 20170310
         3 ONLINE  file restored            164768 20170310
         4 ONLINE  file restored            164768 20170310
         5 ONLINE  open failed                   0

6 rows selected.

SQL>
  • 5번 Datafile(test_ts2.dbf)를 제외시킨 후 복구를 수행한다.
SQL> ALTER DATABASE DATAFILE 5 OFFLINE FOR DROP ;

Database altered.

SQL> ALTER DATABASE RECOVER AUTOMATIC ;

Database altered.

SQL>
  • DBMS를 재기동하여 정상 복구 여부를 확인한다.
$ tbdown

Tibero instance terminated (NORMAL mode).

$ tbboot
Listener port = 16620

Tibero 6

TmaxData Corporation Copyright (c) 2008-. All rights reserved.
$ tbsql tibero/tmax

tbSQL 6

TmaxData Corporation Copyright (c) 2008-. All rights reserved.

Connected to Tibero.

SQL>
SQL> SELECT COUNT(*) FROM TEST_TBL1;

  COUNT(*)
----------
    796416

1 row selected.

SQL> SELECT COUNT(*) FROM TEST_TBL2;
TBR-24035: Unable to read file 5 at this time.

SQL>
  • 제외된 Datafile을 포함한 테이블스페이스를 삭제한다.
SQL> CONN sys/tibero
Connected to Tibero.

SQL> DROP TABLESPACE TEST_TS2 INCLUDING CONTENTS AND DATAFILES ;

Tablespace 'TEST_TS2' dropped.

SQL>

  1. Data Dictionary: 데이터 사전. DBMS 안에서 데이터베이스에 대한 정보를 제공하는 데이터(Meta Data)를 저장, 제공하는 영역을 의미한다.
  2. Static View: Static Data Dictionary View. 정적 뷰(반대. Dynamic View). Data Dictionary를 조회 할 수 있는 View(뷰)로 Data Dictionary가 변경 될 때(예: 테이블 생성 또는 사용자 권한 부여)만 변경되기 때문에 정적이라고 한다.
  3. MOUNT: Tibero DBMS의 기동 단계 중 하나로 Oracle의 MOUNT 단계와 동일하다. 기동 및 종료 단계와 관련하여서는 추후 따로 작성하겠다.

'Tibero > Tibero6' 카테고리의 다른 글

신규 기능 - Recursive With  (0) 2017.05.29
신규 기능 - 원격 저장소를 가진 실체화 뷰  (0) 2017.05.22
신규기능 - Partition Exchange  (0) 2017.01.05
신규기능 - BINARY TIP  (0) 2017.01.03
신규 기능 - Listener Multi-port  (0) 2016.11.10

댓글