Oracle Backup

<< 오라클 DB 백업하기 >>

수정일 : 2002. 11. 15

2005. 01. 25 : 아카이브 로그 보기 추가


#### 고려 사항

1. 백업 모드
- Archive Mode
- Noarchive Mode

2. 저장 장치
- Disk 사용
- 백업 장치 사용

3. 백업 주기




#### Archive Mode
- 데이터베이스가 아카이브 모드 상태에서 오픈되어 있는 경우에는
온라인 백업이 가능한 상태이며 따라서 문제 발생시 처리중인 트랜잭션
중 Commit 된 부분들은 전부 복구가 가능하다.



#### Archive 백업 순서
- 데이터베이스의 아카이브 모드가 설정되어 있는지 해제되어 있는지를 확인한다.
- 아카이브 모드를 설정한다.
- 아카이브 관련 초기화 변수들이 정확한지 확인한다.
- 아카이빙을 수행한다.
- 아카이브 로그 파일들을 다른 저장 장치에 옮긴다.
- 복구할 때에 편리하도록 아카이브 로그 파일들의 순서를 잘 관리한다.

#### Archive 모드 설정 상태 알아보기

V$DATABASE 뷰의 "log_mode" 컬럼을 확인하면 된다.

=====================================================
SVRMGR> select log_mode from v$database;
LOG_MODE
------------
NOARCHIVELOG
=====================================================

▶ 아카이브 모드에서 관련 정보 보기
> desc v$database
> desc v$archive

▶ 로그 그룹별 아카이브 모드 상태
> select group#, archived from v$log;


SVRMGR> archive log list
데이터베이스 로그 모드 아카이브 모드가 아님
자동 아카이벌 사용 불가능
아카이브 수신지 /ora/product/8.1.7/dbs/arch
가장 오래된 온라인 로그 순차 1078
현재 로그 순차 1080

현재 데이터베이스는 노아카이브 모드이다.
- 자동 아카이브 모드는 설정되어 있지 않다.
- 아카이브 파일들은 "$ORACLE_HOME/dbs/arch"에 저장된다.
- 가장 오래 전에 사용된 리두 로그(redo log) 파일의 Sequence 번호는 1078 이다.
- 현재 사용되고 있는 리두 로그(redo log) 파일의 Sequence 번호는 1080 이다.




#### 아카이브 모드 설정 및 해제

▶ 아카이브 모드 설정하기
> ALTER DATABASE ARCHIVELOG;

▶ 아카이브 모드 해제하기
> ALTER DATABASE NOARCHIVELOG;

▶ 아카이브 모드 설정하기
ALTER DATABASE 명령어는 데이터베이스가 오픈되어 있지 않은 상태에서만 효력을 발생하므로
다음과 같은 순서에 따라서 작업을 수행해야 한다.

■ 데이터베이스를 내린다.
SVRMGR> SHUTDOWN;

■ 데이터베이스를 백업한다.

데이터베이스를 백업할 때에는 데이터를 저장하고 있는 데이블스페이스는 물론
로그 파일, 롤백 세그먼트 파일 등 데이터베이스를 구성하는 모든 파일들을
오퍼레이팅 시스템이 제공하는 유틸리티를 사용해서 다른 디스크나 테이프
저장 장치에 복사해 놓아야 한다.


■ 데이터베이스를 마운트한다.
SVRMGR> CONNECT INTERNAL;
Connected.
SVRMGR> STARTUP MOUNT;

오라클에서는 아무런 옵션 절 없이 "STARTUP" 명령어만을 사용하면, 오라클은 데이터베이스를
마운트하고 이를 오픈하는 것까지를 수행한다. 아카이브 모드로 변경하기 위해서는
반드시 데이터베이스를 오픈한지 않은 상태로 두어야 한다.

■ 아카이브 모드를 설정한다.
SVRMGR> ALTER DATABASE ARCHIVELOG;

