본문 바로가기

Database

REDO LOG 파일의 관리

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-


  • LOG 보기--

SELECT *

FROM V$LOG;



SELECT *

FROM V$LOGFILE;



=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-



  • LOG GROUP 추가

ALTER DATABASE

ADD LOGFILE 'C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORACLE10\REDO04.LOG'

SIZE 20M;


SELECT *

FROM V$LOG;


--새롭게 생성된 SEQ 가장 적게 부여 받게 되고, 로그 스위치 발생시 가장 먼저 사용되어 진다.


=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-



  • 로그 스위치 발생시키기

ALTER SYSTEM SWITCH LOGFILE;


SELECT *

FROM V$LOG;



CURRENT : 현재 사용중인 REDO LOGFILE

ACTIVE : 조금전 까지 CURRENT 사용되었던 REDO LOGFILE

INACTIVE : 조금전까지 ACTIVE 사용되었던 REDO LOGFILE



=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-


  • REDO LOG GROUP 추가

(실습을 위해 임의의 아래 경로를 생성 D:\REDOLOGFILEDIR)


    

ALTER DATABASE ADD LOGFILE MEMBER

'D:\REDOLOGFILEDIR\REDO01.LOG' TO GROUP 1,

'D:\REDOLOGFILEDIR\REDO02.LOG' TO GROUP 2,

'D:\REDOLOGFILEDIR\REDO03.LOG' TO GROUP 3,

'D:\REDOLOGFILEDIR\REDO04.LOG' TO GROUP 4;



위에서 생성할 때 용량에 관한 설정이 없었는데 생성된 로그 파일의 크기는

그 그룹에 존재하던 파일의 크기와 같이 생성되는 것을 확인할 수 있다.


SELECT *

FROM V$LOG;

SELECT *

FROM V$LOGFILE;

(STATUS에 BLACK (공백)인 것은 {null}과 같다. (보기 Option에서 설정을 해주기 나름, TOAD기준)
(INVAILD 는 한번도 사용되지 않은 LOGFILE을 의미하고 NULL은 LOG SWITCH가 한번이라도 발생된 로그파일을 의미한다.)


=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-


  • REDO LOG FILE 제거

ALTER DATABASE DROP LOGFILE GROUP 4;

(상태가 'current'이라면 지워지지 않는다., current active 사용 중이기 때문이다.)

하지만 물리적인 HDD 공간에서는 삭제가 되지 않았다


=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-


실제 물리적인 공간에서도 LOG 파일을 삭제시켜주기 위해서는 OEM REDO LOG GROUP을 생성해야 한다.

  • OMF(ORACLE MANAGEED FILES) REDO LOG GROUP 생성

SELECT *

FROM V$PARAMETER

WHERE NAME LIKE '%log%';


 

1

2

3

C:\ ~~~[ dest_1 ]

REDO01.LOG

REDO02.LOG

REDO03.LOG

D:\ REDOLOGFILEDIR [ dest_2 ]

REDO01.LOG

REDO02.LOG

REDO03.LOG

       

위와 같이 RAID 로 묶어 MIRRORING을 시킴으로써, DISK의 손상으로 인한 DATA의 유실을 방지할 수 있다.

ORACLE에서는 LOG FILE을 위 CAPTURE에서 살펴보듯이 5군대로 만들어 둘 수 있다.

db_create_onlie_log_dest_1과 db_create_onlie_log_dest_2에 이제 설정해보자.

--현재 시스템에서 로그파일의 위치

--C:\oracle\product\10.1.0\oradata\oracle10

--D:\REDOLOGFILEDIR


ALTER SYSTEM

SET db_create_online_log_dest_1='C:\oracle\product\10.1.0\oradata\oracle10'

SCOPE=BOTH;


ALTER SYSTEM

SET db_create_online_log_dest_2='D:\REDOLOGFILEDIR'

SCOPE=BOTH;



=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

  • 이제 LOG Group을 추가해보자.

우선 아래와 같이 로그파일을 생성해본다. 이때, 위에서 사용한 것과 달리 파일위치.파일명을 기입하지 않는다.


ALTER DATABASE

ADD LOGFILE SIZE 20M;




생성한 LOG 파일의 정보를 확인한다. 아래 그림에서와 같이 4번 그룹이 새롭게 생성된 것을 확인할 수 있다.


SELECT *

FROM v$log;

이제 위에서 방금 생성한 LOG Group 4번 FILE을 지워보자.

ALTER DATABASE DROP LOGFILE GROUP 4;

이제 해당 HDD로 이동하여 파일을 확인해보면, 깔끔히 지워진 것을 확인할 수 있다.


=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-


  • REDO LOG FILE MEMBER 제거

SELECT *

FROM V$LOG;

(--현재 CURRENT 상태인 것은 3번)


SELECT *

FROM V$LOGFILE;


현재 CURRENT 상태인 REDO3.LOG 파일을 삭제하여 본다.


ALTER DATABASE DROP LOGFILE MEMBER

'D:\REDOLOGFILEDIR\REDO03.LOG';

아래와 같은 오류메세지가 도출된다.


--ORA-01609: 3 로그는 1 스레드에 대한 현 로그 - 구성원을 삭제할 수 없습니다

--ORA-00312: 온라인 로그 3 스레드 1: 'C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORACLE10\REDO03.LOG'

--ORA-00312: 온라인 로그 3 스레드 1: 'D:\REDOLOGFILEDIR\REDO03.LOG'



현재 CURRENT 상태이기 때문에 지워지지 않는 것이다. 그러므로 다시 로그스위치를 발생시켜 지워줄 로그파일을 ACTIVE 상태로 변경 후, 다시 지워보자.


ALTER SYSTEM SWITCH LOGFILE;


ALTER DATABASE DROP LOGFILE MEMBER

'D:\REDOLOGFILEDIR\REDO03.LOG';


--위에서 다시 DROP 실행해 보면 지워지는 것을 있다. 그룹의 경우 ACTIVE에서는 지워지지 안핬는데,

--MEMBER 경우 ACTIVE라도 삭제가 가능하다.

--하지만 탐색기에서는 파일이 여전히 남아 있다. 탐색기에서도 지우기 위해서는 Omf이여야만 한다.


SELECT *

FROM V$LOG;



위와 동일하게 'D:\REDOLOGFILEDIR\ 생성한 LOG 파일을 지워보면 아래와 같이 날라가는 것을 확인할 있다.

SELECT *

FROM V$LOGFILE;


=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-