다른 명령
아카이브 로그 사이즈 조회
- 최대 MAX 및 현재 아카이브로그 사이즈 조회
SELECT NAME , ROUND(SPACE_LIMIT/1024/1024/1024,2) SPACE_LIMIT_GB , ROUND(SPACE_USED/1024/1024/1024,2) SPACE_USED_GB , SPACE_RECLAIMABLE , NUMBER_OF_FILES , CON_ID FROM V$RECOVERY_FILE_DEST;
(현재)아카이브 로그 상태/시퀀스조회
- SQL*PLUS
$ sqlplus / as sysdba SQL> archive log list;
또는
SELECT NAME,LOG_MODE,ARCHIVE_CHANGE# FROM V$DATABASE;
아카이브 로그 파일위치
- - redo 로그 파일위치와 갯수
SQL> select * from v$logfile; -- 또는 SQL> archive log list
- - 파일의 크기 및 어떤 파일이 사용되는지 확인
SQL> select group#, sequence#, bytes, members, status from v$log;
아카이브 로그 포맷 확인
SQL> show parameter log_archive_format
또는
SELECT NAME,VALUE FROM V$PARAMETER WHERE NAME LIKE '%log_archive_format%';
아카이브 로그 FULL 장애 조치
방법 1(RMAN이용 삭제)
db_recovery_file_dest_size 최대치 증가
- ORA-19809: limit exceeded for recovery files 오류 발생시
SQL> alter system set db_recovery_file_dest_size=100G;
파라미터 확인/ 변경
SQL> show parameter db_recovery_file_dest;
또는
SELECT NAME,VALUE FROM V$PARAMETER WHERE NAME LIKE '%db_recovery_file_dest%';
아카이브 로그 삭제
- RMAN 이용
-- 최근 3일치를 제외한 나머지 삭제 RMAN> connect target / RMAN> LIST ARCHIVELOG ALL; RMAN> delete archivelog all completed before 'sysdate -3';
-- 전체 삭제 RMAN> connect target / -- RMAN 카탈로그 정보 정리 RMAN> crosscheck archivelog all; RMAN> delete expired archivelog all; -- 전체 삭제
방법 2
alert log 확인 및 상태확인
{ORACLE_HOME}/admin/SID/bdump/alert_SID.log 을 확인 후 archiver 관련 에러를 찾을 수있다. 어떤 장애가 발생했을때 로그의 확인은 필수
현재 로그 상태 확인
SELECT * FROM V$LOG;
=> "sequence#"의 번호 "archive" 확인
현재 파라미터 설정값 확인
show parameter log_archive_dest
현재 archive 저장 위치와 상태 확인. log_archive_dest_state_1 확인
여유공간 확보 및 장애조치
파일을 삭제하는등의 조치를 취하여 여유공간을 확보.
archiver 재시작
- DB를 끄지 않고 복구하는 방법
- 운영중인 DB는 함부로 shutdown 할 수없기 때문에 이렇게 복구를 하도록 한다
alter system set log_archive_dest_state_1=defer; alter system set log_archive_dest_state_1=enable; alter system archive log stop; alter system archive log start;
- 디렉토리가 삭제되었을때 디렉토리를 다시 생성하고 아래의 명령으로만 archiver 가 동작하는것은 확인
alter system set log_archive_dest_state_1=enable;
full 백업(권장)
- OS명령어 사용
RMAN 아카이브 로그 삭제
RMAN> LIST ARCHIVELOG LIKE '%.arc'; RMAN> LIST ARCHIVELOG ALL; RMAN> DELETE ARCHIVELOG LIKE '%.arc';
최근 3일전 아카이브로그 남겨두고 삭제
RMAN> delete archivelog all completed before 'sysdate -3';
최근 3일전 까지만 남기고 이전 아카이브로그 삭제
RMAN> delete noprompt archivelog until time 'sysdate-3' all;
3시간 이전에 백업 완료된 아카이브 로그 복사본 삭제
RMAN> delete copy of archivelog all completed before sysdate-3/24 ;
CROSSCHECK 명령에 의해 검색되어 추출된 만료 아카이브 로그 삭제
RMAN> DELETE EXPIRED ARCHIVELOG ALL;
디스크에 2번 백업된 아카이브 로그 삭제
RMAN> DELETE ARCHIVELOG ALL BACKED UP 2 TIMES to disk;
시퀀스 100 까지 삭제
RMAN> DELETE NOPROMPT ARCHIVELOG UNTIL SEQUENCE = 100;
RMAN 아카이브 로그 삭제 쉘 스크립트
rman_arch_del.sh
#!/bin/bash export ORACLE_HOME=/oracle/app/oracle/product/12.2.0/db_home export ORACLE_SID=ORCL export PATH=$ORACLE_HOME/bin:$PATH delBackup () { rman log=/oracle/backup/arch_del.log << EOF connect target / DELETE noprompt ARCHIVELOG ALL COMPLETED BEFORE 'sysdate -3'; CROSSCHECK ARCHIVELOG ALL; DELETE EXPIRED ARCHIVELOG ALL; exit EOF } #Main delBackup
- crontab 추가시
00 22 * * * /u01/app/oracle/rman_arch_del.sh > /tmp/rmanarch.log