프린트 하기

OS환경 : Oracle Linux 7.6 (64bit)

 

DB 환경 : Oracle Database 12.2.0.1

 

방법 : 오라클 12c R2 RAC to RAC ADG redo log 삭제 및 추가 및 리사이즈 하기

12c R2 rac to rac adg 환경에서 redo log 사이즈를 변경하는 방법을 설명함

구성 : Primary RAC 1번노드(ora1), Primary RAC(ora2) 2번노드,

Standby RAC(oradr1) 1번노드, Standby RAC(oradr2) 2번노드

 

 

현재 db 확인

Primary DB 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
Primary DB 확인
SQL> select status, instance_name, database_role from v$database, v$instance;
 
STATUS         INSTANCE_NAME    DATABASE_ROLE
------------ ---------------- ----------------
OPEN         ora1          PRIMARY
 
Standby DB 확인
SQL> select status, instance_name, database_role from v$database, v$instance;
 
STATUS         INSTANCE_NAME    DATABASE_ROLE
------------ ---------------- ----------------
OPEN         oradr1          PHYSICAL STANDBY

 

 

현재 상태 확인

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
Primary RAC redo 확인
SQL>
set lines 200
set pages 1000
col member for a60
select thread#, l.group#, member, archived, l.status, (bytes/1024/1024) MB
from v$log l, v$logfile f
where f.group# = l.group#
order by 12
/
 
   THREAD#     GROUP# MEMBER                               ARC STATUS            MB
---------- ---------- ------------------------------------------------------------ --- ---------------- ----------
     1        1 +DATA/ORA/ONLINELOG/group_1.265.1107771227           NO  CURRENT               200
     1        1 +DATA/ORA/ONLINELOG/group_1.263.1107771227           NO  CURRENT               200
     1        2 +DATA/ORA/ONLINELOG/group_2.266.1107771229           YES INACTIVE            200
     1        2 +DATA/ORA/ONLINELOG/group_2.264.1107771227           YES INACTIVE            200
     2        3 +DATA/ORA/ONLINELOG/group_3.269.1107771375           NO  CURRENT               200
     2        3 +DATA/ORA/ONLINELOG/group_3.270.1107771375           NO  CURRENT               200
     2        4 +DATA/ORA/ONLINELOG/group_4.271.1107771377           YES INACTIVE            200
     2        4 +DATA/ORA/ONLINELOG/group_4.272.1107771377           YES INACTIVE            200
8 rows selected.
 
Primary RAC standby redo 확인
SQL>
set lines 200
set pages 1000
col member for a60
select thread#, l.group#, member, archived, l.status, (bytes/1024/1024) MB
from v$standby_log l, v$logfile f
where f.group# = l.group#
order by 12
/
 
   THREAD#     GROUP# MEMBER                               ARC STATUS          MB
---------- ---------- ------------------------------------------------------------ --- ---------- ----------
     1        5 +DATA/ORA/ONLINELOG/group_5.274.1107805449           YES UNASSIGNED     200
     1        6 +DATA/ORA/ONLINELOG/group_6.275.1107805449           YES UNASSIGNED     200
     1        7 +DATA/ORA/ONLINELOG/group_7.276.1107805449           YES UNASSIGNED     200
     2        8 +DATA/ORA/ONLINELOG/group_8.277.1107805457           YES UNASSIGNED     200
     2        9 +DATA/ORA/ONLINELOG/group_9.278.1107805457           YES UNASSIGNED     200
     2       10 +DATA/ORA/ONLINELOG/group_10.279.1107805457           YES UNASSIGNED     200
 
6 rows selected.
 
 
Standby RAC redo 확인
SQL>
set lines 200
set pages 1000
col member for a60
select thread#, l.group#, member, archived, l.status, (bytes/1024/1024) MB
from v$log l, v$logfile f
where f.group# = l.group#
order by 12
/
 
   THREAD#     GROUP# MEMBER                               ARC STATUS            MB
---------- ---------- ------------------------------------------------------------ --- ---------------- ----------
     1        1 +DATA/ORADR/ONLINELOG/group_1.266.1107807889           YES UNUSED               200
     1        1 +DATA/ORADR/ONLINELOG/group_1.265.1107807887           YES UNUSED               200
     1        2 +DATA/ORADR/ONLINELOG/group_2.268.1107807889           YES UNUSED               200
     1        2 +DATA/ORADR/ONLINELOG/group_2.267.1107807889           YES UNUSED               200
     2        3 +DATA/ORADR/ONLINELOG/group_3.269.1107807889           YES UNUSED               200
     2        3 +DATA/ORADR/ONLINELOG/group_3.270.1107807891           YES UNUSED               200
     2        4 +DATA/ORADR/ONLINELOG/group_4.271.1107807891           YES UNUSED               200
     2        4 +DATA/ORADR/ONLINELOG/group_4.272.1107807891           YES UNUSED               200
 
8 rows selected.
 
