■ Redo log file
(=: 일기쓰기: 일기 내용에 일어난 일에 대해 자세히 적어두면 나중에 확인가능하다)
1. 복구 방식 제공
2. 최소 두개 이상의 그룹 필요, 순환 형식이기 때문에
# SQL
SELECT * FROM v$log;
SELECT * FROM v$logfile;
SELECT * FROM v$log_history;
FIRST_CHANGE# ~ NEXT_CHANGE# : SCN 범위
## 운영중에 가능 하나, CURRENT 를 제외하고
# Redo log file GROUP 추가
ALTER DATABASE ADD LOGFILE GROUP 4 ('' 물리적인 장소 , '');
SQL> show parameter control_files
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_files string
/u01/app/oracle/oradata/ora11g /control01.ctl, /u01/app/oracle/fast_recovery_area/ora11g/control02.ctl
[oracle@oracle ora11g]$ ls
control01.ctl redo01.log redo03.log system01.dbf undotbs01.dbf
example01.dbf redo02.log sysaux01.dbf temp01.dbf users01.dbf
[oracle@oracle ora11g]$ pwd
/u01/app/oracle/oradata/ora11g
ALTER DATABASE ADD LOGFILE GROUP 4 ('/u01/app/oracle/oradata/ora11g/redo04.log ',
'/u01/app/oracle/fast_recovery_area/ora11g/redo04.log') size 100m;
SELECT * FROM v$logfile;
SELECT * FROM v$log;
새로 만든 logfile > os 기능으로 생성, writer 성능을 좋게 하기 위해서 : blocksize 용량
cf) log_buffer : os block size 배수 단위로 설정(512byte)
ALTER DATABASE ADD LOGFILE GROUP 5 ('/u01/app/oracle/oradata/ora11g/redo05.log',
'/u01/app/oracle/fast_recovery_area/ora11g/redo05.log') size 100m;
SELECT * FROM v$logfile;
SELECT * FROM v$log;
SELECT to_char(first_time, 'yyyy-mm-dd hh24:mi:ss') FROM v$log_history;
SELECT
sequence#,
first_change#,
next_change#,
to_char(first_time, 'yyyy-mm-dd hh24:mi:ss')
FROM
v$log_history;
# Redo log file MEMBER 추가
ALTER DATABASE ADD LOGFILE MEMBER
'경로/파일', TO GROUP 그룹숫자, '경로/파일', TO GROUP 그룹숫자, ... '경로/파일', TO GROUP 그룹숫자;
ALTER DATABASE ADD LOGFILE MEMBER
'/u01/app/oracle/fast_recovery_area/ora11g/redo01.log' TO GROUP 1,
'/u01/app/oracle/fast_recovery_area/ora11g/redo02.log' TO GROUP 2,
'/u01/app/oracle/fast_recovery_area/ora11g/redo03.log' TO GROUP 3;
SELECT * FROM v$log;
SELECT * FROM v$logfile;
INVALID : 빈 껍데기와 동
MEMBER 물리적으로 다른 위치에 생성할 것
[oracle@oracle ~]$ cd /u01/app/oracle/fast_recovery_area/ora11g/
[oracle@oracle ora11g]$ pwd
/u01/app/oracle/fast_recovery_area/ora11g
[oracle@oracle ora11g]$ ls
control02.ctl redo01.log redo02.log redo03.log redo04.log redo05.log
[oracle@oracle ora11g]$ ls -l
total 367940
-rw-r-----. 1 oracle oinstall 9748480 Dec 12 21:14 control02.ctl
-rw-r-----. 1 oracle oinstall 52429312 Dec 12 21:10 redo01.log : 아무것도 없는 파일
-rw-r-----. 1 oracle oinstall 52429312 Dec 12 21:10 redo02.log : 아무것도 없는 파일
-rw-r-----. 1 oracle oinstall 52429312 Dec 12 21:10 redo03.log : 아무것도 없는 파일
-rw-r-----. 1 oracle oinstall 104858112 Dec 12 20:25 redo04.log
-rw-r-----. 1 oracle oinstall 104858112 Dec 12 20:36 redo05.log
# Redo log file GROUP 삭제
1. redo log group 상태가 inactive 상태인 그룹에 대해서 삭제할 수 있다.
ALTER DATABASE DROP LOGFILE GROUP 그룹숫;
ALTER DATABASE DROP LOGFILE GROUP 1;
SELECT * FROM v$log; -- ACTIVE 상태일 경우, 기다려야 한다.
# ACTIVE -> INACTIVE 로 상태 변경
ALTER SYSTEM CHECKPOINT;
SELECT * FROM v$log;
ALTER DATABASE DROP LOGFILE GROUP 1;
ALTER DATABASE DROP LOGFILE GROUP 2;
ALTER DATABASE DROP LOGFILE GROUP 3;
하고 난 후 추가해주자
오류발생
/u01/app/oracle/oradata/ora11g/ , /u01/app/oracle/fast_recovery_area/ora11g/ 파일 있는지 확인
# 그룹을 삭제한 후 물리적인 디렉터리에 가서도 꼭 그룹에 해당하는 파일 삭제
# 꼭 주의!! 지워야 하는 파일만 삭제할 것.
/u01/app/oracle/oradata/ora11g/'
[oracle@oracle ora11g]$ rm -i redo01.log redo02.log redo03.log
'/u01/app/oracle/fast_recovery_area/ora11g/'
[oracle@oracle ora11g]$ rm -i redo01.log redo02.log redo03.log
# Redo log file MEMBER 삭제
1. redo log group 상태가 inactive 상태인 그룹에 member를 삭제할 수 있다.
ALTER DATABASE DROP LOGFILE MEMBER '/home/oracle/backup/redo06.log';
# member을 삭제한 후 물리적인 디렉터리에 가서도 꼭 당하는 파일 삭제
# 꼭 주의!! 지워야 하는 파일만 삭제할 것.
[oracle@oracle backup]$ rm -i redo06.log
rm: remove regular file ‘redo06.log’? y
# 수동으로 log swtich 발생
ALTER SYSTEM SWITCH LOGFILE
SELECT * FROM v$log;
SELECT * FROM v$logfile;