컨트롤파일이 날라갔다 = DB가 날라갔다, 컨트롤파일이 과거로 되돌아가는 것 = DB가 과거로 되돌아 가는 것
이렇듯 너무나 중요한 Control file은 백업으로는 역부족하여 데이터손실이 날 수 있으므로 Control file다중화를 통해서 동시 운영하는 것을 권장.
Control file다중화
최대 8개까지 다중화 기능이 제공되고 오라클 3개 권장
다중화가 많을 수록 안정성, 성능↓ (3개든 5개든 다중화 갯수만큼 동시에 기록해야해서 성능떨어짐)
다중화가 적을 수록 안정성↓, 성능
다중화시킬때는 경로를 나눠서 운영해야함. 예를 들어 c드라이브와 d드라이브에 하나씩.
현재 controlfile 정보조회
controlfile은 다른 경로로 다중화해야지 안정성
1 2 3 4 5 6 7 8
//현재 controlfile정보조회 SQL> select name SQL> from v$controlfile;
NAME -------------------------------------------------------------------------------- /u01/app/oracle/oradata/ORCL/controlfile/o1_mf_fwvn95xm_.ctl /u01/app/oracle/fast_recovery_area/orcl/ORCL/controlfile/o1_mf_fwvn96cd_.ctl
다중화 순서
DB에 Controlfile 추가
지금 두개 등록되어있다고 하나만 등록하게되면 2개에서 1개로 바뀌어버린다. => 3개로 다중화하고싶다면 3개 다 작성해야한다.
scope옵션 3가지
memory : 지금 당장 적용. 현재 DB의 parameter 만 수정하며, spfile 은 수정하지 않는다. 재시작 하면 원래 spfile 설정값으로 돌아간다. 3번째 컨트롤파일 추가하는 과정에서는 현재 3번째 컨트롤파일을 존재하지않기때문에 현 시점에서 사용 불가능.
both : 현재 DB 의 parameter 와 spfile 모두 수정한다. default 값. 3번째 컨트롤파일 추가하는 과정에서는 현재 3번째 컨트롤파일을 존재하지않기때문에 현 시점에서 사용 불가능.
spfile : Spfile만 수정한다. (정적인 파라미터 수정에서는 필수다)
DB 종료
SQL> ! -> 작업후 -> $> exit: 지금 sys접속된 상태에서 잠시 나갔다가 다시 들어오는 명령어
SQL> exit -> 작업후 -> $>sqlplus "sys/oracle as sysdba" : 아예 DB나간 뒤 다시 접속
OS에 Controlfile 추가
DB 시작
정상적으로 처리되는 경우 아무런 출력 값이 나타나지않는다.
에러발생하는 경우
Error의 의미는 mount가 되지 않았다는 의미
파라미터(SQL> show parameter control_files;)를 확인하여 오타난 부분을 찾은 뒤 1번부터 다시 진행한다.
//1.DB에 Controlfile 추가(다중화) SQL> alter system set control_files= '/u01/app/oracle/oradata/ORCL/controlfile/o1_mf_fwvn95xm_.ctl', '/u01/app/oracle/fast_recovery_area/orcl/ORCL/controlfile/o1_mf_fwvn96cd_.ctl', '/home/oracle/control103.ctl' scope = spfile;
SQL> ! (지금 sys접속된 상태에서 잠시 나갔다가 다시 들어오는 명령어) 또는 SQL> exit (아예 DB나간 뒤 다시 접속)
//3.OS에 Controlfile 추가 [oracle@localhost ~]$ cd /u01/app/oracle/oradata/ORCL/controlfile/ [oracle@localhost controlfile]$ cp o1_mf_fwvn95xm_.ctl /home/oracle/control103.ctl
$> exit
//4.DB 시작 SQL> startup
//정상적으로 처리되는 경우 아무런 출력값이 나타나지않는다. //4-1. DB시작시 에러발생하는 경우 SQL> startup => Error //Error의 의미는 mount가 되지 않았다는 의미 //이럴결우 파라미터를 확인하여서 오타난 부분을 찾은 뒤 1번부터 다시 진행한다. SQL> show parameter control_files;
//5.Controlfile다중화확인 (3개인지 확인!) SQL> select name from v$controlfile; NAME -------------------------------------------------------------------------------- /u01/app/oracle/oradata/ORCL/controlfile/o1_mf_fwvn95xm_.ctl /u01/app/oracle/fast_recovery_area/orcl/ORCL/controlfile/o1_mf_fwvn96cd_.ctl /home/oracle/control103.ctl
GROUP# MEMBERS ---------- ---------- 1 2 2 2 3 2 SQL> select group#, member 1 from v$logfile 2 order by group# ; GROUP# MEMBER ---------- ------------------------------ 1 /u01/app/oracle/oradata/ORCL/o nlinelog/o1_mf_1_fwvn9ddb_.log
멤버 만들고 싶은 그룹만 만들어도 된다. ex to group 1과 to group 3만 생성 가능
하지만 실무에선 그룹별 멤버수를 동일하게 관리하는 편이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
//1.redo log group 추가 SQL> ed 1 alter database add logfile group 4 2 ('/u01/app/oracle/oradata/ORCL/onlinelog/redo4a.log', 3 '/u01/app/oracle/fast_recovery_area/orcl/ORCL/onlinelog/redo4b.log') 4* size 50M SQL> /
Database altered.
//2.redo log member 추가 SQL> ed 1 alter database add logfile member 2 '/u01/app/oracle/oradata/ORCL/datafile/redo1c.log' to group 1, 3 '/u01/app/oracle/oradata/ORCL/datafile/redo2c.log' to group 2, 4 '/u01/app/oracle/oradata/ORCL/datafile/redo3c.log' to group 3, 5* '/u01/app/oracle/oradata/ORCL/datafile/redo4c.log' to group 4 SQL> / alter database add logfile member