Standby RAC standby redo 확인
SQL>
set lines 200
set pages 1000
col member for a60
select thread#, l.group#, member, archived, l.status, (bytes/1024/1024) MB
from v$standby_log l, v$logfile f
where f.group# = l.group#
order by 12
/
 
   THREAD#     GROUP# MEMBER                               ARC STATUS          MB
---------- ---------- ------------------------------------------------------------ --- ---------- ----------
     1        5 +DATA/ORADR/ONLINELOG/group_5.273.1107807891           YES ACTIVE         200
     1        5 +DATA/ORADR/ONLINELOG/group_5.274.1107807893           YES ACTIVE         200
     1        6 +DATA/ORADR/ONLINELOG/group_6.275.1107807893           NO  UNASSIGNED     200
     1        6 +DATA/ORADR/ONLINELOG/group_6.276.1107807893           NO  UNASSIGNED     200
     1        7 +DATA/ORADR/ONLINELOG/group_7.278.1107807893           YES UNASSIGNED     200
     1        7 +DATA/ORADR/ONLINELOG/group_7.277.1107807893           YES UNASSIGNED     200
     2        8 +DATA/ORADR/ONLINELOG/group_8.279.1107807895           YES ACTIVE         200
     2        8 +DATA/ORADR/ONLINELOG/group_8.280.1107807895           YES ACTIVE         200
     2        9 +DATA/ORADR/ONLINELOG/group_9.282.1107807895           NO  UNASSIGNED     200
     2        9 +DATA/ORADR/ONLINELOG/group_9.281.1107807895           NO  UNASSIGNED     200
     2       10 +DATA/ORADR/ONLINELOG/group_10.284.1107807897           YES UNASSIGNED     200
     2       10 +DATA/ORADR/ONLINELOG/group_10.283.1107807897           YES UNASSIGNED     200
 
12 rows selected.

 

 

Standby RAC DB에서 standby_file_management 파라미터 auto 에서 manual로 변경

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SQL> show parameter standby_file_management
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
standby_file_management              string      AUTO
 
SQL> alter system set standby_file_management=manual;
 
System altered.
 
SQL> show parameter standby_file_management
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
standby_file_management              string      MANUAL

 

 

*Primary 전에 Standby RAC의 redo들을 먼저 add 해도됨

1. Primary RAC redo 변경

a. 리두로그 상태가 INACTIVE 인 경우

1
2
3
4
5
6
7
8
9
리두로그 그룹 삭제
SQL> alter database drop logfile group n;
 
Database altered.
 
리두 사이즈 변경 후 다시 추가
SQL> alter database add logfile thread 1 group n '+DATA' size 500m;
 
Database altered.

 

 

b. 리두로그 상태가 ACTIVE 인 경우

1
2
3
4
5
6
7
8
9
10
11
12
13
14
체크포인트 실행
SQL> alter system checkpoint;
 
System altered.
 
리두로그 상태가 INACTIVE로 변경되면 리두로그 그룹 삭제
SQL> alter database drop logfile group n;
 
Database altered.
 
리두 사이즈 변경 후 다시 추가
SQL> alter database add logfile thread 1 group n '+DATA' size 500m;
 
Database altered.

 

 

c. 리두로그 상태가 CURRENT 인 경우

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
로그 스위치를 실행해서 상태를 ACTIVE로 만들고
SQL> alter system switch logfile; 
 
System altered.
 
ACTIVE 상태에서 체크포인트 실행하여 INACTIVE로 만들어줌
SQL> alter system checkpoint;
 
System altered.
 
리두로그 상태가 INACTIVE로 변경되면 리두로그 그룹 삭제
SQL> alter database drop logfile group n;
 
Database altered.
 
리두 사이즈 변경 후 다시 추가
SQL> alter database add logfile thread 1 group n '+DATA' size 500m;
 
Database altered.

 

 

나머지 thread 와 group도 순차적으로 모두 진행

 

 

2. Primary RAC standby redo 변경

Primary 데이터베이스의 standby redo(SRL) 상태는 Primary 데이터베이스가 Standby(Switchover)로 동작하기 시작할 때만 사용되므로 UNASSIGNED 상태로 표시됨 이 경우 그냥 리두 삭제 후 재생성 해주면됨

a. 리두로그 상태가 UNASSIGNED 인 경우

1
2
3
4
5
6
7
8
9
바로 drop 후
SQL> alter database drop standby logfile group n;
 
Database altered.
 
리두 재생성
SQL> alter database add standby logfile thread 1 group n size 500M;
 
Database altered.

 

 

나머지 thread 와 group도 순차적으로 모두 진행

 

 

3. Standby RAC redo 변경

a. Standby DB 의 redo를 변경하기 전에 mrp 프로세스를 중지 시켜야함

1
2
3
4
5
6
7
8
9
10
11
mrp 프로세스 확인
SQL> select inst_id, client_process,process,status,sequence# from gv$managed_standby where process like 'MRP%';
 
   INST_ID CLIENT_P PROCESS   STATUS        SEQUENCE#
---------- -------- --------- ------------ ----------
     1 N/A        MRP0      APPLYING_LOG       32
 
