내맘대로긍정이 알려주는
Oracle 23ai 신기능
무료 세미나 발표자료
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 1, 2
/
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 1, 2
/
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 1, 2
/
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 1, 2
/
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
'ORACLE > Rac' 카테고리의 다른 글
오라클 11g R2 RAC OS 커널 패치시 작업 가이드 (0) | 2022.01.15 |
---|---|
오라클 19c RAC Grid 문제 시 재설치 가이드 (0) | 2022.01.05 |
오라클 19c RAC /etc /opt 등 파일이 제거된 경우 조치방안 (2) | 2022.01.01 |
오라클 19c RAC ora.chad 리소스 offline 인 경우 조치방안 (0) | 2021.12.31 |
오라클 19c RAC sqlnet.ora SQLNET.AUTHENTICATION_SERVICES = (NONE) 설정 시 발생하는 문제 (0) | 2021.12.26 |