Controlfile다중화, Redologfile다중화, 데이터베이스로그모드

Controlfile다중화

  • Controlfile은 DB당 하나만 존재하면 됨.
    • 컨트롤파일이 날라갔다 = DB가 날라갔다, 컨트롤파일이 과거로 되돌아가는 것 = DB가 과거로 되돌아 가는 것
    • 이렇듯 너무나 중요한 Control file은 백업으로는 역부족하여 데이터손실이 날 수 있으므로 Control file다중화를 통해서 동시 운영하는 것을 권장.
  • Control file다중화
    • 최대 8개까지 다중화 기능이 제공되고 오라클 3개 권장
    • 다중화가 많을 수록 안정성, 성능↓ (3개든 5개든 다중화 갯수만큼 동시에 기록해야해서 성능떨어짐)
    • 다중화가 적을 수록 안정성↓, 성능
    • 다중화시킬때는 경로를 나눠서 운영해야함. 예를 들어 c드라이브와 d드라이브에 하나씩.




현재 controlfile 정보조회

  • controlfile은 다른 경로로 다중화해야지 안정성
1
2
3
4
5
6
7
8
9
//현재 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




다중화 순서

  1. DB에 Controlfile 추가
    • 지금 두개 등록되어있다고 하나만 등록하게되면 2개에서 1개로 바뀌어버린다. => 3개로 다중화하고싶다면 3개 다 작성해야한다.
    • scope옵션 3가지
      • memory : 지금 당장 적용. 현재 DB의 parameter 만 수정하며, spfile 은 수정하지 않는다. 재시작 하면 원래 spfile 설정값으로 돌아간다. 3번째 컨트롤파일 추가하는 과정에서는 현재 3번째 컨트롤파일을 존재하지않기때문에 현 시점에서 사용 불가능.
      • both : 현재 DB 의 parameter 와 spfile 모두 수정한다. default 값. 3번째 컨트롤파일 추가하는 과정에서는 현재 3번째 컨트롤파일을 존재하지않기때문에 현 시점에서 사용 불가능.
      • spfile : Spfile만 수정한다. (정적인 파라미터 수정에서는 필수다)
  2. DB 종료
    • SQL> ! -> 작업후 -> $> exit: 지금 sys접속된 상태에서 잠시 나갔다가 다시 들어오는 명령어
    • SQL> exit -> 작업후 -> $>sqlplus "sys/oracle as sysdba" : 아예 DB나간 뒤 다시 접속
  3. OS에 Controlfile 추가
  4. DB 시작
    • 정상적으로 처리되는 경우 아무런 출력 값이 나타나지않는다.
    • 에러발생하는 경우
      • Error의 의미는 mount가 되지 않았다는 의미
      • 파라미터(SQL> show parameter control_files;)를 확인하여 오타난 부분을 찾은 뒤 1번부터 다시 진행한다.
  5. 다중화가 잘 되었는지 확인(DB가 open되어 있어야 확인가능)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
//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;

System altered.

//2.DB 종료
SQL> shut immediate

Database closed.
Database dismounted.
ORACLE instance shut down.

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
1
2
3
4
5
SQL> select status from v$instance;

STATUS
------------------------
OPEN




Redologfile다중화

  • Redologfile은 DB에서발생된 변경 작업의 로그정보(Redo data)가 기록된 공간
  • 다중화 개수 제한 없음
  • 다중화가 많을 수록 안정성, 성능↓
  • 로그스위칭 : 순환형으로 관리되는 파일로 덮어써진다.
    • 그룹번호는 항상 순차적이어야 로그스위칭이 정상적으로 일어난다.
  • 새로 추가할 그룸 멤버들은 기존에 있는 멤버와 같은 size이어야한다. => 다중화시 굳이 명시할 필요가 없어서 해당 명령어가 없다.
  • 그룹안의 멤버수는 서로 동일하거나 비슷하게 디자인한다.




Redologfile 확인 : 쿼리구문 두가지로 확인해야한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
SQL> select group#, members 
2 from v$log;

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

1 /u01/app/oracle/fast_recovery_
area/orcl/ORCL/onlinelog/o1_mf
_1_fwvn9o6v_.log

2 /u01/app/oracle/oradata/ORCL/o
nlinelog/o1_mf_2_fwvn9ddv_.log

2 /u01/app/oracle/fast_recovery_

GROUP# MEMBER
---------- ------------------------------
area/orcl/ORCL/onlinelog/o1_mf
_2_fwvn9l85_.log

3 /u01/app/oracle/oradata/ORCL/o
nlinelog/o1_mf_3_fwvn9t6z_.log

3 /u01/app/oracle/fast_recovery_
area/orcl/ORCL/onlinelog/o1_mf
_3_fwvn9xf6_.log

6 rows selected.




다중화 순서

  1. redo log group 추가
  2. redo log member 추가
    • 멤버 만들고 싶은 그룹만 만들어도 된다. 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
20
//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




Database log mode

  • Database log mode는 2가지가 있다
    1. Noarchive log mode : redologfile에 로그스위치 발생시 순환하면서 덮어씀
    2. Archive log mode : redologfile에 로그스위치 발생시 offline 복사본 생성함. 즉 archive log file 운영함




DB log mode 조회

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//첫번째 조회방법
SQL> select log_mode from v$database;

LOG_MODE
------------------------
NOARCHIVELOG


//두번째 조회방법
SQL> archive log list
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 36
Current log sequence 38




순서

  1. DB 종료
  2. DB MOUNT
  3. DB LOG MODE 설정
    • SQL> alter database archivelog; : Archive log mode모드로 변경
    • SQL> alter database noarchivelog; : Noarchive log mode로 변경
  4. DB OPEN
  5. 처리결과확인
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
//1. DB 종료
SQL> shut immediate

Database closed.
Database dismounted.
ORACLE instance shut down.

//2. DB MOUNT
SQL> startup mount

ORACLE instance started.
Total System Global Area 838860800 bytes
Fixed Size 8626240 bytes
Variable Size 620761024 bytes
Database Buffers 201326592 bytes
Redo Buffers 8146944 bytes
Database mounted.

//3. DB LOG MODE 설정
SQL> alter database archivelog;
또는
SQL> alter database noarchivelog;

Database altered.

//4. DB OPEN
SQL> alter database open;

Database altered.

//5. 처리결과확인
SQL> archive log list

Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 36
Next log sequence to archive 38
Current log sequence 38

Comments