본문으로 바로가기

오라클 redo log 확인 및 redo log추가 삭제

category IT/DB 2019. 2. 26. 17:32

 

오라클 에서는 redo 라는 아카이브가 존재한다.

이것의 로그를 기록 하는것이 redo log

 

그럼 redo 라는 것은 무엇일까?

간단하다. 이전에 행해진 작업들 즉 commit 또는 commit 되지 않는 데이터의 변경사항이

redo log 에 들어간다.

 

이 redo log 를 활용 하지 않는 것이 가장 좋지만, 세상사 어디 내마음과 같지 않으니....

 

이것을 활용 할일은 다음과 같다.

 

1. DB 가 깨졌을 경우

2. 데이터를 복구해야 할 일이 생겼을 경우

 

위 두가지가 가장 대표적인 사용의 예이다.

 

그럼 redo log가 어디에 위치해 있으며, 용량은 얼마이고 어떠한 상태인지 확인해보자.

 

현재 DB 의 로그를 확인하는 방법이다. 

 

SQL> select a.group#,a.type,a.member,b.bytes,b.archived,b.status

  from v$logfile a, v$log b

  where a.group#=b.group#

 order by 1,2;

 

 

위사진에서 나오듯이 redo log 의 그룹, 타입,파일위치,파일 용양,arc 상태,현재 상태 가 출력된다.

 

그럼 테스트로 redo log 의 그룹을 추가해보자.

SQL> alter database add logfile group4

  '/app_src/oracle/oradata/db11g/redo04.log' size 5M;

 

 위와 같은 SQL 문으로 redo log 가 추가된 것을 확인 할수 있다.

status 상태가 unused 인것은 사용되지 않은 상태여서 그렇다.

 

생성한 redo log 가 재대로 작동 하는지 확인 하는 방법은 해당 redo log 를 실행 시켜 보는 방법이다.

 

SQL> alter system switch logfile;

 

 

위의 SQL 문으로 로그파일을 switch 시켜 주면 해당 status 가 current 로 변경이 되는 것을 확인할수 있다.

 

 

- redo log 삭제

 

redo log 는 active 상태 일적에는 삭제가 불가능 하다,

내가 삭제하고자 하는 redo log 가 active 상태 일때에는 위의 명령어중 하나인,

 

SQL> alter system switch logfile;

 

으로 해당 파일을 inactive 상태로 변경후 삭제 하여야 한다.

 

삭제 SQL 은 다음과 같다.

 

SQL> alter database drop logfile group 4;

 

 

 

위의 명령어로 redo log 파일이 지워진 것을 확인 할수 있다.

 

하지만,

 

해당 redo log 는 오라클 상에서만 지워진 것이며, OS 상에서의 파일은 그대로 남아 있다.

용량을 차지 한다는 이유로 삭제 하였을 경우에는 OS 상에서 의 파일도 함께 삭제해 주어야 한다.

 

SQL> !ls /app_src/oracle/oradata/db11g/redo*

SQL> !rm /app_src/oracle/oradata/db11g/redo04.log

SQL> !ls /app_src/oracle/oradata/db11g/redo*

 

위와 같은 방법으로 redo log 파일을 검색 및 삭제 해줘야 완전한 삭제가 된다고 할수 있다.

 

redo log 파일의 삭제시 오류가 나는 것들은 다음과 같다.

 

redo log 파일이 ACTIVE 상태에서 삭제시 다음과 같은 에러가 나온다

ora-01624

ora-00312

 

 

redo log 파일이 CURRENT 상태에서 삭제시 다음과 같은 에러가 나온다

ora-01623

ora-00312