문서유형ㅣ기술정보
분야ㅣ백업/복구
적용제품버전ㅣ7PS02 6FS07
문서번호ㅣTBATI052
개요
백업은 여러 가지 유형의 장애로부터 데이터베이스를 보호하는 것을 뜻합니다.
즉 백업은 시스템 장애가 발생했을 때 복구를 하거나 시스템 작동을 유지하기 위한 절차 또는 기법입니다.
본 문서에서는 티베로 백업 종류와 의미, 수행 방법 등 티베로에서 수행하는 백업에 대한 정보를 안내합니다.
방법
티베로 백업 구분
Tibero는 데이터베이스를 백업하는 방법을 크게 두 가지로 나누어 수행할 수 있습니다.
-
논리적 백업
논리적 백업이란 테이블, 인덱스, Sequence와 같은 데이터베이스의 논리적 단위를 백업하는 것을 뜻합니다.
Tibero에서는 이를 위해 tbExport와 tbImport utility를 제공하고 있습니다.
-
물리적 백업
물리적 백업이란 데이터베이스를 구성하는 물리적인 파일을 백업하는 것이며 운영체제에서 파일 복사 명령으로 백업하는 것을 뜻합니다. 물리적 백업이 필요한 파일에는 데이터 파일과 Archive log 파일이 있습니다.
온라인 로그 파일(=Redo log file)은 NOARCHIVELOG 모드에서 데이터베이스 전체를 백업하여 복구할 경우에만 의미가 있습니다.
티베로 파일별 특징
Tibero의 파일은 컨트롤 파일(Control file), 데이터 파일(Datafile), 임시 파일(Temp file), 로그 파일(Logfile)로 구성됩니다.
각 파일의 특징과 역할에 따른 백업 관련 사항은 다음과 같습니다.
-
컨트롤 파일
컨트롤 파일은 Tibero를 구성하는 모든 파일의 위치와 데이터베이스의 이름 등 데이터베이스의 구조를 저장하는 파일입니다. 특히, Tibero가 사용하는 데이터 파일, 로그 파일 등의 상태 정보가 기록됩니다. 컨트롤 파일은 Tibero를 기동할 때 복구가 필요한 지를 판단하는 데 사용됩니다.
컨트롤 파일은 데이터베이스의 복구에 매우 중요한 파일이므로 다른 물리적 파티션에 여러 개 지정하기를 권장합니다. 여러 개를 유지하면, 한 파티션에 장애가 발생하여 컨트롤 파일을 사용하지 못하더라도 다른 컨트롤 파일을 이용하여 복구할 수 있습니다.
컨트롤 파일은 현재의 데이터베이스를 구성하는 파일에 관한 정보를 담고 있으므로 반드시 최신 것으로 유지해야 합니다.컨트롤 파일의 백업은 현재의 컨트롤 파일 자체(=바이너리 형태)를 백업하는 방식으로 이루어지지 않고, 컨트롤 파일을 생성하는 CREATE CONTROLFILE 문을 백업해 두었다가, 복구가 필요한 경우 백업해 놓은 컨트롤 파일 생성 문을 사용하여 컨트롤 파일을 다시 생성하는 방식으로 이루어집니다.
최신의 컨트롤 파일을 유지하기 위해서는 컨트롤 파일 자체를 백업해 두었다가 데이터베이스에 파일을 추가하거나 변경하는 등 구조 상 변화가 있을 때마다 컨트롤 파일의 생성 문을 백업해야 합니다.
-
데이터 파일
데이터 파일은 Tablespace와 Undo Tablespace에서 정의한 파일로 테이블, 인덱스 등의 데이터베이스 객체를 저장합니다. Tablespace는 한 개 이상의 데이터 파일로 이루어지며, 한 데이터 파일은 하나의 Tablespace에 속합니다.
데이터 파일은 사용자의 데이터가 물리적으로 저장되는 공간이므로 반드시 백업해야 합니다.
-
임시 파일
임시 파일은 데이터베이스가 메모리에서 처리할 수 없는 방대한 양의 데이터를 다루는 경우 임시로 사용하기 위한 공간입니다.
Tibero는 사용자의 질의를 처리하기 위해 정렬 등의 연산을 수행할 때와 임시 테이블(Temporary Table)의 데이터를 저장할 때 데이터 파일을 사용합니다. 데이터 파일은 임시 Tablespace(Temporary Table)에서 만 정의할 수 있고, 임시 Tablespace는 하나 이상의 데이터 파일을 가질 수 있습니다.
임시 파일은 데이터베이스를 구성하는 데이터가 물리적으로 저장되지는 않고 운영 중에 임시로 사용되는 영역이므로 백업할 필요가 없습니다.
-
로그 파일
로그 파일은 로그를 저장하는 파일입니다. 데이터 파일에 기록되는 내용을 시간 순으로 기록하는 파일로써 데이터베이스를 복구할 때 사용합니다. 로그 파일은 운영 중에 순환으로 재 사용 되는 온라인 로그 파일과 재 사용 된 온라인 로그 파일을 보관하는 Archive Log File로 나뉩니다.
ARCHIVELOG 모드로 운영 중일 때만 Archive Log File이 만들어집니다. NOARCHIVELOG 모드에서는 온라인 로그 파일만 사용합니다. NOARCHIVELOG 모드에서는 재 사용 되어 없어진 로그 파일이 있을 수 있으므로 복구할 때 많은 제약이 따른다.
티베로 백업 종류
다음은 Tibero가 제공하는 백업의 종류입니다.
-
모드 별 백업
데이터베이스를 ARCHIVELOG 모드로 운영할 때와 그렇지 않았을 때 사용할 수 있는 백업 방법이 다르다.
-
ARCHIVELOG 모드
온라인 백업 (Online Backup) 또는 Hot backup이라 합니다. 데이터베이스가 운영 중일 때 백업할 수 있습니다. 백업이 가능한 파일은 컨트롤 파일의 생성 문과 데이터 파일, Archive Log File 등이 있습니다.
복구는 백업 된 ARCHIVELOG 파일의 시점에 따라 데이터 파일의 백업 시점 전으로 복구할 수 있습니다.
-
NOARCHIVELOG 모드
오프라인 백업 (Offline Backup) 또는 Cold Backup이라 합니다. 기본적으로 데이터베이스는 NOARCHIVELOG 모드입니다.
데이터베이스를 구성하는 전체 파일은 반드시 Tibero가 정상적으로 종료된 상태에서 백업합니다. 복구는 데이터베이스를 백업 받은 시점으로부터 복구할 수 있습니다.
-
운영 모드에 따른 백업 분류
Consistent 백업: Tibero를 정상적으로 종료한 상태에서 백업하는 방법입니다.
Inconsistent 백업: Tibero의 데이터베이스가 운영 중일 때 백업하거나 정상적으로 종료되지 않은 상태에서
백업하는 방법입니다. NOARCHIVELOG 모드에서는 이 방법을 권장하지 않습니다.
백업 구성 원칙
- 시스템의 모든 RDBMS 데이터를 매일 Full Backup 받는다.
- 서버의 운용 중에 백업 받는 온라인 백업을 원칙으로 합니다.
- 백업 수행 중의 시스템 부하를 최소화하기 위해 가장 업무 부하가 적은 시간에 수행토록 합니다.
- Archive Log File은 데이터 복구 시의 처리 시간 단축과 데이터 성격의 중요성을 감안하여 서버 내의 하드 디스크 상에도 최소 3일치 이상을 보관합니다.
- 매일 백업 시 데이터 뿐만 아니라 Archive Log File도 매일 백업 받는다.
백업 대상 및 수행방법 요약
백업의 대상
백업 대상은 데이터베이스의 data file, control file, parameter file, Archive log file 입니다.
Temp file은 백업 대상에서 제외되면 복구 시 재구성 됩니다.
redo log file은 online 백업 시 백업 대상이 아니다.
수행 방법
-
백업 도구
HITACHI, IBM 등 디스크 벤더에서 제공하는 Disk 백업 Tool을 도입하여 백업의 용이 성과 복구 성공률을 높이기 위한 최적은 인프라를 구축합니다.
BCV백업 (Disk Image Copy)
백업 실행 방법
-
컨트롤 파일의 백업
컨트롤 파일은 물리적인 백업을 지원하지 않습니다. Tibero에서는 컨트롤 파일의 논리적인 백업 만을 지원합니다. 데이터베이스의 구조에 변화가 일어난 경우에는 컨트롤 파일의 생성 문을 백업하는 것이 좋다.
다음은 컨트롤 파일의 생성 문을 tmp 디렉터리에 있는 ctrfile1.sql 파일에 백업하는 예입니다.[예제] 컨트롤 파일 백업
SQL> alter database backup controlfile to trace as 2 '/tmp/ctrlfile1.sql' reuse noresetlogs; Database altered.생성된 ctrlfile1.sql 파일은 다음과 같은 내용을 포함합니다.
[예제] 백업 된 컨트롤 파일의 생성 문
CREATE CONTROLFILE REUSE DATABASE "t" LOGFILE GROUP 0 '/home/tibero/tbdata7/redo001.redo' SIZE 100M, GROUP 1 '/home/tibero/tbdata7/redo011.redo' SIZE 100M, GROUP 2 '/home/tibero/tbdata7/redo021.redo' SIZE 100M NORESETLOGS DATAFILE '/home/tibero/tbdata7/system001.dtf', '/home/tibero/tbdata7/undo001.dtf', '/home/tibero/tbdata7/usr001.dtf', '/home/tibero/tbdata7/tpr_ts.dtf' NOARCHIVELOG MAXLOGFILES 100 MAXLOGMEMBERS 8 MAXDATAFILES 256 CHARACTER SET UTF8 NATIONAL CHARACTER SET UTF8 ; --ALTER DATABASE MOUNT ---- Recovery is required in MOUNT mode. --ALTER DATABASE RECOVER AUTOMATIC; --ALTER DATABASE OPEN ; ---- Adding Tempfiles is required in OPEN mode. -- ALTER TABLESPACE TEMP2 ADD TEMPFILE '/home/tibero/tbdata5_bak/temp002.dtf' -- SIZE 512M REUSE AUTOEXTEND ON NEXT 16M MAXSIZE 30G;NORESETLOGS는 컨트롤 파일의 생성 문에 지정한 대로 만들어집니다. 이 생성 문은 트레이스 파일을 생성한 후 NORESETLOGS를 필요로 할 경우에 사용하며, REDO 로그 파일이 손실 되거나, 불완전 복구를 할 때에는 RESETLOGS로 수정하여 컨트롤 파일을 생성할 때 적용할 수 있습니다.
참고
컨트롤 파일의 생성 문에는 TEMP TABLESPACE을 생성하는 내용이 없습니다. 컨트롤 파일을 생성한 후 Tibero를 기동하면 TEMP TABLESPACE 파일은 존재하지 않습니다. 컨트롤 파일을 새로 생성한 경우라면, 반드시 TEMP TABLESPACE을 추가해야 합니다. 컨트롤 파일 맨 하단에 보면 관련 내용이 주석 처리 되어 있으며 해당 내용으로 새롭게 생성해 주면 됩니다.
생성 문을 이용하여 컨트롤 파일을 재 생성 한다면, $TB_SID.tip 파일에서 지정한 경로 및 파일 명으로 생성이 됩니다.
추가로 MOUNT나 OPEN 상태에서 컨트롤 파일의 목록을 조회하려면 동적 뷰 V$COTROLFILE를 조회합니다.
[예제] 컨트롤 파일 VIEW 조회
SQL> SELECT NAME FROM V$CONTROLFILE; NAME ---------------------------------------------------- /disk1/c1.ctl /disk2/c2.ctl 2 selected.OFFLINE 백업
본 절에서는 Tibero가 정상적으로 종료한 후에 백업하는 방법을 설명합니다.
Consistent 백업을 실행 하기에 앞서 백업할 컨트롤 파일, 데이터 파일, 온라인 로그 파일을 조회합니다.
다음은 MOUNT나 OPEN 상태에서 동적 뷰 V$DATAFILE를 통해 데이터 파일을 조회하는 방법입니다. 여기서 MOUNT는 Tibero의 Instance가 시작된 상태이며, OPEN은 컨트롤 파일에 정의한 모든 파일이 오픈 된 상태를 의미합니다.[예제] 데이터 파일 View 조회
SQL> SELECT NAME FROM V$DATAFILE; NAME -------------------------------------------------------------------------------- /home/tibero/tbdata7/system001.dtf /home/tibero/tbdata7/undo001.dtf /home/tibero/tbdata7/usr001.dtf /home/tibero/tbdata7/syssub_ts.dtf 4 rows selected.다음은 온라인 로그 파일을 MOUNT나 OPEN 상태에서 조회하는 방법입니다.
[예제] 로그 파일 VIEW 조회
SQL> SELECT MEMBER FROM V$LOGFILE; MEMBER -------------------------------------------------------------------------------- /home/tibero/tbdata7/redo001.redo /home/tibero/tbdata7/redo011.redo /home/tibero/tbdata7/redo021.redo 3 rows selected.온라인 로그 파일은 ARCHIVELOG 모드가 아닌 경우에는 백업하지 않는 것이 좋다.
결국 오프라인 백업은 DBMS서비스를 중지하고 파일 hard copy로 백업 받는 것을 말합니다.Online 백업
본 절에서는 Tibero가 운영 중일 때 백업하는 방법을 설명합니다.
데이터베이스가 운영 중이면 운영체제의 명령어를 사용해 데이터 파일을 복사하는 것은 안전하지 않다. 다음과 같은 문장을 실행하여 Tibero에 백업의 시작과 종료를 통보해야 합니다.[예제] ALTER BEGIN & END
alter tablespace {tablespace name} begin backup ... alter tablespace {tablespace name} end backupbegin backup과 end backup 문장 사이에는 해당 Tablespace의 변경 사항에 대한 로그가 늘어나기 때문에 데이터베이스에 부담이 가중되게 됩니다. begin backup을 시작한 이후에는 신속하게 백업을 완료하고 end backup 상태로 복귀시켜야 합니다.
Inconsistent 백업의 전체 과정은 다음과 같다.
-
먼저 백업할 Tablespace를 선정합니다.
[예제] Online 백업(Tablespace의 선정)
SQL> select name, type from v$tablespace; NAME TYPE ---------------------------------------- ---- SYSTEM DATA UNDO UNDO TEMP2 TEMP USERS DATA SYSSUB DATA 4 rows selected.2. 백업할 Tablespace에 속한 데이터 파일을 조회한 후 begin backup, end backup 명령어를 사용하여 백업을 수행합니다. 예를 들어, USER Tablespace를 백업할 경우를 가정하고 수행합니다.
[예제] Online 백업(begin backup, end backup 명령어의 사용)
SQL> select f.name 2 from v$tablespace t join v$datafile f on t.ts# = f.ts# 3 where t.name='USERS'; NAME ---------------------------------------- /home/tibero/tbdata7/usr001.dtf 1 row selected. SQL> alter tablespace USERS begin backup; Tablespace 'USERS' altered. SQL> !cp /home/tibero/tbdata7/usr001.dtf /backup/ SQL> alter tablespace USERS end backup; Tablespace 'USERS' altered.
-
백업 운영 절차
온라인 백업과 Export 백업에 대해 설명합니다.
-
Online Backup
Tibero online Backup scripts의 예제 (Tibero_Hotbackup.sh)
[예제] Online backup script 예제
#!/bin/bash ################################################################################ # Shell Environment ################################################################################ TB_HOME=/home/tibero/tibero7 ARCH_DIR=/home/tibero/tbdata/archive/ WORK_DIR=/home/tibero/backup BACKUP_DIR=$WORK_DIR/`date +%y%m%d_%H%M` BACKUP_CTL=$BACKUP_DIR/control.ctl.bak LIST_DIR=$WORK_DIR/list TMP_DIR=$WORK_DIR/tmp LOG_DIR=$WORK_DIR/log LOG=$LOG_DIR/`uname -n`_`date +%m%d`.log TABLESPACES=$LIST_DIR/TABLESPACES.LIST FILE_LIST=$LIST_DIR/FILES.LIST DB_LIST=$LIST_DIR/DB.LIST TMP_FILE=$TMP_DIR/tmp_file.txt mkdir $BACKUP_DIR mkdir $LIST_DIR mkdir $TMP_DIR mkdir $LOG_DIR touch $LOG \rm $LIST_DIR/* $TMP_DIR/* echo "################################################################################" >> $LOG echo "##### Backup Begin" >> $LOG echo "##### Begin Time : `date`" >> $LOG echo "#####" >> $LOG echo "##### Datafile backup Begin" >> $LOG echo "#####" >> $LOG ################################################################################ # Tablespace List Getting ################################################################################ tbsql sys/tibero <<EOF>> /dev/null spool $TMP_DIR/tbs.tmp select tablespace_name from dba_tablespaces; spool off exit EOF cat $TMP_DIR/tbs.tmp| grep -v TABLESPACE | grep -v "\-\-\-"|grep -v selected |grep -v SQL | sed '/^ *$/d' > $TMP_DIR/tbs_l.tmp cat $TMP_DIR/tbs_l.tmp | awk '{print $1}' > $TMP_DIR/TABLESPACES.TEMP cat $TMP_DIR/TABLESPACES.TEMP | grep -v TEMP > $TABLESPACES ################################################################################ # Datafile List Getting ################################################################################ tbsql sys/tibero <<EOF >> /dev/null spool $TMP_DIR/datafile.tmp select file_name from dba_data_files; spool off exit EOF cat $TMP_DIR/datafile.tmp | grep -v FILE | grep -v "\-\-\-"|grep -v selected |grep -v SQL|sed '/^ *$/d' > $TMP_DIR/df_l.tmp cat $TMP_DIR/df_l.tmp | awk '{print $1}' > $LIST_DIR/datafile.list ################################################################################ # Begin Backup ################################################################################ cat $TABLESPACES | while read TBSPACE do tbsql sys/tibero <<EOF >> /dev/null alter tablespace $TBSPACE begin backup; exit EOF done ################################################################################ # Backup ################################################################################ # cp로 복사 시 cat $LIST_DIR/datafile.list | while read DATAFILE do cp $DATAFILE $BACKUP_DIR >> $LOG done # 베리타스 넷백업으로 백업 시 #/usr/openv/netbackup/bin/bpbackup -p TIBERO_E3500-NEW -s DATAFILE -w -f $LIST_DIR/datafile.list ################################################################################ # End Backup ################################################################################ cat $TABLESPACES | while read TBSPACE do tbsql sys/tibero<<EOF >> /dev/null alter tablespace $TBSPACE end backup; exit EOF done echo "##### Datafile backup End" >> $LOG echo "#####" >> $LOG # Controlfile backup tbsql sys/tibero<<EOF >> /dev/null alter system switch logfile; alter database backup controlfile to trace as '$BACKUP_DIR/control.ctl.bak' reuse resetlogs; exit EOF # Archive Backup cp -R $ARCH_DIR $BACKUP_DIR >>$LOG # 이 부분은 넷백업으로 Archive와 Controlfile 백업 시 체크 해야 하는 부분 #echo $ARCH_DIR > $LIST_DIR/archive.list #ls -ld /backup/control | awk '{print $9}' >> $LIST_DIR/archive.list #/usr/openv/netbackup/bin/bpbackup -p TIBERO_E3500-NEW -s ARCHIVE -w -f $LIST_DIR/archive.list # Return Error Code. Confirm Backup Success. # #if [ $? = 0 ] #then # echo "End" >> $LOG # echo " Result : Backup Success. " >> $LOG #else # echo " Error : Backup Fail. Return Code = $? " >> $LOG # exit 1 #fi echo "##### Archive and Controlfile backup End" >> $LOG echo "#####" >> $LOG echo "##### ALL Backup Complete!!!!" >> $LOG echo "##### End Time : `date`" >> $LOG echo "################################################################################" >> $LOG echo " " >> $LOG -
Export Backup
Tibero Export Backup scripts 의 예 (Tibero_exportbackup.sh파일)
[예제] Tibero Export Backup scripts 의 예
WORK_DIR=/home/tibero/backup PORT=9629 export TB_NLS_DATE_FORMAT="YYYYMMDD" tbsql sys/tibero <<EOF >> /dev/null spool ${WORK_DIR}/rm_list.txt select sysdate-30 from dual; quit EOF \rm -rf ${WORK_DIR}/$TB_SID_`cat ${WORK_DIR}/rm_list.txt grep -v SYSDATE | grep -v "\-\-\-"|grep -v selected |grep -SQL|sed '/^ *$/d'`* \rm -rf ${WORK_DIR}/rm_list.txt tbexport username=sys password=tibero sid=${TB_SID} port{PORT} file=${WORK_DIR}/${TB_SID}_`date +%Y%m%d_%H%M%S`.dmp log{WORK_DIR}/${TB_SID}_`date +%Y%m%d_%H%M%S`_exp.log full=script=y gzip ${WORK_DIR}/*.dmp
백업 확인
-
Online Backup
위 예제들을 사이트에 맞게 스크립트를 수정하여 백업 경로에 파일이 생성이 되는지 확인합니다.
백업 관련 참조
-
ONLINE backup 중 Tibero 재 기동
Online backup 중 비정상적인 종료 등으로 Tibero 재 기동하게 되면 에러가 발생합니다.
Online Backup 중 Tibero 재 기동
- Tibero를 MOUNT 모드까지 기동
- V$BACKUP view를 조회하여 STATUS가 ‘ACTIVE’인 tablespace를 조회
- “ALTER TABLESPACE <Tablespace_name> END BACKUP; 구문 사용하여 백업 종료
- Tibero를 재기동합니다.
[예제] Online Backup 중 End backup
select v.file#, v.status, d.name, t.name as "tablespace_name" from v$backup v, v$datafile d, v$tablespace t where v.file#=d.file# and d.ts#=t.ts# ; FILE# STATUS NAME tablespace_name ----- ---------- --------------------------------------------------- --------------- 0 NOT ACTIVE /tibero/tibero7/database/science/system001.dtf SYSTEM 1 NOT ACTIVE /tibero/tibero7/database/science/undo001.dtf UNDO0 2 NOT ACTIVE /tibero/tibero7/database/science/usr001.dtf USR 3 NOT ACTIVE /tibero/tibero7/database/science/tpr_ts.dtf SYSSUB SQL> alter tablespace USERS end backup; Tablespace 'USERS' altered.