글
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 |