■ 데이터베이스를 오픈한다.
SVRMGR> ALTER DATABASE OPEN;


▶ 아카이브 모드 해제하기
아카이브 모드를 해제하고자 하면 다음과 같은 순서로 한다.

■ 데이터베이스를 내린다.
SVRMGR> shutdown;

■ 필요한 경우 백업을 수행한다.
■ 데이터베이스를 마운트한다.
SVRMGR> STARTUP MOUNT;

■ 아카이브 모드를 해제한다.
SVRMGR> ALTER DATABASE NOARCHIVELOG;

■ 데이터베이스를 오픈한다.
SVRMGR> ALTER DATABASE OPEN;


■ 로그 싸이게함.. (이게 필요한가??)
SVRMGR> alter system switch logfile; <--로그쌓이게 함


#### 아카이빙 수행

두가지 수행방법
1. 오라클 초기화 변수 파일(init.ora)을 이용해서 리두 로그 파일이
가득 차면 자동으로 수행
2. 명령어를 사용해서 데이터베이스 관리자(DBA)가 수동으로 수행


▶ 자동 수행
아카이빙을 자동으로 수행하기 위해서는 다음과 같이 "init.ora" 파일을 수정해야 한다.
이 파일을 수정하고 나서는 반드시 데이터베이스를 내렸다가 다시 올려야 한다.

==================== /ora/product/8.1.7/dbs/init.ora ======================
# Uncommenting the line below will cause automatic archiving if archiving has
# been enabled using ALTER DATABASE ARCHIVELOG.
log_archive_start = true
log_archive_dest = /ora/product/8.1.7/dbs/arch/log
log_archive_format = "%S.ARC"
==================== /ora/product/8.1.7/dbs/init.ora ======================


▶ 수동 수행
> ALTER SYSTEM ARCHIVE LOG ALL;

적절한 시간에 온라인 리두 로그 파일의 내용을 아카이브 파일로 저장하지 못하면
데이터베이스 시스템에 문제가 생길 수 있다.

#### 아카이브 로그 파일의 장소와 이름 포맷 설정

아카이브 로그 파일이 저장되는 장소는 "LOG_ARCHIVE_DEST" 변수로 결정되고,
이름 형식은 "LOG_ARCHIVE_FORMAT" 초기화 변수로 설정된다.

▶ LOG_ARCHIVE_FORMAT 형식

■ %T 스레드 번호와 0을 삽입 arch0000000001
■ %t 스레드 번호 arch1
■ %S 로그 일련번호와 0을 삽입 arch0000000017
■ %s 로그 일련번호 arch17


#### 아카이브 로그 파일 옮기기

아카이브 로그 파일들을 다른 저장 장치로 옮기로 지우는 것이 좋다.

Ex) dd if=/oracle/dbs/arch/log1.src of=/dev/rmt/ctape1



▶ 데이터 파일 위치

/ora/oradata/ora1/system01.dbf
/ora/oradata/ora1/temp01.dbf
/ora/oradata/ora1/rbs01.dbf
/ora/oradata/ora1/indx01.dbf
/ora/oradata/ora1/users01.dbf
/ora/oradata/ora1/tools01.dbf
/ora/oradata/ora1/drsys01.dbf


#### 전체 데이터베이스 백업

▶ 사용 명령어들
dd : http://man.kldp.org/man/man1/dd.1.html
volcopy :

▶ dd 를 이용해서 백업
dd if=/ora/oradata/ora1/system01.dbf of=/oradb/ora1_backup/system01.dbf bs=2048
dd if=/ora/oradata/ora1/temp01.dbf of=/oradb/ora1_backup/temp01.dbf bs=2048
dd if=/ora/oradata/ora1/rbs01.dbf of=/oradb/ora1_backup/rbs01.dbf bs=2048
dd if=/ora/oradata/ora1/indx01.dbf of=/oradb/ora1_backup/index01.dbf bs=2048
dd if=/ora/oradata/ora1/users01.dbf of=/oradb/ora1_backup/users01.dbf bs=2048
dd if=/ora/oradata/ora1/tools01.dbf of=/oradb/ora1_backup/tools01.dbf bs=2048
dd if=/ora/oradata/ora1/drsys01.dbf of=/oradb/ora1_backup/drsys01.dbf bs=2048


