부리부리

ORACLE 7장 REDO LOGFILE 본문

ORACLE

ORACLE 7장 REDO LOGFILE

구리불주먹 2019. 1. 24. 18:04
반응형
SMALL

-CONTROLFILE 위치 이동


SYS로 접속한뒤 @CTL

>SHUTDOWN IMMEDIATE

>STARTUP

SYS@TestDB> alter system set control_files='C:\ADISK\DISK1\CONTROL01.CTL',

  2  'C:\ADISK\DISK2\CONTROL02.CTL',

  3  'C:\ADISK\DISK3\CONTROL03.CTL' SCOPE=SPFILE;


시스템이 변경되었습니다.

SYS@TestDB>>SHUTDOWN IMMEDIATE


ADISK에 있는 CONTROLFILE 01,02,03

C:\APP\ITWILL\ORADATA\TESTDB 옮기기


SYS@TestDB>>STARTUP


-REDO LOGFILE 


복구를 하기위해 사용

반드시 그룹화되어있어야한다

그룹은 최소2개이상되어야한다

아카이브와 REDO LOG로 복구를 하기때문에 !



--REDO LOG PAGE2--


REDO01.LOG -GROUP1

REDO02.LOG -GROUP2

REDO03.LOG -GROUP3


그룹안엔 하나에 멤버가 존재해야함


멤버를 하나씩 더 만들어 놓는이유는 DISK1이 망가졌을때 

나머지 GROUP1,GROUP2,3을 못쓰기때문에 

DISK2에 똑같은걸 하나 더 만들어 놓음 


REDO FILE이 용량이 꽉차면 LOG SWITCH가 일어나서 다음 파일로 넘어가서 기록

(최소3초마다 일어남)



-P3

LOG FILE은 순환식

LOG FILE 꽉차면 LGWR이 다음 LOG GROUP으로 이동해서 씀

-이것을 LOG SWITCH 라고 부른다 

-CKPT가 발생한다(LOG SWITCH 가 발생하면서 CKPT 를 불러와서 DBWR불러와서 버퍼에 덮어 띄어주고 CONTROLFILE에 기록 /거기에 DB와 LOG에 시퀀스 넘버를 부여함)

-CONTROL FILE 정보도 씀





--P4
기본 DEFAULT 크기 50M
G1말고 G2에 쓰게끔 하는 명령어 ALTER SYSTEM SWITCH LOGFILE;
-FAST_START_MTTR_TARGET=600 / 600초 마다 LOG SWITCH를 자동으로 발생
-CKPT를 강제로 발생 (DBWR불러와서 내려쓰고 CONTROL FILE에 기록하고) LOGSWITCH를 강제로 발생시킬땐 무조건 CKPT를 실행해야한다

왜냐면 G1에서 G2로 강제 로그스위치 발생시 시퀀스 넘버는 기존에 이미 받아놓은상태에서 강제로 변경하면 CKPT를 안불러옴 , 그러므로 ALTER SYSTEM CHECKPOINT 명령어도 같이 실행해야함



--P5
GROUP안에 멤버에 SIZE는 똑같아야함
GROUP마다 사이즈를 똑같이 만들 필요는 없음!
/*
확장자는 RDO (REDO의 약자)
UNDO= 안함
REDO =다시
*/





--P12
SYS@TestDB> SELECT * FROM V$LOG;

    GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE    MEMBERS ARC
---------- ---------- ---------- ---------- ---------- ---------- ---
STATUS           FIRST_CHANGE# FIRST_TI NEXT_CHANGE# NEXT_TIM
---------------- ------------- -------- ------------ --------
         1           1         34   52428800        512          1 NO
CURRENT                 1725290 19/01/24   2.8147E+14

         2          1         32   52428800        512          1 NO
INACTIVE               1657158 19/01/23      1690472 19/01/23

         3          1         33   52428800        512          1 NO
INACTIVE               1690472 19/01/23      1725290 19/01/24


-GROUP에 대한 정보

SYS@TestDB> SELECT * FROM V$LOGFILE;

    GROUP# STATUS  TYPE
---------- ------- -------
MEMBER
--------------------------------------------------------------

