행위

"오라클 rman 아카이브로그 삭제"의 두 판 사이의 차이

DB CAFE

(아카이브 로그 파일위치)
(아카이브 로그 삭제)
 
(같은 사용자의 중간 판 13개는 보이지 않습니다)
17번째 줄: 17번째 줄:
 
SQL> archive log list;
 
SQL> archive log list;
 
</source>
 
</source>
 +
또는
 
<source lang=sql>
 
<source lang=sql>
SQL> SELECT NAME,LOG_MODE,ARCHIVE_CHANGE#
+
SELECT NAME,LOG_MODE,ARCHIVE_CHANGE#
 
   FROM V$DATABASE;   
 
   FROM V$DATABASE;   
 
</source>
 
</source>
26번째 줄: 27번째 줄:
 
<source lang=sql>
 
<source lang=sql>
 
SQL> select * from v$logfile;
 
SQL> select * from v$logfile;
 +
-- 또는
 +
SQL> archive log list
 
</source>
 
</source>
  
36번째 줄: 39번째 줄:
 
<source lang=sql>
 
<source lang=sql>
 
SQL> show parameter log_archive_format
 
SQL> show parameter log_archive_format
 +
</source>
 +
또는
 +
<source lang=sql>
 +
SELECT NAME,VALUE
 +
  FROM V$PARAMETER
 +
WHERE NAME LIKE '%log_archive_format%'; 
 
</source>
 
</source>
  
 
== 아카이브 로그 FULL 장애 조치 ==
 
== 아카이브 로그 FULL 장애 조치 ==
=== db_recovery_file_dest_size 최대치 증가 ===  
+
=== 방법 1(RMAN이용 삭제) ===
 +
==== db_recovery_file_dest_size 최대치 증가 ====
 
* ORA-19809: limit exceeded for recovery files 오류 발생시  
 
* ORA-19809: limit exceeded for recovery files 오류 발생시  
 
<source lang=sql>
 
<source lang=sql>
45번째 줄: 55번째 줄:
 
</source>
 
</source>
  
=== 파라미터 확인/ 변경 ===
+
==== 파라미터 확인/ 변경 ====
 
<source lang=sql>
 
<source lang=sql>
 
SQL> show parameter db_recovery_file_dest;
 
SQL> show parameter db_recovery_file_dest;
</source>  
+
</source>
 +
또는
 +
<source lang=sql>
 +
SELECT NAME,VALUE
 +
  FROM V$PARAMETER
 +
WHERE NAME LIKE '%db_recovery_file_dest%'; 
 +
</source>
  
=== 아카이브 로그 삭제 ===
+
==== 아카이브 로그 삭제 ====
 
# RMAN 이용  
 
# RMAN 이용  
 
<source lang=sql>
 
<source lang=sql>
61번째 줄: 77번째 줄:
 
-- 전체 삭제
 
-- 전체 삭제
 
RMAN> connect target /
 
RMAN> connect target /
 +
 +
--  RMAN 카탈로그 정보 정리
 
RMAN> crosscheck archivelog all;
 
RMAN> crosscheck archivelog all;
 +
 
RMAN> delete expired archivelog all; -- 전체 삭제  
 
RMAN> delete expired archivelog all; -- 전체 삭제  
</source>  
+
</source>
 +
 
 +
=== 방법 2 ===
 +
==== alert log 확인 및 상태확인 ====
 +
{ORACLE_HOME}/admin/SID/bdump/alert_SID.log 을 확인 후 archiver 관련 에러를 찾을 수있다.
 +
어떤 장애가 발생했을때 로그의 확인은 필수
 +
 
 +
==== 현재 로그 상태 확인 ====
 +
<source lang=sql>
 +
SELECT * FROM V$LOG;
 +
</source>
 +
=> "sequence#"의 번호 "archive" 확인 
 +
 
 +
==== 현재 파라미터 설정값  확인 ====
 +
<source lang=sql>
 +
show parameter log_archive_dest
 +
</source>
 +
현재 archive 저장 위치와 상태 확인.
 +
log_archive_dest_state_1 확인
 +
 
 +
==== 여유공간 확보 및 장애조치 ====
 +
파일을 삭제하는등의 조치를 취하여 여유공간을 확보.
 +
 
 +
==== archiver 재시작 ====
 +
# DB를 끄지 않고 복구하는 방법
 +