▶ 백업할 파일 찾기

■ Datafile : 애플리케이션과 시스템에서 필요한 정보를 저장하는 파일
■ Redo Log File : 데이터 변경 이력을 기록하는 파일
■ Coontrol File : 데이터베이스 파일 목록 및 운영 정보를 저장하는 파일
■ Parameter File : 데이터베이스 서버의 특성을 설정하는 데 사용되는
변수들을 저장하는 파일

> select file_name from dba_data_files;

> select value from v$parameter where name = 'control_files';

> select member from v$logfile;

> select value from v$parameter where name = 'log_archive_dest';

▶ OS 명령어 사용 전체 데이터베이스 백업 방법

■ 백업 받을 데이터 파일들의 이름과 실제 저장 위치를 알아낸다.
■ OS 명령어를 수행하기 위한 쉘 스크립트를 작성한다.
■ 데이터베이스 서버를 내린다.
■ 쉘 스크립트를 수행하여 원하는 데이터 파일들을 백업한다.
■ 원하는 파일들이 모두 안전하게 백업되었는지 확인한다.
■ 데이터베이스 서버를 다시 마운트하고 오픈한다.






#### 부분 백업
▶ Full Backup 은 Physical Backup 이고, Export Backup 은 Logical Backup 이다.

▶ 온라인 테이블스페이스, 데이터 파일 백업

■ 백업할 데이터 파일의 저장 우치를 알아낸다.
: USERS 라는 테이블스페이스의 저장 위치
> select tablespace_name, file_name
from sys.dba_data_files
wehre tablespace_name = 'USERS';

■ 백업 시작을 데이터베이스 서버에 알린다.
> ALTER TABLESPACE users BEGIN BACKUP;
■ OS 명령어를 사용해서 데이터 파일을 백업한다.
> !sh
$dd if=/ora/oradata/ora1/users01.dbf of=/oradb/ora1_backup/users01.dbf bs=2048
$exit
■ 백업 끝을 데이터베이스 서버에 알린다.
> ALTER TABLESPACE users END BACKUP;

▶ 데이터 파일의 백업 상태 확인

데이터 파일들의 백업 상태는 V$BACKUP 뷰를 통해서 알 수 있다.

> SELECT file#, status FROM v$backup;
FILE# STATUS
---------- ------------------
1 NOT ACTIVE
2 NOT ACTIVE
3 ACTIVE

"NOT ACTIVE" 는 백업 상태가 아님,
"ACTIVE" 는 백업 상태임을 나타낸다.

▶ 오프라인 테이블스페이스 백업

단, "SYSTEM" 테이블스페이스와 현재 사용중인 롤백 세그먼트는
오프라인시킬 수 없다.

■ 백업하기를 원하는 테이블스페이스를 오프라인시킨다.
> ALTER TABLESPACE users OFFLINE NORMAL;
■ 오프라인된 테이블스페이스를 백업한다.
■ 백업이 끝난 테이블스페이스를 다시 온라인시킨다.
> ALTER TABLESPACE users ONLINE;

▶ Control 파일 백업

> ALTER DATABASE BACKUP CONTROLFILE TO 'filename' REUSE;

"filename" 은 절대 위치("/" 루트부터 시작)를 입력하고,
"REUSE" 옵션은 현재 있는 컴트롤 파일에 새로운 내용을 다시
쓰는 것을 나타낸다.

백업과 복구 목적으로 컨트롤 파일을 생성하는 스크립트를 만들 수 있다.

> ALTER DATABASE BACKUP CONTROLFILE TO TRACE NORESETLOGS;

