본문 바로가기
Oracle/운영

archivelog로 인한 FRA 영역의 FULL과 Stuck Archiver (조치방법)

by 취미툰 2024. 8. 8.
반응형

TEST DB의 DB접속시도를 하다 접속이 안되서 로그를 확인해보니 아래의 로그가 계속해서 발생하였습니다.

현상은 TNS를 통한 DB 접속이 되지 않고, SQLPLUS로 직접접속도 되지 않았습니다. RMAN TARGET / 도 마찬가지로 접속이 되지 않았습니다.

 

 

alert log의 내용

ORA-19809: limit exceeded for recovery files
ORA-19804: cannot reclaim 187695104 bytes disk space from 10737418240 bytes limit

2024-08-07T11:47:09.089273+09:00
Errors in file /oracle/db/base/diag/rdbms/dbarac/dbarac1/trace/dbarac1_arc1_44040648.trc:
ORA-19809: limit exceeded for recovery files
ORA-19804: cannot reclaim 187695104 bytes disk space from 10737418240 bytes limit
2024-08-07T11:47:09.090476+09:00
Errors in file /oracle/db/base/diag/rdbms/dbarac/dbarac1/trace/dbarac1_tt00_8651154.trc:
ORA-19815: WARNING: db_recovery_file_dest_size of 10737418240 bytes is 100.00% used, and has 0 remaining bytes available.
ARC1: Error 19809 Creating archive log file to '+RECO'
2024-08-07T11:47:09.092165+09:00
************************************************************************
You have following choices to free up space from recovery area:
1. Consider changing RMAN RETENTION POLICY. If you are using Data Guard,
   then consider changing RMAN ARCHIVELOG DELETION POLICY.
2. Back up files to tertiary device such as tape using RMAN
   BACKUP RECOVERY AREA command.
3. Add disk space and increase db_recovery_file_dest_size parameter to
   reflect the new space.
4. Delete unnecessary files using RMAN DELETE command. If an operating
   system command was used to delete files, then use RMAN CROSSCHECK and
   DELETE EXPIRED commands.
************************************************************************

 

crsctl stat res -t를 확인했을 때 상태가 Stuck Archiver였습니다.

ora.dbarac.db
      1        ONLINE  INTERMEDIATE dbarac1                  Stuck Archiver,HOME=
                                                             /oracle/db/product/1
                                                             2.2.0,STABLE
      2        ONLINE  INTERMEDIATE dbarac2                  Stuck Archiver,HOME=
                                                             /oracle/db/product/1
                                                             2.2.0,STABLE

 

조치사항

DB를 내리고 mount로 다시 올린 후 FRA영역의 아카이브 강제 삭제하여 용량 확보 후 RMAN에서 delete expired archivelog all 수행

 

1. DB 내리기

일반적인 immediate로 내려가지 않아서 abort로 다시 시도하였으나 db가 down되지 않았습니다.

##1차로 immediate
srvctl stop database -d dbarac 

---db가 안내려가서 명령어 종료하고 abort로 재시도

##2차로 abort
srvctl stop database -d dbarac -stopoption abort

 

OS의 pmon process를 강제로 kill하고 crs를 재기동하였습니다.

ps -ef |grep pmon

kill -9 xxxxx

 

crs를 종료할때는 혹시몰라 강제로 내렸습니다. 

crsctl stop crs -f


crsctl start crs

 

 

2.crs 기동후 db를 mount까지 올리기

sqlplus / as sysdba
startup mount

 

 

3.FRA영역에서 용량확보를 위한 아카이브로그 파일 삭제 후 rman에서도 삭제

asmcmd -p
cd +RECO/DBARAC/ARCHIVELOG

rm -rf *

 

rman target /
RMAN> crosscheck archivelog all;
RMAN> delete expired archivelog all;

 

4.DB shutdown 후 기동

sqlplus / as sysdba
shutdown immediate

srvctl start database -d dbarac

 

조치 완료.

 

 

예방을 위한 추가설정

1)

db_recovery_file_dest를 확인해보니 10G여서 40G로 증가시켰습니다.

 

SQL> show parameter recovery_file

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest                string      +RECO
db_recovery_file_dest_size           big integer 10G
remote_recovery_file_dest            string


alter system set db_recovery_file_dest_size =40G scope=both;


SQL> show parameter recovery_file

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest                string      +RECO
db_recovery_file_dest_size           big integer 40G
remote_recovery_file_dest            string

 

2)

crontab을 이용한 7일이 지난 아카이브로그 자동삭제 쉘 등록

 1) rman의 delete 스크립트 생성

vi delete_archivelogs.rman

delete noprompt archivelog all completed before 'SYSDATE-7';

 

 2) 쉘 생성

vi run_rman_for_delete_archivelog.sh

rman target / @/home/oracle/dba/PUBLIC/SHELL/delete_archivelogs.rman

 

 3) crontab 등록

crontab -e 

0 0 * * * /home/oracle/dba/PUBLIC/SHELL/run_rman_for_delete_archivelog.sh

 

 

끝.

반응형

댓글