본문 바로가기
oracle/[Recovery] 기타

Archive Log (mode변경, hang발생시 해결방법, log압축)

by #moonyz 2014. 10. 29.

[Archived log mode]

- online redo log 파일을 다른 장소로 한번 더 archive해서 혹시 발생할지 몰는 online redo log 파일의 장애 대비

- 관리자가 별도로 설정해야 하며 archived log가 저장될 별도의 저장 공간이 필요함


[No Archived log mode]

- online redo log 파일을 archive하지 않고 운영하는 방법

- 오라클 설치시 기본 모드

- log switch가 일어날때 archive process가 archive log file 복사

- archive 용량이 꽉찼을때 no archive mode로 변경되며 이후에도 계속 no archive mode

- archive log file을 저장할 경로의 권한이 없을때 no archive mode

- archive log file의 저장공간이 꽉찼을 때  

archive log file을 지워야 하는데 복구 해야할 파일 뒤에 생성된 파일은 남아있어야 함

(백업 파일은 어디까지 백업했는지 확인이 불가능함)

① 백업파일의 날짜를 확인하여 archive log file의 날짜와 비교하여 이전 날짜의 파일을 지워야함

② 백업을 지금 당장 하고 archive log file을 삭제하면 됨.




1. archive Redo Log mode로 변경하기

[spfile 사용할 경우]

SQL > show parameter spfile; << parameter 파일 확인

SQL > select status from v$instance << instance 상태 open

SQL > show parameter log_archive_dest_1; << archive log file 저장경로 확인


SQL > alter system set log_archive_dest_1='경로' scope=spfile; << 파라미터 파일에 archive log file 저장 경로와 이름 지정해줌

SQL > shutdown immediate ; << DB 종료 후

SQL > startup mount; << mount 상태로 open


[pfile을 사용할 경우]

① DB 종료

SQL > shutdown immediate;



② parameter file 수정

oracle$ vi $ORACLE_HOME/dbs/inittestdb.ora  << pfile 수정

log_archive_start=true << 9i까지만 사용, 10g이상버전에서는 사용하면 안됨!

log_archive_dest_1='location=/data/arc1' << 첫번째 저장경로 지정

log_archive_dest_2='location=/data/arc2' << 두번째 저장경로 지정

log_archive_format=%s_%t_%r.arc << 아카이브 로그파일 이름 지정




③ mount상태로 open


SQL > archive log list; << archive log mode 확인

SQL > alter database archivelog; << archive log mode로 변경

SQL > alter database oepn; << mount 상태인 DB를 open



* No Archive log mode로 변경

SQL > alter database noarchivelog;




테스트 > alter system switch logfile << switch 발생시킨 후 archive log file이 생기는지 테스트 하기 위해서


> archive log file 의 저장위치는 아까 변경해준 곳으로 설정되어있음

> 저장 경로에 archive log file이 생성이 되었는지 확인




2. Archive Hang 발생 시 해결하는 방법 --archive log mode로 운영할때 발생하는 문제

* archiving hane 발생원인

① archive log file 저장경로 삭제될때

② archive log file 저장 공간이 부족할때

③ oracle이 저장 디렉토리 권한이 없을때


step 1. 현재 상황 확인

SQL > archive log list;



step 2. 권한을 변경하여 archive hang 발생시킨다

- archive log file이 저장되는 디렉토리의 권한을 변경한다.

- oracle이 접근할수 없으므로 hang이 발생하게 됨.



step 3. Log Switch를 발생시키면 Archive Hang 발생



step 4. alter log를 확인하여 Archiving Hang 상태 확인

oracle$ vi /app/oracle/diag/rdbms/testdb/testdb/trace/alert_testdb.log

- 저장해야 하는 디렉토리에 oracle계정이 쓸 권한이 없어서 Log Switch가 발생해도 archiving 불가하다는 에러 확인



step 5. oracle에게 권한을 부여



step 6. Log Switch 발생시켜서 Hang이 안걸리는지 확인

SQL > alter system switch logfile; >> 여전히 Hang이 풀리지 않음.



step 7. 파라미터 변경후 archiver 재시작

SQL > alter system set log_archive_dest_state_1=defer;

SQL > alter system set log_archive_dest_state_1=enable;

SQL > alter system set log_archive_dest_state_2=defer;

SQL > alter system set log_archive_dest_state_2=enable;


SQL > alter system archive log stop;

SQL > alter system archive log start;


SQL > alter system switch logfile >> Hang 걸리지 않고 스위치 잘 넘어감





3. Archive log 압축하여 저장공간 줄이기

- hang 발생문제나 archive log를 저장할 대용량 스토리지를 별도로 구입해야 하는 등의 현실적인 문제

- 오라클에서는 archive log를 생성할때 압축을 할수있는 방법을 제공 (기본값 : desable)

- enable로 설정할 경우 파일의 내용이 대체적으로 50%이상의 압축률을 보임 (OS마다 압축효율이 다름)

- but, 데이터 복제 솔루션(data guard 등)을 사용할 경우 압축으로 인해 문제 발생할 수도 있음


① 압축모드 확인하기 : select archivelog_compression from v$database;

② enable 상태로 변경 : alter database archivelog compress enable;

③ disable 상태로 변경 : alter database archivelog compress disable;





댓글