이 SQL 명령어를 수행하면 사용자 덤프디렉토리($ORACLE_BASE/admin/oracle/udump)에
"ora_.trc" 파일이 생긴다. 이 파일은 직접 수행되는 것은 아니고
수행할 수 있는 스크립트 파일이다. 이 파일의 각 SQL 명령어에 도움말이 있고,
백업과 복구에 필요하다고 생각되는 부분을 수정해서 사용하면 된다.



#### 복원(Restore)과 복구(Recover)

복구 작업은 크게 복원 작업과 복구 작업으로 나눌 수 있는데 이를 모두 복구
작업이라고도 한다.
복원: 복구 작업의 준비 작업으로 데이터베이스에 문제가 발생하기 이전
최신 데이터로 데이터베이스를 다시 구성하는 일
ex) 문제가 발생하기 전에 OS 명령어를 사용해서 전체 데이터베이스를
백업 받아 놓았다면 이를 다시 호스트에 내려서, 몇일 전 상태로 만든다.
복구 : 이렇게 구성된 이전 데이터베이스를 가지고 문제가 발생한 시점의
데이터로 변경하는 일
전체 데이터베이스 백업 이후 아카이브 로그 파일들을 잘 맥업 받아
놓았다면 문제 발생 시점까지의 데이터를 복구할 수 있다.

▶ 복구 순서

데이터베이스에 문제가 발생하기 이전
■ 백업과 복구에 대한 계획을 수립한다.
■ 백업을 주기적으로 수행한다.
■ 복원과 복구를 미리 연습한다.
■ 복구가 필요한 부분이 있나 찾아본다.

데이터베이스에 문제가 발생한 이후
■ 문제 원인 분석
■ 복구 방법 결정
■ 복구 수행
■ 복구 결과 확인



#### 문제점 찾기

> SELECT file#, "ONLINE", error FROM v$recover_file;





▶ xxxxx 사용자의 설정 찾기

> select * from DBA_USERS where username like 'xxxxx%';
> dd if=/ora/product/8.1.7/dbs/xxxxx of=/oradb/ora1_backup/2001.12.22_ts/xxxxx.1
















###################
# 추가 내용
###################

#### Backup 종류

▶ DB는 Backup수행을 위해 얼마나 자주, 어느 정도의 시간동안 Offline될수 있는가?
■ Offline Full Backup을 수행하는데 필요한 시간이 여의치 않는 경우를 위해
Oracle은 DB운영 중 Physical Backup을 실시할 수 있는 방법을 제공한다.
■ Online Backup은 SQL*DBA(SVRMGR) 명령어인
ALTER TABLESPACE ... BEGIN BACKUP,
ALTER TABLESPACE ... END BACKUP
사이에 Tablespace에 속한 File을 Copy함으로써 수행된다.
■ Oracle이 제공하는 또 다른 방법은 Export Utility가 있다.
Export를 이용한 Backup은 DB 에 속한 data의 논리적 표현으로 구성된다.
Export를 이용한 Backup은 Physical Backup의 보조 수단으로 사용되어야 한다.
예) Object level Recovery


#### 기본적인 Backup Rules

▶ Log file을 disk에 archive한 후, 나중에 tape에 copy한다.
단, Archived log destination은 data file이나 online redo log file과는
다른 disk이어야 한다.

▶ Data file의 backup은 실제 data file과는 다른 disk에 유지되어야 한다.
Disk에 data file을 backup하면 recovery 속도를 향상시킬 수 있다.
▶ Control file을 여러 개 유지해야 하고, 이들은 각각 다른 disk에 존재해야 한다.
▶ Online log는 group당 최소한 2개 이상의 member를 유지해야 하고,
각각의 member는 서로 다른 disk에 존재해야 한다.
▶ Archive log의 복사본은 tape뿐만 아니라 disk에도 유지하는 것이 좋다
▶ Log file이나 Data file을 추가하거나 , rename하거나, 삭제하는 등
Database 구조가 변경되었을 경우, 반드시 control file을 backup받아야 한다.
또한, 추가된 data file도 backup을 받아야 한다.

