오라클 DB - REDO LOG FILE
로그 스위치 - LGWR는 온라인 리두 로그 파일에 순차적으로 기록합니다. 현재 온라인 리두 로그 파일 그
룹이 가득 찼을 때 LGWR는 다음 그룹에 기록하기 시작합니다.
로그 스위치 및 체크포인트 시행
ALTER / SYSTEM / SWITCH / LOGFILE - 다음명령으로 로그 스위치 실행
FAST_START_MTTR_TARGET 매개변수 설정
FAST_START_MTTR_TARGET = 600
ALTER SYSTEM CHECKPOINT 명령
ALTER SYSTEM CHECKPOINT;
온라인 리두 로그 파일 그룹 추가
ALTER DATABASE ADD LOGFILE GROUP 3
('$HOME/ORADATA/u01/log3a.rdo',
'$HOME/ORADATA/u02/log3b.rdo')
SIZE 1M; --------------- > 미러셋이라 크기까지 같은 1M이다.
온라인 리두 로그 파일 멤버 추가
ALTER DATABASE ADD LOGFILE MEMBER
'$HOME/ORADATA/u04/log1c.rdo' TO GROUP 1,
'$HOME/ORADATA/u04/log2c.rdo' TO GROUP 2,
'$HOME/ORADATA/u04/log3c.rdo' TO GROUP 3;
온라인 리두 로그 파일 그룹 삭제
ALTER DATABASE DROP LOGFILE GROUP 3;
온라인 리두 로그 파일 멤버 삭제
ALTER DATABASE DROP LOGFILE MEMBER
'$HOME/ORADATA/u04/log3c.rdo';
Redo log file 관리
실습 4.1 Redo log file 확인 (필)
사용 명령어
SQL> SELECT A.GROUP#, A.MEMBER, B.BYTES, B.STATUS, B.SEQUENCE#
2 FROM V$LOGFILE A, V$LOG B
3 WHERE A.GROUP# = B.GROUP#
4 ORDER BY 1;
- 현재 log 그룹과 member의 운영 상황을 조회한다.
- GROUP# : 그룹 번호
- MEMBER : 멤버 파일의 경로 및 파일명
- BYTES : 멤버 파일의 크기
- STATUS : 그룹의 상태 [표 4.1]을참고 한다.
SQL> ARCHIVE LOG LIST
- Archive log 관련 내용을 조회한다.
- Archive log mode가 아닌 경우 조회된 내용은 별 의미가 없다.
SQL> SELECT a.group#, a.member, b.bytes, b.status, b.sequence#
2 FROM v$logfile a, v$log b
3 WHERE a.group# = b.group#
4 ORDER BY 1;
GROUP# MEMBER BYTES STATUS SEQUENCE#
---------- -------------------------------------- ---------- ---------------- ----------
1 /app/ora19c/oradata/DB19/redo01.log 209715200 INACTIVE 1
2 /app/ora19c/oradata/DB19/redo02.log 209715200 CURRENT 2
3 /app/ora19c/oradata/DB19/redo03.log 209715200 UNUSED 0
SQL> ARCHIVE LOG LIST
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination /app/ora19c/19c/dbs/arch
Oldest online log sequence 1
Current log sequence 2
실습 4.2 Log switch와 checkpoint (필)
사용 명령어
SQL> ALTER SYSTEM SWITCH LOGFILE;
- Log switch를 강제로 발생 시킨다.
SQL> ALTER SYSTEM CHECKPOINT;
- Check point를 강제로 발생 시킨다.
SQL> SELECT a.group#, a.member, b.bytes, b.status, b.sequence#
2 FROM v$logfile a, v$log b
3 WHERE a.group# = b.group#
4 ORDER BY 1;
GROUP# MEMBER BYTES STATUS SEQUENCE#
---------- -------------------------------------- ---------- --------- ----------
1 /app/ora19c/oradata/DB19/redo01.log 209715200 INACTIVE 1
2 /app/ora19c/oradata/DB19/redo02.log 209715200 CURRENT 2
3 /app/ora19c/oradata/DB19/redo03.log 209715200 UNUSED 0
SQL> ALTER DATABASE DROP LOGFILE GROUP 2;
ALTER DATABASE DROP LOGFILE GROUP 2
*
ERROR at line 1:
ORA-01623: log 2 is current log for instance DB19 (thread 1) - cannot drop
ORA-00312: online log 2 thread 1: '/app/ora19c/oradata/DB19/redo02.log'
SQL> ALTER SYSTEM SWITCH LOGFILE;
System altered.
SQL> SELECT a.group#, a.member, b.bytes, b.status, b.sequence#
2 FROM v$logfile a, v$log b
3 WHERE a.group# = b.group#
4 ORDER BY 1;
GROUP# MEMBER BYTES STATUS SEQUENCE#
---------- -------------------------------------- ---------- ---------- ----------
1 /app/ora19c/oradata/DB19/redo01.log 209715200 INACTIVE 1
2 /app/ora19c/oradata/DB19/redo02.log 209715200 ACTIVE 2
3 /app/ora19c/oradata/DB19/redo03.log 209715200 CURRENT 3
SQL> ALTER SYSTEM CHECKPOINT;
System altered.
SQL> SELECT a.group#, a.member, b.bytes, b.status, b.sequence#
2 FROM v$logfile a, v$log b
3 WHERE a.group# = b.group#
4 ORDER BY 1;
GROUP# MEMBER BYTES STATUS SEQUENCE#
------- -------------------------------------- ---------- ---------------- ---------
1 /app/ora19c/oradata/DB19/redo01.log 209715200 INACTIVE 1
2 /app/ora19c/oradata/DB19/redo02.log 209715200 INACTIVE 2
3 /app/ora19c/oradata/DB19/redo03.log 209715200 CURRENT 3
SQL> !vi switch.sql
ALTER SYSTEM SWITCH LOGFILE;
ALTER SYSTEM CHECKPOINT;
SQL> @switch
System altered.
System altered.
SQL> SELECT a.group#, a.member, b.bytes, b.status, b.sequence#
2 FROM v$logfile a, v$log b
3 WHERE a.group# = b.group#
4 ORDER BY 1;
GROUP# MEMBER BYTES STATUS SEQUENCE#
------ -------------------------------------- ---------- ---------------- ---------
1 /app/ora19c/oradata/DB19/redo01.log 209715200 CURRENT 4
2 /app/ora19c/oradata/DB19/redo02.log 209715200 INACTIVE 2
3 /app/ora19c/oradata/DB19/redo03.log 209715200 INACTIVE 3
실습 4.3 Redo log group 추가와 삭제 (필)
사용 명령어
SQL> ALTER DATABASE DROP LOGFILE GROUP [group number];
- 지정한 redo log group을 삭제한다.
SQL> ALTER DATABASE ADD LOGFILE GROUP [group number]
2 (['member file1', 'member file2', ... ]) SIZE [크기];
- redo log group을 추가한다. [group number]는 생략 가능하다.
SQL> SELECT a.group#, a.member, b.bytes, b.status, b.sequence#
2 FROM v$logfile a, v$log b
3 WHERE a.group# = b.group#
4 ORDER BY 1;
GROUP# MEMBER BYTES STATUS SEQUENCE#
------ -------------------------------------- ---------- ---------------- ---------
1 /app/ora19c/oradata/DB19/redo01.log 209715200 CURRENT 4
2 /app/ora19c/oradata/DB19/redo02.log 209715200 INACTIVE 2
3 /app/ora19c/oradata/DB19/redo03.log 209715200 INACTIVE 3
SQL> ALTER DATABASE DROP LOGFILE GROUP 3;
Database altered.
SQL> SELECT a.group#, a.member, b.bytes, b.status, b.sequence#
2 FROM v$logfile a, v$log b
3 WHERE a.group# = b.group#
4 ORDER BY 1;
GROUP# MEMBER BYTES STATUS SEQUENCE#
------ -------------------------------------- ---------- ---------------- ---------
1 /app/ora19c/oradata/DB19/redo01.log 209715200 CURRENT 4
2 /app/ora19c/oradata/DB19/redo02.log 209715200 INACTIVE 2
SQL> !ls /app/ora19c/oradata/DB19/
redo01.log redo03.log system01.dbf undotbs01.dbf
redo02.log sysaux01.dbf temp01.dbf users01.dbf
SQL> !rm /app/ora19c/oradata/DB19/redo03.log
SQL> ALTER DATABASE ADD LOGFILE GROUP 4
2 '/app/ora19c/oradata/DB19/redo04.log' SIZE 50M;
Database altered.
SQL> SELECT a.group#, a.member, b.bytes, b.status, b.sequence#
2 FROM v$logfile a, v$log b
3 WHERE a.group# = b.group#
4 ORDER BY 1;
GROUP# MEMBER BYTES STATUS SEQUENCE#
------- -------------------------------------- ---------- ---------------- ---------
1 /app/ora19c/oradata/DB19/redo01.log 209715200 CURRENT 4
2 /app/ora19c/oradata/DB19/redo02.log 209715200 INACTIVE 2
4 /app/ora19c/oradata/DB19/redo04.log 52428800 UNUSED 0
SQL> @switch
System altered.
System altered.
SQL> SELECT a.group#, a.member, b.bytes, b.status, b.sequence#
2 FROM v$logfile a, v$log b
3 WHERE a.group# = b.group#
4 ORDER BY 1;
GROUP# MEMBER BYTES STATUS SEQUENCE#
------ -------------------------------------- ---------- ---------------- ---------
1 /app/ora19c/oradata/DB19/redo01.log 209715200 INACTIVE 4
2 /app/ora19c/oradata/DB19/redo02.log 209715200 INACTIVE 2
4 /app/ora19c/oradata/DB19/redo04.log 52428800 CURRENT 5
SQL> ALTER DATABASE ADD LOGFILE GROUP 5
2 '/app/ora19c/oradata/DB19/redo05.log' SIZE 50M;
Database altered.
SQL> SELECT a.group#, a.member, b.bytes, b.status, b.sequence#
2 FROM v$logfile a, v$log b
3 WHERE a.group# = b.group#
4 ORDER BY 1;
GROUP# MEMBER BYTES STATUS SEQUENCE#
------ -------------------------------------- ---------- ---------------- ----------
1 /app/ora19c/oradata/DB19/redo01.log 209715200 INACTIVE 4
2 /app/ora19c/oradata/DB19/redo02.log 209715200 INACTIVE 2
4 /app/ora19c/oradata/DB19/redo04.log 52428800 CURRENT 5
5 /app/ora19c/oradata/DB19/redo05.log 52428800 UNUSED 0
SQL> @switch
System altered.
System altered.
SQL> SELECT a.group#, a.member, b.bytes, b.status, b.sequence#
2 FROM v$logfile a, v$log b
3 WHERE a.group# = b.group#
4 ORDER BY 1;
GROUP# MEMBER BYTES STATUS SEQUENCE#
------- -------------------------------------- ---------- ---------------- ---------
1 /app/ora19c/oradata/DB19/redo01.log 209715200 INACTIVE 4
2 /app/ora19c/oradata/DB19/redo02.log 209715200 INACTIVE 2
4 /app/ora19c/oradata/DB19/redo04.log 52428800 INACTIVE 5
5 /app/ora19c/oradata/DB19/redo05.log 52428800 CURRENT 6
실습 4.4 Redo log member 추가와 삭제 (필)
사용 명령어
SQL> ALTER DATABASE DROP LOGFILE MEMBER
2 ['member file1', 'member file2', ...]
- 지정한 멤버 파일을 삭제한다.
SQL> ALTER DATABASE ADD LOGFILE MEMBER
2 ['member file'] TO GROUP [group nember],
3 ... ;
- redo log 멤버 파일을 지정한 그룹에 추가한다.
SQL> ALTER DATABASE ADD LOGFILE MEMBER
2 '/app/ora19c/oradata/DB19/redo04_2.log' TO GROUP 4,
3 '/app/ora19c/oradata/DB19/redo05_2.log' TO GROUP 5;
System altered.
SQL> SELECT a.group#, a.member, b.bytes, b.status, b.sequence#
2 FROM v$logfile a, v$log b
3 WHERE a.group# = b.group#
4 ORDER BY 1;
GROUP# MEMBER BYTES STATUS SEQUENCE#
------- -------------------------------------- ---------- ---------------- ----------
1 /app/ora19c/oradata/DB19/redo01.log 209715200 INACTIVE 4
2 /app/ora19c/oradata/DB19/redo02.log 209715200 INACTIVE 2
4 /app/ora19c/oradata/DB19/redo04_2.log 52428800 INACTIVE 5
4 /app/ora19c/oradata/DB19/redo04.log 52428800 INACTIVE 5
5 /app/ora19c/oradata/DB19/redo05_2.log 52428800 CURRENT 6
5 /app/ora19c/oradata/DB19/redo05.log 52428800 CURRENT 6
6 rows selected.
SQL> ALTER DATABASE DROP LOGFILE MEMBER
2 '/app/ora19c/oradata/DB19/redo04.log';
ALTER DATABASE DROP LOGFILE MEMBER
*
ERROR at line 1:
ORA-00362: member is required to form a valid logfile in group 4
ORA-01517: log member: '/app/ora19c/oradata/DB19/redo04.log'
SQL> ALTER DATABASE DROP LOGFILE MEMBER
2 '/app/ora19c/oradata/DB19/redo01.log';
ALTER DATABASE DROP LOGFILE MEMBER
*
ERROR at line 1:
ORA-00361: cannot remove last log member /app/ora19c/oradata/DB19/redo01.log for group 1
SQL> @switch
System altered.
System altered.
SQL> @switch
System altered.
System altered.
SQL> @switch
System altered.
System altered.
SQL> @switch
System altered.
System altered.
SQL> SELECT a.group#, a.member, b.bytes, b.status, b.sequence#
2 FROM v$logfile a, v$log b
3 WHERE a.group# = b.group#
4 ORDER BY 1;
GROUP# MEMBER BYTES STATUS SEQUENCE#
------ -------------------------------------- ---------- ---------------- ---------
1 /app/ora19c/oradata/DB19/redo01.log 209715200 INACTIVE 8
2 /app/ora19c/oradata/DB19/redo02.log 209715200 INACTIVE 7
4 /app/ora19c/oradata/DB19/redo04_2.log 5242880 INACTIVE 9
4 /app/ora19c/oradata/DB19/redo04.log 5242880 INACTIVE 9
5 /app/ora19c/oradata/DB19/redo05_2.log 5242880 CURRENT 10
5 /app/ora19c/oradata/DB19/redo05.log 5242880 CURRENT 10
6 rows selected.
SQL> ALTER DATABASE DROP LOGFILE MEMBER
2 '/app/ora19c/oradata/DB19/redo04.log';
Database altered.
SQL> SELECT a.group#, a.member, b.bytes, b.status, b.sequence#
2 FROM v$logfile a, v$log b
3 WHERE a.group# = b.group#
4 ORDER BY 1;
GROUP# MEMBER BYTES STATUS SEQUENCE#
------ -------------------------------------- ---------- ---------------- ----------
1 /app/ora19c/oradata/DB19/redo01.log 209715200 INACTIVE 8
2 /app/ora19c/oradata/DB19/redo02.log 209715200 INACTIVE 7
4 /app/ora19c/oradata/DB19/redo04_2.log 5242880 INACTIVE 9
5 /app/ora19c/oradata/DB19/redo05_2.log 5242880 CURRENT 10
5 /app/ora19c/oradata/DB19/redo05.log 5242880 CURRENT 10