DB (Database) 복구의 원리   백업과복구1 P.29~31

데이터의 복구 원리를 설명하기 전에 우선, 데이터가 저장되는 원리를 먼저 보자. 사용자가 A라는 데이터를 테이블에 입력한다고 하면,

- Redo log buffer 에 A 에 먼저 들어가고,

 

- 사용자가 commit 을 하면 Redo log buffer 에 A 가 Redo log file 에 SCN 과 함께 저장이 되고 (SCN 을 1이라고 가정한다. ) Redo log buffer 에서는 A 가 지워질 것이다.

 

- 이 때, log switch 같은 것이 발생해서 checkpoint  가 일어나면 DB buffer cache 에 있던 A 가 Data file 로 내려써 지게 되면서 CKPT (check point) 프로세스가 Data file 헤더와 Control file 헤더에 각각 동일한 SCN (여기서는 1) 을 기록하게 된다.

 

- 이 상태에서 DB backup 을 받고 (Data 파일에 SCN 이 1인 상태), 그 이후로 데이터 B, C 가 들어와서 SCN 이 2~3 으로 증가 후 Data/control file의 헤더에 이제 SCN 이 3인 상태가 되었다고 가정하자.

 

- 여기서 새로운 데이터 D와 E 가 들어와서 commit 이 발생, 그리고 LGWR 이 해당 데이터들을 Redo log file 내려써야 하는데, 빈 공간이 없다면 기존의 A, B 가 들어가 있는 공간 (inactive redo log file) 에 덮어 쓸 것이다. 그러면서 또 다시 checkpoint 가 일어나서 data/control header 에도 SCN 이 4->5 로 증가했다고 가정하자.

 


 

만약, 이 상황에서 예기치 않게 DB 서버에 장애가 생겨서 데이터 파일이 날아갔다고 하면, 기존에 backup 해 둔 데이터를 복사해 와서 (Restore) DB 를 Recover 해야한다.

 

하지만 위의 상황에서 backup data 에는 A 가 입력 되었을 때의 데이터, 즉, Data file 의 SCN 이 1 일때의 상태이고, 현재 Control file 의 SCN 이 5 번이다.

 

SCN 이 서로 다르므로 Recover 를 할 때는 2~5 번까지의 작업을 Redo log file 이나 Archive log file 을 뒤져서 Recover 를 해야하는데 (2~5 번 순서대로 하고, 만약 2번이 없으면 더 이상 진행되지 않는다.) Redo log 에서 SCN 2번이 저장되어 있는 부분을 (즉, 데이터 B 를 입력했던 부분) 데이터 D 가 덮어써 버렸으니, SCN 2번 부분을 복구 할 수 없게 된다.

 

이런 경우는 no archive log mode 라고 하고 Oracle 을 처음 설치하면 기본 모드이다.

 

이런 문제를 막기 위해서 Redo log file 에 덮어쓰기 전에 다른 곳으로 복사해 두고 덮어쓰는 방법을 쓸 수 있는데 이런 방법을 archive log mode 라고 한다.

 

 

 

 Archive log mode 로 변경하기

 

## 현재 log mode 조회

SYS> archive log list;

Database log mode       No Archive Mode

Automatic archival       Disabled

Archive destination       USE_DB_RECOVERY_FILE_DEST

Oldest online log sequence     101

 

Current log sequence       103


## DB 종료

SYS> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

 


## Parameter file 변경

SYS> !vi $ORACLE_HOME/dbs/inittestdb.ora

log_archive_dest_1='location=/data/arc1'

log_archive_dest_2='location=/data/arc2'

 

log_archive_format=%s_%t_%r.arc

▲ 1과 2 폴더에는 같은 파일이 저장이 된다. 용량이 부족할 경우 1개만 사용하도록 하자


## mount 상태로 startup

SYS> startup mount;

ORACLE instance started.


Total System Global Area  422670336 bytes

Fixed Size    1344616 bytes

Variable Size  260049816 bytes

Database Buffers  155189248 bytes

Redo Buffers    6086656 bytes

 

Database mounted.


## archive log mode 경로 변경 내용 확인

SYS> archive log list;

Database log mode       No Archive Mode

Automatic archival       Disabled

Archive destination       /data/arc2

Oldest online log sequence     101

 

Current log sequence       103


## archive mode 로 변경하기

SYS> alter database archivelog;


Database altered.


SYS> archive log list;

Database log mode       Archive Mode

Automatic archival       Enabled

Archive destination       /data/arc2

Oldest online log sequence     101

Next log sequence to archive   103

 

Current log sequence       103


## DB open

SYS> alter database open;


 

Database altered.

 

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

[Oracle Admin] Chap 2. SQL 문장의 실행 원리  (0) 2013.09.08
[Oracle Admin] Chap 1. Oracle server 구조  (0) 2013.09.08
Export, Import  (0) 2013.07.24
Table Space 및 DATA file 관리  (0) 2013.07.16
불완전 복구(Incomplete Recovery)  (0) 2013.07.16
by 짱구를꼭말려 2013. 8. 2. 22:27