오라클은 백업과 관련되어 DB를 운영하는 2가지 모드가 있는데
1. No Archive Log Mode
2. Archive Log Mode
오라클에서 사용자들이 수행하는 모든 변경 사항들은 Redo Log File에 저장해 두기 때문에
복구의 햄심 파일이다. 따라서 관리가 아주아주 중요함!
'A' 데이터를 입력할 때
1. Redo Log Buffer에 A 입력
2. Database Buffer Cache에 A 입력
3, 사용자가 commit
4. LGWR 프로세스가 Redo Log Buffer 내용을 Redo Log File에 SCN과 함께 기록하면서 Redo Log Buffer 내용은 지워짐
5. Log Switch 발생
6. Checkpoint 발생
7. Database Buffer Cache에 있던 A는 Data File에 저장
8. CKPT 프로세스가 Data File 헤더와 Control File에 해당 Checkpoint SCN을 기록 (Control File에는 가장 마지막에 발생한 SCN 번호가 저장된다)
이런 과정으로 진행이 됨
이 상태에서 Data file을 백업받고 ('A'가 백업됨)
사용자가 계속 데이터 B,C,D,E 를 입력하고 commit까지 수행되었다고 할 때 (SCN은 각각 2,3,4,5 라고 가정)
Redo Log File은 Inactive 상태가 되면 LGWR이 기존 내용을 신규 내용으로 덮어쓰게 됨.
덮어쓰게 되면 기존에 있던 내용은 없어지게 된다.
이때 Data File이 삭제되는 장애가 발생됬을 경우, 복구 과정은
1. 백업 Data File을 Data File로 복사해 옴(데이터 A)
2. Recover 명령을 수행해 Control File의 Checkpoint SCN 정보를 확인 (5)
3. Control File의 Checkpoint SCN과 Data File의 헤더부분의 SCN 정보를 비교
(Data File이 삭제되어서 1번과정에서 백업 Data File를 가져왔기 때문에 SCN=1)
4. 틀린 부분은 Redo Log File이나 Archive Log File를 반영해 복구
하지만 복구 순서는 순차적으로 SCN 2 ->3 -> 4 -> 5 이런식을 진행이 되어야 하는데
위 과정에서는 SCN 5, 4, 3까지는 데이터가 E, D, C 라는 것을 알 수 있지만,
SCN 2의 데이터는 Redo Log File에 존재하지 않기 때문에 (inactive 상태가 되면서 덮어써버렸기때문에) 복구 할 수 없다.
순차적으로 복구 진행이 되어서 2번이 복구되지 않기 때문에 뒤에있는 3, 4, 5도 역시 복구 할 수 없음!!
이 문제를 막기 위해서
Redo Log File을 덮어쓰기 전에! 다른 곳으로 복사해두고 덮어쓰는 방법이 바로
Archive Log Mode
복사해두는 Redo Log File를 Archive Redo Log File이라고 함.
Archive Redo Log File이 있는 한 모든 데이터는 복구 가능하다!
단, 주의사항!
- Archive Log File를 저장할 별도의 저장 공간이 추가로 필요함
- Archive Hang 발생,
가장 큰 문제점인데, Archive Log File 저장공간이 가득 차게 되면 archiver가 작업을 하지 못하면서 LGWR도 작업중지 되면서 commit 수행도 되지 않고
이러면서 DB가 중단되는 현상이 발생 됨 --> 이 현상이 바로 Archive Hang
- 관리가 힘듬
백업 파일은 볼수가 없어서 수정된 날짜를 확인해 archive log file를 그 날짜에 맞춰 지우거나,
백업을 모두 받고 몽땅 지우거나 이런식으로 계속 용량 관리를 해줘야 한다.
이런 이유들로 Oracle 처음 설치하면 No Archive Log Mode
하지만 Archive Log Mode가 권장 사항이긴 함..
항상 작업할 때 No Archive Log Mode / Archive Log Mode 차이점 설명해주고 어떤 걸로 할 건지 결정하게끔 도와줘야 함
Archive Log Mode로 변경
DB 종료 --> Parameter File 수정 --> DB Mount로 시작 --> Archive Log Mode 변경 --> DB Open
> shutdown immediate ;
pfile일 경우
> !
$ vi $ORACLE_HOME/dbs/initSID.ora
추가
log_archive_dest_1='location=경로' --> 첫번째 저장 경로 지정 (일반적으로 DB운영시, 아카이브 로그 저장 경로는
log_archive_dest_2='location=경로' --> 두번째 저장 경로 지정 ( 다른 디스크나 다른 경로로 설정, 성능↑)
log_archive_format=%s_%t_%r_.arc --> 아카이브 로그 파일 이름 지정(s=sequence, t=thread, r=incarnation#)
spfile일 경우 (shutdown 하기 전 작업하고 shutdown 하기)
> alter system set log_archive_dest_1='location=경로' scope=spfile ;
> alter system set log_archive_dest_2='location=경로' scope=spfile ;
> alter system set log_archive_format=%s_%t_%r_.arc scope=spfile ;
> startup mount ;
> archive log list ; --> 아카이브 로그 여부 확인
> alter database archivelog ; --> 아카이브 로그 모드로 변경
> alter database open ;
- 아카이브 로그 저장 경로 지정은 일반적으로 DB 운영시, 다른 디스크나 다른 경로로 설정해야 한다. 성능면에서도 더 좋다.
- log archive dest 1, 2에는 똑같은 내용이 들어간다.
- dest 1, 2로 지정된 것은 oracle 권한으로 되어 있어야 한다.
- Archive Log Mode -> No Archive Log Mode 로 변경 방법 = mount 상태에서 alter database noarchivelog ;
[실습]
Archive Hang 발생 시 해결방법
- Archive Log가 가득 차거나, Archive Log 저장 경로가 삭제되거나, 권한이 없을 경우에도 Archive Hang 발생
- 아래 방법을 통해 DB 종료 없이도 해결 가능
> alter system set log_archive_dest_state_1=defer ;
> alter system set log_archive_dest_state_1=enable ;
> alter system set log_archive_dest_state_2=defer ;
> alter system set log_archive_dest_state_2=enable ;
> alter system set archive log stop ;
> alter system set archive log start ;
[실습]
'오라클 백업/복구' 카테고리의 다른 글
Parameter File 장애 복구 (0) | 2013.01.27 |
---|---|
Recovery 원리 (0) | 2013.01.23 |
일자별 자동으로 백업수행 스크립트 (0) | 2013.01.23 |
Oracle Backup (0) | 2013.01.23 |
SYS 계정 암호설정과 암호파일 관리 (0) | 2013.01.22 |