▶ Backup 전략의 예
■ 1. ARCHIVELOG mode로 운영한다.
■ 2. 24시간 * 7 일 무정지 시스템이 아니라면,
일주일에 한 번씩의 Offline full backup과
매일 Online backup 이 이루어져야 한다.
■ 3. 매주 한 번씩 RESTRICT mode에서 full database export를 수행한다.
24*7 시스템이라면, database access가 없거나 적을 때 full export를 수행한다.

#### 복구시간 예측

▶ 얼마나 빠른 복구를 필요로 하는가?
■ DB가 NOARCHIVELOG mode에서 운영될 때 복구를 위한 가장 빠른 방법은 DB를
구성하는 모든 file을 Restore하는 것이다. 한편 DB가 ARCHIVELOG mode로
운영된다면 Physical Backup이후의 Data변화를 복구하기 위해 SQL*DBA(SVRMGR)
RECOVER DATABASE 명령어를 사용하여 Archived redo log file을 적용하여야 한다.

■ 따라서 복구시간은 적용하여야 할 Redo log file을 적게 가짐으로써 최소화할
수 있고 이는 Backup의 주기에 따라 결정된다.

■ Backup은 고객이 기대하는 MTTR(Mean Time To Recover)을 목표로 전략을
수립하여야 하며 이에는 Backup 장비, 방법, 주기를 어떻게 하느냐에 따라 결정된다.
또한 MTTR산정시 Backup 장비 Error와 같은 잠재된 장애에 대한 복구지연 가능성도
고려 하여야 한다.


#################
# 백업 시나리오
#################

server1 : Oracle 서버
server2 : Backup 서버

일단. server1에서 Achive mode 를 이용해서 백업을 하드의 log partition에 한다.
백업 주기는 한루에 한번이나 두번정도 한다.

그리고, 내부에 백업 서버(server2)를 두어서 Achive 로 백업된 데이터를 이동한다.
rsync 를 이용하면 쉽게 이동할 수 있다.
이렇게 하면 나중에 server1 이 고장이 나도 바로 복구가 가능한다.
데이터 이동주기는 백업 주기에 맞추고, 시간은 요청이 가장 적은 시간에 한다.


내부에 문제가 있을 수도 있으니깐.
하루에 한번이나 일주일에 3번정도 외부에 백업을 한다.
데이터이동은 rsync 를 이용한다.

###################
# bacup 하기
###################

server1 : (오라클 서버)
/oradb/backup
- cold : cold 백업한 데이터들
- arch : archive log 데이터

server2 : (백업 서버)

1. archive mode
2. 1주일에 한번 cold backup 을 한다.
3. server1 의 cold backup 한 것을 server2 의 cold backup 에 가져간다.
server1 에서 backup 후 server2 에서 가져간다.
server2 에서 계속 저장한다. cold bacup 후 arhive log 는 server1 backup 에 저정한다.

4. Arhive log 는 매일 2~3번 sync 한다.
-> 속도 Test 를 해볼것
-> insert, update 시 log size가 변하는가?





## 7일 이전의 로그 지우는 명령(Unix)
find ./아카이브로그 풀경로 -mtime 7 -print | xargs rm


reference: http://stone.backrush.com/view.php3?code=dbadmin&id=86&cpage=1

'IT > Oracle' 카테고리의 다른 글

10G: TEMPORARY TABLESPACES GROUP  (0) 2009.03.16
다른 Tablespace 로 Import 하기  (0) 2009.02.26
Wait event 에 대한 간단한 Tuning 방법  (0) 2009.02.03
Oracle 성능분석방법론  (0) 2009.02.02
Data pump  (0) 2008.12.24

+ Recent posts