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가 더 고생을 할 것이라는 소리다. }}}