# 운영중인 DB는 함부로 shutdown 할 수없기 때문에 이렇게 복구를 하도록 한다
 +
<source lang=sql>
 +
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;
 +
</source>
 +
* 디렉토리가 삭제되었을때 디렉토리를 다시 생성하고 아래의 명령으로만 archiver 가 동작하는것은 확인
 +
<source lang=sql>
 +
alter system set log_archive_dest_state_1=enable;
 +
</source>
 +
full 백업(권장)
 +
 
  
 
# OS명령어 사용
 
# OS명령어 사용
72번째 줄: 128번째 줄:
 
RMAN> LIST ARCHIVELOG ALL;
 
RMAN> LIST ARCHIVELOG ALL;
 
RMAN> DELETE ARCHIVELOG LIKE '%.arc';
 
RMAN> DELETE ARCHIVELOG LIKE '%.arc';
3일치 아카이브로그 남겨두고 지우기
+
 
 +
-- 3일치 아카이브로그 남겨두고 지우기
 
RMAN> delete archivelog all completed before 'sysdate -3';
 
RMAN> delete archivelog all completed before 'sysdate -3';
 +
 +
-- 3일 전까지만 남기고 이전 아카이브로그 지우기
 +
RMAN> delete noprompt archivelog until time 'sysdate-3' all;
 
</source>
 
</source>
  
98번째 줄: 158번째 줄:
 
</source>
 
</source>
 
* crontab 추가시  
 
* crontab 추가시  
 +
<source lang=shell>
 
00 22 * * * /u01/app/oracle/rman_arch_del.sh > /tmp/rmanarch.log
 
00 22 * * * /u01/app/oracle/rman_arch_del.sh > /tmp/rmanarch.log
 +
</source>
  
  
 
[[Category:oracle]]
 
[[Category:oracle]]

2020년 4월 22일 (수) 18:00 기준 최신판

thumb_up 추천메뉴 바로가기


1 아카이브 로그 사이즈 조회[편집]

  • 최대 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;

2 (현재)아카이브 로그 상태/시퀀스조회[편집]

SQL*PLUS
$ sqlplus / as sysdba
SQL> archive log list;

또는

SELECT NAME,LOG_MODE,ARCHIVE_CHANGE#
  FROM V$DATABASE;

3 아카이브 로그 파일위치[편집]

- redo 로그 파일위치와 갯수
SQL> select * from v$logfile;
-- 또는
SQL> archive log list
- 파일의 크기 및 어떤 파일이 사용되는지 확인
SQL> select group#, sequence#, bytes, members, status from v$log;

4 아카이브 로그 포맷 확인[편집]

SQL> show parameter log_archive_format

또는

SELECT NAME,VALUE
  FROM V$PARAMETER 
 WHERE NAME LIKE '%log_archive_format%';

5 아카이브 로그 FULL 장애 조치[편집]

5.1 방법 1(RMAN이용 삭제)[편집]

5.1.1 db_recovery_file_dest_size 최대치 증가[편집]

  • ORA-19809: limit exceeded for recovery files 오류 발생시
SQL> alter system set db_recovery_file_dest_size=100G;

5.1.2 파라미터 확인/ 변경[편집]

SQL> show parameter db_recovery_file_dest;

또는

SELECT NAME,VALUE
  FROM V$PARAMETER 
 WHERE NAME LIKE '%db_recovery_file_dest%';

5.1.3 아카이브 로그 삭제[편집]

  1. 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; -- 전체 삭제

5.2 방법 2[편집]

5.2.1 alert log 확인 및 상태확인[편집]

{ORACLE_HOME}/admin/SID/bdump/alert_SID.log 을 확인 후 archiver 관련 에러를 찾을 수있다. 어떤 장애가 발생했을때 로그의 확인은 필수

5.2.2 현재 로그 상태 확인[편집]

SELECT * FROM V$LOG;

=> "sequence#"의 번호 "archive" 확인

5.2.3 현재 파라미터 설정값 확인[편집]

show parameter log_archive_dest

현재 archive 저장 위치와 상태 확인. log_archive_dest_state_1 확인

5.2.4 여유공간 확보 및 장애조치[편집]

파일을 삭제하는등의 조치를 취하여 여유공간을 확보.

5.2.5 archiver 재시작[편집]

  1. DB를 끄지 않고 복구하는 방법
  2. 운영중인 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 백업(권장)


  1. OS명령어 사용

6 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;

7 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