IS_
---
         3         ONLINE
C:\APP\ITWILL\ORADATA\TESTDB\REDO03.LOG --LOGFILE의 위치정보
NO

         2         ONLINE
C:\APP\ITWILL\ORADATA\TESTDB\REDO02.LOG
NO

    GROUP# STATUS  TYPE
---------- ------- -------
MEMBER
--------------------------------------------------------------

IS_
---

         1         ONLINE
C:\APP\ITWILL\ORADATA\TESTDB\REDO01.LOG
NO

->그룹넘버로 조인을 할수있음

SELECT A.GROUP#,MEMBER,BYTES,SEQUENCE#,B.STATUS
FROM V$LOGFILE A,V$LOG B
WHERE A.GROUP#=B.GROUP#
/

-결과
> /

    GROUP# MEMBER                             BYTES  SEQUENCE# STATUS
---------- ----------------------------- ---------- ---------- --------------
         3 C:\APP\ITWILL\ORADATA\TESTDB\   52428800         33 INACTIVE
           REDO03.LOG

         2 C:\APP\ITWILL\ORADATA\TESTDB\   52428800         32 INACTIVE
           REDO02.LOG

         1 C:\APP\ITWILL\ORADATA\TESTDB\   52428800         34 CURRENT
           REDO01.LOG
         1
C:\APP\ITWILL\ORADATA\TESTDB\REDO01.LOG
  52428800         34 CURRENT


-CURRENT가 현재 LGWR가 쓰고있는 LOG
34번째 LOG 파일을 쓰고있다는 뜻

사용자가 기록중에 COMMIT을 하지 않은상태에서 LOGSWITCH가 일어나면 G1 은 ACTIVE
그상태에서 COMMIT을 하게 되면 INACTIVE

SYS@TestDB> ALTER SYSTEM SWITCH LOGFILE;

시스템이 변경되었습니다.

SYS@TestDB> @LOG

    GROUP# MEMBER                             BYTES  SEQUENCE# STATUS
---------- ----------------------------- ---------- ---------- ------------
         1 C:\APP\ITWILL\ORADATA\TESTDB\   52428800         34 ACTIVE
           REDO01.LOG

         2 C:\APP\ITWILL\ORADATA\TESTDB\   52428800         35 CURRENT
           REDO02.LOG

         3 C:\APP\ITWILL\ORADATA\TESTDB\   52428800         33 INACTIVE
           REDO03.LOG

-->CHECKPOINT 를 호출하는 이유는 DBWR는 아직 COMMIT되지 않아서 DB에 내려쓰지 않은상태이기 때문에 LOG

파일은 ACTIVE상태가 된거임 /  그러므로 CHECKPOINT 를 호출하게 되면 DBWR를 호출해서 DB를 내려쓰게 만들기때문에 INACTIVE상태가 됨

SYS@TestDB> ALTER SYSTEM CHECKPOINT;

시스템이 변경되었습니다.

SYS@TestDB> @LOG

    GROUP# MEMBER                             BYTES  SEQUENCE# STATUS
---------- ----------------------------- ---------- ---------- -----------
         1 C:\APP\ITWILL\ORADATA\TESTDB\   52428800         34 INACTIVE
           REDO01.LOG

         2 C:\APP\ITWILL\ORADATA\TESTDB\   52428800         35 INACTIVE
           REDO02.LOG

         3 C:\APP\ITWILL\ORADATA\TESTDB\   52428800         36 CURRENT
           REDO03.LOG

결국엔 DB에 작성하고 COMMIT상태와 CKPT를호출하는거랑 똑같은거


/*
SYS@TestDB> COL MEMBER FORMAT A29
MEMBER라는 컬럼은 무조건 45자로 맞추는 명령어


C:\Users\itwill
COL MEMBER FORMAT A29

SELECT A.GROUP#,MEMBER,BYTES,SEQUENCE#,B.STATUS
FROM V$LOGFILE A,V$LOG B
WHERE A.GROUP#=B.GROUP#
ORDER BY A.GROUP#
/

->저장
*/

