Describe 리두로그파일의이중화작업 here
SQL> -- 리두로그 파일의 이중화 작업
SQL> set linesize 150 pagesize 999
SQL> connect internal
연결되었습니다.
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TI
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------
1 1 658 1048576 1 NO INACTIVE 472248 03/10/30
2 1 659 1048576 1 NO CURRENT 472305 03/10/30
3 1 657 1048576 1 NO INACTIVE 452040 03/10/24
SQL> select 1024*1024 from dual;
1024*1024
----------
1048576
SQL> -- 1MB씩 잡혀 있는 것이 보인다....절라 작게 잡아 놨다..
SQL> select * from tab
2 where tname like '%FILE%';
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
C_FILE#_BLOCK# CLUSTER
DBA_DATA_FILES VIEW
DBA_EXP_FILES VIEW
DBA_PROFILES VIEW
DBA_TEMP_FILES VIEW
FILE$ TABLE
FILEXT$ VIEW
GV_$BACKUP_DATAFILE VIEW
GV_$CONTROLFILE VIEW
GV_$CONTROLFILE_RECORD_SECTION VIEW
GV_$DATAFILE VIEW
GV_$DATAFILE_COPY VIEW
GV_$DATAFILE_HEADER VIEW
GV_$DBFILE VIEW
GV_$FILESTAT VIEW
GV_$FILE_PING VIEW
GV_$LOGFILE VIEW
GV_$PROXY_DATAFILE VIEW
GV_$PWFILE_USERS VIEW
GV_$RECOVERY_FILE_STATUS VIEW
GV_$RECOVER_FILE VIEW
GV_$TEMPFILE VIEW
LOADER_FILE_TS VIEW
PROFILE$ TABLE
SYSFILES VIEW
V_$BACKUP_DATAFILE VIEW
V_$CONTROLFILE VIEW
V_$CONTROLFILE_RECORD_SECTION VIEW
V_$DATAFILE VIEW
V_$DATAFILE_COPY VIEW
V_$DATAFILE_HEADER VIEW
V_$DBFILE VIEW
V_$FILESTAT VIEW
V_$FILE_PING VIEW
V_$LOGFILE VIEW
V_$PROXY_DATAFILE VIEW
V_$PWFILE_USERS VIEW
V_$RECOVERY_FILE_STATUS VIEW
V_$RECOVER_FILE VIEW
V_$TEMPFILE VIEW
40 개의 행이 선택되었습니다.
SQL> select * from v$logfile;
GROUP# STATUS MEMBER
---------- ------- -----------------------------------
1 STALE E:\ORACLE\ORADATA\ORA816\REDO03.LOG
3 STALE E:\ORACLE\ORADATA\ORA816\REDO01.LOG
2 E:\ORACLE\ORADATA\ORA816\REDO02.LOG
SQL> -- 여기에서는 같은 디스크에 있지만 실제로는 분산되어야 한다.
SQL> -- 또한 현재는 로그 파일을 순환하면서 사용되고 있다고 보면 안되고, 그룹으로 순환한다고
SQL> -- 생각해야 한다.
SQL> -- 로그 파일 그룹 추가
SQL> alter database add logfile group 4
2 ('E:\ORACLE\ORADATA\ORA816\REDO04.LOG') size 1M;
데이타베이스가 변경되었습니다.
SQL> -- 다음과 같이 두개를 맴버까지 같이 추가할 수 있다.
SQL> alter database add logfile group 5
2 ('E:\ORACLE\ORADATA\ORA816\REDO05.LOG',
3 'E:\ORACLE\ORADATA\ORA816\REDO05_2.LOG') size 1M;
데이타베이스가 변경되었습니다.
SQL> --맴버만 추가
SQL> --맴버에는 size 설정이 없다. 왜냐하면 맴버끼리는 파일 크기가 같아야 이중화가 될 수 있기 때문이다.
SQL> alter database add logfile member 'E:\ORACLE\ORADATA\ORA816\REDO01_2.LOG'
2 to group 1;
데이타베이스가 변경되었습니다.
SQL> alter database add logfile member 'E:\ORACLE\ORADATA\ORA816\REDO02_2.LOG'
2 to group 2;
데이타베이스가 변경되었습니다.
SQL> alter database add logfile member 'E:\ORACLE\ORADATA\ORA816\REDO03_2.LOG'
2 to group 3;
데이타베이스가 변경되었습니다.
SQL> alter database add logfile member 'E:\ORACLE\ORADATA\ORA816\REDO04_2.LOG'
2 to group 4;
데이타베이스가 변경되었습니다.
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TI
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------
1 1 658 1048576 2 NO INACTIVE 472248 03/10/30
2 1 659 1048576 2 NO CURRENT 472305 03/10/30
3 1 657 1048576 2 NO INACTIVE 452040 03/10/24
4 1 0 1048576 2 YES UNUSED 0
5 1 0 1048576 2 YES UNUSED 0
SQL> col group# format 999
SQL> col status format a20
SQL> col member format a50
SQL> select * from v$logfile;
GROUP# STATUS MEMBER
------ -------------------- --------------------------------------------------
1 STALE E:\ORACLE\ORADATA\ORA816\REDO03.LOG
3 STALE E:\ORACLE\ORADATA\ORA816\REDO01.LOG
2 E:\ORACLE\ORADATA\ORA816\REDO02.LOG
4 E:\ORACLE\ORADATA\ORA816\REDO04.LOG
5 E:\ORACLE\ORADATA\ORA816\REDO05.LOG
5 E:\ORACLE\ORADATA\ORA816\REDO05_2.LOG
1 INVALID E:\ORACLE\ORADATA\ORA816\REDO01_2.LOG
2 INVALID E:\ORACLE\ORADATA\ORA816\REDO02_2.LOG
3 INVALID E:\ORACLE\ORADATA\ORA816\REDO03_2.LOG
4 INVALID E:\ORACLE\ORADATA\ORA816\REDO04_2.LOG
10 개의 행이 선택되었습니다.
SQL>
리두로그 파일을 서로 다른 디스크에 분산 시키는 것은 아주 중요하다. 왜냐하면 수시로 LGWR가
쓰기 때문에 경합을 줄이는 것도 중요하고, 로그 쓰기라는 DBMS의 필수적인 일에 서비스에 대한
영향을 최소화 할 수 있기 때문이다.
리두로그 파일의 이중화는 안정성면에서는 높이 사주만 하지만 위의 실습처럼 했을 때 로그를 쓰기
위해서 LGWR 프로세스는 더 열심히 일해야 할 것이다. 즉, CPU가 더 고생을 할 것이라는 소리다.