--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 , 만들고 삭제하면 복구가 안됨