mrp 프로세스 중지
SQL> alter database recover managed standby database cancel;
 
Database altered.

 

 

b. 리두로그 상태가 UNUSED 인 경우

1
2
3
4
5
6
7
8
9
미사용 상태이기 때문에 리두로그 그룹 삭제 후 
SQL> alter database drop logfile group n;
 
Database altered.
 
리두 사이즈 변경 후 다시 추가
SQL> alter database add logfile thread 1 group n '+DATA' size 500m;
 
Database altered.

 

 

c. 리두로그 상태가 CLEARING 인 경우

1
2
3
4
5
6
7
8
9
10
11
12
13
14
해당 리두 group을 clear해줌
SQL> alter database clear logfile group n;
 
Database altered.
 
리두로그 상태가 변경되면 리두로그 그룹 삭제
SQL> alter database drop logfile group n;
 
Database altered.
 
리두 사이즈 변경 후 다시 추가
SQL> alter database add logfile thread 1 group n '+DATA' size 500m;
 
Database altered.

 

 

d. 리두로그 상태가 CURRENT 인 경우

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
기다리거나 log switch를 해야하는데 standby 여서 로그스위치가 안된다면
standby_file_management=auto 및 mrp 가동 후 
SQL> alter system set standby_file_management=auto;
 
System altered.
 
SQL> alter database recover managed standby database disconnect from session using current logfile;
 
Database altered.
 
다시 standby_file_management=manual 및 mrp 프로세스 중지
SQL> alter system set standby_file_management=manual;
 
System altered.
 
SQL> alter database recover managed standby database cancel;
 
Database altered.
 
리두로그 상태가 변경되면 리두로그 그룹 삭제
SQL> alter database drop logfile group n;
 
Database altered.
 
리두 사이즈 변경 후 다시 추가
SQL> alter database add logfile thread 1 group n '+DATA' size 500m;
 
Database altered.

 

 

나머지 thread 와 group도 순차적으로 모두 진행

 

 

Standby RAC standby redo 변경

a. 리두로그 상태가 UNASSIGNED 인 경우

1
2
3
4
5
6
7
8
9
바로 리두 삭제 후 
SQL> alter database drop standby logfile group n;
 
Database altered.
 
리두 재생성
SQL> alter database add standby logfile thread 1 group n size 500M;
 
Database altered.

 

 

b. 리두로그 상태가 ACTIVE 인 경우

1
2
3
4
5
6
7
8
9
10
11
12
13
14
해당 리두 group을 clear해줌(standby redo 여도 그냥 clear logfile 명령 사용)
SQL> alter database clear logfile group n;
 
Database altered.
 
리두로그 상태가 UNASSIGNED 으로 변경되었으면 삭제 후
SQL> alter database drop standby logfile group n;
 
Database altered.
 
리두 재생성
SQL> alter database add standby logfile thread 1 group n size 500M;
 
Database altered.

 

 

나머지 thread 와 group도 순차적으로 모두 진행

 

 

Primary RAC redo, Primary RAC standby redo, Standby RAC redo, Standby RAC standby redo 모두 변경 완료 후

mrp 프로세스 재가동 및 standby_file_management 파라미터 원복

1
2
3
4
5
6
7
SQL> alter system set standby_file_management=auto;
 
System altered.
 
SQL> alter database recover managed standby database disconnect from session using current logfile;
 
Database altered.

 

 

standby_file_management 파라미터 및 mrp 프로세스 확인

1
2
3
4
5
SQL> show parameter standby_file_management
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
standby_file_management              string      AUTO

 

 

mrp 프로세스 확인

1
2
3
4
5
SQL> select inst_id, client_process,process,status,sequence# from gv$managed_standby where process like 'MRP%';
 
   INST_ID CLIENT_P PROCESS   STATUS        SEQUENCE#
---------- -------- --------- ------------ ----------
     1 N/A        MRP0      WAIT_FOR_LOG       22

 

 

Primary, Standby 모두 리두 시퀀스 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
Primary RAC 시퀀스 확인
SQL> select max(sequence#) from v$archived_log;
 
MAX(SEQUENCE#)
--------------
        31
 
Standby RAC 시퀀스 확인
SQL> select max(sequence#) from v$archived_log where applied='YES';
 
MAX(SEQUENCE#)
--------------
31

 

 

dataguard gap 체크

1
SQL> select * from v$dataguard_stats;

 

 

참고사항

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
리두 멤버가 이중화 되어있는 경우 리두 삭제 방법
멤버 1개 삭제 후
SQL> alter database drop standby logfile member '+DATA/~파일명 작성';
 
Database altered.
 
멤버 1개만 남은 상태에서 리두 삭제
SQL> alter database drop standby logfile group n;
 
Database altered.
 
리두 멤버를 이중화 할경우 리두 사이즈 변경 후 다시 추가
SQL> alter database add standby logfile thread 1 group n ('+DATA','+DATA') size 500m;
 
Database altered.

 

 

참조 : 

1532566.1

https://positivemh.tistory.com/284