ORACLE/ADMIN2007. 2. 24. 05:55
반응형

DB10g 아카이브 로그 파일관리
==========================

현상> 갑자기 db가 멈추는 현상 발생 abort로 죽이고 다시 살리면 다음과 같은 에러 발생

SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-16038: log 2 sequence# 618 cannot be archived
ORA-19809: limit exceeded for recovery files
ORA-00312: online log 2 thread 1:
'/home01/oracle/ocs/oradata/OCSD/onlinelog/o1_mf_2_1k7xomh4_.log'
ORA-00312: online log 2 thread 1:
'/home02/oracle/ocs/infra/flash_recovery_area/OCSD/onlinelog/o1_mf_2_1k7xormv_.log'

 

========================================================================


#### 조치하는 법


1) db_recovery_file_dest_size를 증가시켜 주면 된다. 바로 반영됩니다.

    SQL> alter system set db_recovery_file_dest_size=xG;

 

2) Stop using the db_recovery_file_dest by unsetting the parameter.
   ( This assumes you never really wanted to use this option )

 

3)  rman repository/Controlfile 에서 엔트리들을 삭제한다.

SQL> conn / as sysdba
SQL> SELECT * FROM V$RECOVERY_FILE_DEST;

         위의 명령으로 조회해 보면 최대치 까지 로그가 쌓인것을 알 수 있음.

 

다음과 같이 조치한다.

RMAN 사용해서 ARCHIVE LOG 삭제

#$ORACLE_HOME/bin/rman

 

RMAN> connect target /

RMAN> LIST ARCHIVELOG LIKE '%.arc';

RMAN> DELETE ARCHIVELOG LIKE '%.arc';

3일치 아카이브로그 남겨두고 지우기

RMAN> delete archivelog all completed before 'sysdate -3';

 

하나씩 지우는게 번거러울 경우 아래와 같이 한번에 지우는 방법도 있음.

1. os 상에서 우선 파일을 삭제한다.

   # cd $ORACLE_BASE/flash_recovery_area/$ORACLE_SID/archivelog/yyyy_mm_dd

   # rm -r $ORACLE_BASE/flash_recovery_area/$ORACLE_SID/archivelog/'삭제할 디렉토리명'

2. RMAN을 실행한다.

  # $ORACLE_HOME/bin/rman

  RMAN>connect target /

  RMAN>crosscheck archivelog all; -> marks the controlfile that the archives have been deleted

  RMAN>delete expired archivelog all; -> deletes the log entries identified above

반응형
Posted by [PineTree]