SWITCH.SQL -> 
ALTER SYSTEM SWITCH LOGFILE;
ALTER SYSTEM CHECKPOINT;
--'/'를 지우는 이유는 마지막 문장을 실행한다는 뜻이기때문에 LOGFILE뒤에 세미콜론넣어주고 / 는 삭체

-GROUP4만들기 

SYS@TestDB> ALTER DATABASE ADD LOGFILE GROUP 4
  2  'C:\APP\ITWILL\ORADATA\TESTDB\REDO04A.LOG' SIZE 10M;

데이타베이스가 변경되었습니다.

SYS@TestDB> @LOG

    GROUP# MEMBER                             BYTES  SEQUENCE# STATUS
---------- ----------------------------- ---------- ---------- -------------
         1 C:\APP\ITWILL\ORADATA\TESTDB\   52428800         46 CURRENT
           REDO01.LOG

         2 C:\APP\ITWILL\ORADATA\TESTDB\   52428800         44 INACTIVE
           REDO02.LOG

         3 C:\APP\ITWILL\ORADATA\TESTDB\   52428800         45 INACTIVE
           REDO03.LOG

         4 C:\APP\ITWILL\ORADATA\TESTDB\   10485760          0 UNUSED
           REDO04A.LOG


->LOG SWITCH 발생하면 무조건 새로 만든걸로 이동함 1->4->2->3->1 로 순서가 바뀜
바뀐 순서대로 실행함

-MEMBER만들기
위치가 다르기 때문에 이름은 똑같이 만들어줌 / BUT 우리는 같은공간에 만들기 때문에 이름을 바꿔서 만들어줄거

SYS@TestDB> ALTER DATABASE ADD LOGFILE MEMBER
  2  'C:\APP\ITWILL\ORADATA\TESTDB\REDO04B.LOG' TO GROUP 4;

데이타베이스가 변경되었습니다.

SYS@TestDB> @LOG

    GROUP# MEMBER                             BYTES  SEQUENCE# STATUS
---------- ----------------------------- ---------- ---------- ------------
         1 C:\APP\ITWILL\ORADATA\TESTDB\   52428800         50 CURRENT
           REDO01.LOG

         2 C:\APP\ITWILL\ORADATA\TESTDB\   52428800         48 INACTIVE
           REDO02.LOG

         3 C:\APP\ITWILL\ORADATA\TESTDB\   52428800         49 INACTIVE
           REDO03.LOG

         4 C:\APP\ITWILL\ORADATA\TESTDB\   10485760         47 INACTIVE
           REDO04B.LOG

    GROUP# MEMBER                             BYTES  SEQUENCE# STATUS
---------- ----------------------------- ---------- ---------- ------------

         4 C:\APP\ITWILL\ORADATA\TESTDB\   10485760         47 INACTIVE
           REDO04A.LOG
->GROUP4에 MEMBER가 만들어짐

LOG SWITCH 후 
SYS@TestDB> @LOG

    GROUP# MEMBER                             BYTES  SEQUENCE# STATUS
---------- ----------------------------- ---------- ---------- -----------
         1 C:\APP\ITWILL\ORADATA\TESTDB\   52428800         50 INACTIVE
           REDO01.LOG

         2 C:\APP\ITWILL\ORADATA\TESTDB\   52428800         48 INACTIVE
           REDO02.LOG

         3 C:\APP\ITWILL\ORADATA\TESTDB\   52428800         49 INACTIVE
           REDO03.LOG

         4 C:\APP\ITWILL\ORADATA\TESTDB\   10485760         51 CURRENT
           REDO04B.LOG

    GROUP# MEMBER                             BYTES  SEQUENCE# STATUS
---------- ----------------------------- ---------- ---------- -----------

         4 C:\APP\ITWILL\ORADATA\TESTDB\   10485760         51 CURRENT
           REDO04A.LOG

GROUP4는 같이 CURRENT가 됨

--삭제
SYS@TestDB> ALTER DATABASE DROP LOGFILE MEMBER
  2  'C:\APP\ITWILL\ORADATA\TESTDB\REDO04B';
ALTER DATABASE DROP LOGFILE MEMBER
*
1행에 오류:
1행에 오류:
ORA-01609: 4 로그는 1 스레드에 대한 현 로그 - 구성원을 삭제할 수 없습니다
ORA-00312: 온라인 로그 4 스레드 1: 'C:\APP\ITWILL\ORADATA\TESTDB\REDO04A.LOG'
ORA-00312: 온라인 로그 4 스레드 1: 'C:\APP\ITWILL\ORADATA\TESTDB\REDO04B.LOG'
->CURRENT는 지울수 없음

SYS@TestDB> ALTER DATABASE DROP LOGFILE MEMBER
  2  'C:\APP\ITWILL\ORADATA\TESTDB\REDO04B.LOG';

데이타베이스가 변경되었습니다.
SYS@TestDB> @LOG

    GROUP# MEMBER                             BYTES  SEQUENCE# STATUS
---------- ----------------------------- ---------- ---------- -------------
         1 C:\APP\ITWILL\ORADATA\TESTDB\   52428800         50 INACTIVE
           REDO01.LOG

         2 C:\APP\ITWILL\ORADATA\TESTDB\   52428800         52 CURRENT
           REDO02.LOG

         3 C:\APP\ITWILL\ORADATA\TESTDB\   52428800         49 INACTIVE
           REDO03.LOG

         4 C:\APP\ITWILL\ORADATA\TESTDB\   10485760         51 INACTIVE
           REDO04A.LOG

    GROUP# MEMBER                             BYTES  SEQUENCE# STATUS
---------- ----------------------------- ---------- ---------- -------------



SYS@TestDB> ALTER DATABASE DROP LOGFILE MEMBER
  2  'C:\APP\ITWILL\ORADATA\TESTDB\REDO04A.LOG';
ALTER DATABASE DROP LOGFILE MEMBER
*
1행에 오류:
ORA-00361: 마지막 로그 멤버 C:\APP\ITWILL\ORADATA\TESTDB\REDO04A.LOG는 그룹 4를
옮길수 없습니다


->결국엔 MEMBER는 지우지 못하고 GROUP으로 지워야됨

SYS@TestDB> ALTER DATABASE DROP LOGFILE GROUP 4;

데이타베이스가 변경되었습니다.

SYS@TestDB> @LOG

    GROUP# MEMBER                             BYTES  SEQUENCE# STATUS
---------- ----------------------------- ---------- ---------- ----------
         1 C:\APP\ITWILL\ORADATA\TESTDB\   52428800         50 INACTIVE
           REDO01.LOG

         2 C:\APP\ITWILL\ORADATA\TESTDB\   52428800         52 CURRENT
           REDO02.LOG

         3 C:\APP\ITWILL\ORADATA\TESTDB\   52428800         49 INACTIVE
           REDO03.LOG

--LOG FILE 다른 DISK폴더로 옮기기

C:\aDisk
C:\APP\ITWILL\ORADATA\TESTDB\ 에 GROUP5까지 만들고 1,2,3삭제 
->GROUP은 최소 2개있어야하니까 바로 5까지 만들어야함
ADISK 안에 DISK1,2,3에 LOG 1,2,3 각각 만들고 
GROUP 4,5삭제 

SYS@TestDB> @LOG

    GROUP# MEMBER                             BYTES  SEQUENCE# STATUS
---------- ----------------------------- ---------- ---------- -----------
         1 C:\ADISK\DISK1\REDO01.LOG       52428800         60 CURRENT
         2 C:\ADISK\DISK2\REDO02.LOG       52428800          0 UNUSED
         3 C:\ADISK\DISK3\REDO03.LOG       52428800          0 UNUSED

-->DISK가 달라졌기때문에 이름은 같게 만들고 MEMBER를 생성가능
BUT , 만들고 삭제하면 복구가 안됨 


















반응형
LIST

'ORACLE' 카테고리의 다른 글

ORACLE 6장 CONTROL FILE  (0) 2019.01.24
ORACLE 8장 TABLESPACE AND DATAFILE  (0) 2019.01.24
ORACLE 구조  (0) 2019.01.23
ORACLE PACKAGE (PROCEDURE 묶음)  (0) 2019.01.22
ORACLE 설치  (0) 2019.01.22