OS 환경 : Oracle Linux 9.6 (64bit)
DB 환경 : Oracle Database 19.28.0.0
방법 : 오라클 19c ADG Gap 발생시 rman duplicate 재수행 복구 시나리오
현재 오라클 19c Restart(ASM) to 싱글(FS) ADG가 구축되어 있는 상태임
참고 : 오라클 19c Restart(ASM) to 싱글(FS) ADG 구성 가이드 ( https://positivemh.tistory.com/1391 )
현재 상태에서 네트워크 장애를 발생시키고 강제로 아카이브를 유실시켜 gap을 만들고
이 장애를 해결하기 위해 rman duplicate를 재수행하는 시나리오를 테스트해봄
테스트
아카이브 갭 등 정상여부 확인
|
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
|
#Primary
SQL>
set lines 200 pages 1000
select dest_id, db_unique_name, status, database_mode, recovery_mode, db_unique_name, gap_status
from v$archive_dest_status
where dest_id <=2
order by 1,2;
DEST_ID DB_UNIQUE_NAME STATUS DATABASE_MODE RECOVERY_MODE DB_UNIQUE_NAME GAP_STATUS
---------- ------------------------------ --------- --------------- ---------------------------------- ------------------------------ ------------------------
1 oracle19 VALID OPEN IDLE oracle19
2 oracle19stb VALID OPEN_READ-ONLY MANAGED REAL TIME APPLY WITH QUERY oracle19stb NO GAP
#Standby
SQL>
set lines 200 pages 1000
select dest_id, db_unique_name, status, database_mode, recovery_mode, db_unique_name, gap_status
from v$archive_dest_status
where dest_id <=2
order by 1,2;
DEST_ID DB_UNIQUE_NAME STATUS DATABASE_MODE RECOVERY_MODE DB_UNIQUE_NAME GAP_STATUS
---------- ------------------------------ --------- --------------- ---------------------------------- ------------------------------ ------------------------
1 oracle19stb VALID OPEN_READ-ONLY MANAGED REAL TIME APPLY oracle19stb
2 oracle19 VALID UNKNOWN IDLE oracle19
|
현재 adg는 정상적인 상태임
Standby db의 네트워크를 잠시 내려놓음(장애 발생 상황 가정)
|
1
2
3
4
5
6
7
8
9
10
|
# ifconfig
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.137.60 netmask 255.255.255.0 broadcast 192.168.137.255
ether 00:50:56:a8:f1:2c txqueuelen 1000 (Ethernet)
RX packets 474857 bytes 8816967143 (8.2 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 162866 bytes 37564406 (35.8 MiB)
TX errors 0 dropped 801 overruns 0 carrier 0 collisions 0
# nmcli connection down ens160
|
Primary에서 로그 스위치 수행
|
1
2
3
4
5
6
7
8
9
10
11
|
SQL> alter system switch logfile;
System altered.
SQL> /
System altered.
SQL> /
System altered.
|
3회 수행함
Primary alert log에 아래와 같이 에러가 남음
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
$ tail -300f /app/oracle/diag/rdbms/oracle19/oracle19/trace/alert_oracle19.log
2026-06-07T20:04:23.853966+09:00
Errors in file /app/oracle/diag/rdbms/oracle19/oracle19/trace/oracle19_tt02_85677.trc:
ORA-16038: log 3 sequence# 60 cannot be archived
2026-06-07T20:04:23.854554+09:00
Errors in file /app/oracle/diag/rdbms/oracle19/oracle19/trace/oracle19_tt02_85677.trc:
ORA-16038: log 3 sequence# 60 cannot be archived <<--!!
2026-06-07T20:06:26.472711+09:00
TMON (PID:44675): Process (PID:44782) hung on an I/O to LAD:2 after 270 seconds with threshold of 240 at [krsu.c:10195]
TMON (PID:44675): WARN: Terminating process hung on an operation (PID:44782)
2026-06-07T20:06:30.669332+09:00
TMON (PID:44675): Killing 1 processes (PIDS:44782) (Process by index) in order to remove hung processes. Requested by OS process 44675
2026-06-07T20:06:30.670125+09:00
Process termination requested for pid 44782 [source = rdbms], [info = 2] [request issued by pid: 44675, uid: 54321]
2026-06-07T20:06:32.710569+09:00
TT00 (PID:98288): Gap Manager starting
|
시퀀스 60을 아카이브하지 못했다고 나옴(Standby로 전송하지 못했다는 말로 보임)
Standby로 넘어가지 못한 아카이브 로그 제거 시도
|
1
2
3
4
5
6
7
8
9
10
11
|
RMAN> delete noprompt archivelog all;
delete noprompt archivelog all;
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=52 device type=DISK
RMAN-08137: warning: archived log not deleted, needed for standby or upstream capture process
archived log file name=+DATA/ORACLE19/ARCHIVELOG/2026_06_07/thread_1_seq_60.308.1235333037 thread=1 sequence=60
RMAN-08137: warning: archived log not deleted, needed for standby or upstream capture process
archived log file name=+DATA/ORACLE19/ARCHIVELOG/2026_06_07/thread_1_seq_61.307.1235333037 thread=1 sequence=61
RMAN-08137: warning: archived log not deleted, needed for standby or upstream capture process
archived log file name=+DATA/ORACLE19/ARCHIVELOG/2026_06_07/thread_1_seq_62.303.1235333043 thread=1 sequence=62
|
rman에서 제거하려니 실패함(오라클이 실수를 막아줌)
asmcmd에서 확인해도 아카이브로그가 안지워졌음
|
1
2
3
4
5
6
7
8
|
$ . oraenv
ORACLE_SID = [oracle19] ? +ASM
The Oracle base remains unchanged with value /app/oracle
ASMCMD [+data/oracle19/archivelog/2026_06_07] > ls
thread_1_seq_60.308.1235333037 <<-- !! 제거 예정
thread_1_seq_61.307.1235333037
thread_1_seq_62.303.1235333043
|
테스트를 위해 시퀀스 60 아카이브 로그 수동으로 삭제
|
1
2
3
4
|
ASMCMD [+data/oracle19/archivelog/2026_06_07] > rm thread_1_seq_60.308.1235333037
ASMCMD [+data/oracle19/archivelog/2026_06_07] > ls
thread_1_seq_61.307.1235333037
thread_1_seq_62.303.1235333043
|
시퀀스 60을 지움
현재 상황
Primary에서 아카이브로그 시퀀스 60부터 62까지가 생성되었고
여기서 시퀀스 60을 지워버린 상태
Standby 네트워크를 정상화 시켜도 아카이브로그는 순차적으로 적용해야하기 때문에
시퀀스 60이 없어서 시퀀스 61, 62를 Standby에 적용할수가 없음
Standby 네트워크 정상화
|
1
2
3
4
5
6
7
8
9
10
|
# ifconfig
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.137.60 netmask 255.255.255.0 broadcast 192.168.137.255
ether 00:50:56:a8:f1:2c txqueuelen 1000 (Ethernet)
RX packets 474857 bytes 8816967143 (8.2 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 162866 bytes 37564406 (35.8 MiB)
TX errors 0 dropped 801 overruns 0 carrier 0 collisions 0
# nmcli connection up ens160
|
Standby mrp 프로세스 재시작
|
1
2
3
4
5
6
7
|
SQL> alter database recover managed standby database cancel;
Database altered.
SQL> alter database recover managed standby database disconnect from session;
Database altered.
|
아카이브 갭 확인
|
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
|
#Primary
SQL>
set lines 200 pages 1000
select dest_id, db_unique_name, status, database_mode, recovery_mode, db_unique_name, gap_status
from v$archive_dest_status
where dest_id <=2
order by 1,2;
DEST_ID DB_UNIQUE_NAME STATUS DATABASE_MODE RECOVERY_MODE DB_UNIQUE_NAME GAP_STATUS
---------- ------------------------------ --------- --------------- ---------------------------------- ------------------------------ ------------------------
1 oracle19 VALID OPEN IDLE oracle19
2 oracle19stb VALID OPEN_READ-ONLY MANAGED REAL TIME APPLY WITH QUERY oracle19stb UNRESOLVABLE GAP <<--!!
#Standby
SQL>
set lines 200 pages 1000
select dest_id, db_unique_name, status, database_mode, recovery_mode, db_unique_name, gap_status
from v$archive_dest_status
where dest_id <=2
order by 1,2;
DEST_ID DB_UNIQUE_NAME STATUS DATABASE_MODE RECOVERY_MODE DB_UNIQUE_NAME GAP_STATUS
---------- ------------------------------ --------- --------------- ---------------------------------- ------------------------------ ------------------------
1 oracle19stb VALID OPEN_READ-ONLY MANAGED REAL TIME APPLY oracle19stb
2 oracle19 VALID UNKNOWN IDLE oracle19
|
Primary에서 Standby db 상태(STATUS)를 보면 처음에 ERROR 였다가 지금은 VALID로 변경되었음
하지만 여전히 GAP_STATUS는 UNRESOLVABLE GAP임
Standby에서 아카이브 갭 시퀀스 확인
|
1
2
3
4
5
|
SQL> select * from v$archive_gap;
THREAD# LOW_SEQUENCE# HIGH_SEQUENCE# CON_ID
---------- ------------- -------------- ----------
1 60 60 1
|
시퀀스 60번이 필요한 상태임
Standby에서 마지막으로 적용한 아카이브로그 확인
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
SQL>
select thread#, sequence#, first_change#, next_change#, applied
from v$archived_log
where applied = 'YES'
order by sequence# desc;
THREAD# SEQUENCE# FIRST_CHANGE# NEXT_CHANGE# APPLIED
---------- ---------- ------------- ------------ ---------
1 59 1327468 1327670 YES
1 58 1327243 1327468 YES
1 57 1327023 1327243 YES
1 56 1326807 1327023 YES
1 55 1326591 1326807 YES
1 54 1326375 1326591 YES
1 53 1326157 1326375 YES
1 52 1325916 1326157 YES
1 51 1325706 1325916 YES
1 50 1325486 1325706 YES
1 49 1325253 1325486 YES
1 48 1325039 1325253 YES
1 47 1324821 1325039 YES
..
|
59번까지 적용되어 있음
Primary alert log에 아래와 같이 에러가 남음
|
1
2
3
4
5
6
7
8
9
10
11
|
$ tail -300f /app/oracle/diag/rdbms/oracle19/oracle19/trace/alert_oracle19.log
2026-06-07T20:18:42.206843+09:00
Thread 1 advanced to log sequence 64 (LGWR switch), current SCN: 1331051
Current log# 1 seq# 64 mem# 0: +DATA/ORACLE19/ONLINELOG/group_1.258.1235315217
2026-06-07T20:18:42.889785+09:00
ARC0 (PID:44780): Archived Log entry 90 added for B-1220456354.T-1.S-63 LOS:0x0000000000144a38 NXS:0x0000000000144f6b NAB:104278 ID 0xcb94dc22 LAD:1
2026-06-07T20:19:39.651320+09:00
Errors in file /app/oracle/diag/rdbms/oracle19/oracle19/trace/oracle19_tt00_98288.trc:
ORA-00308: cannot open archived log '+DATA/ORACLE19/ARCHIVELOG/2026_06_07/thread_1_seq_60.308.1235333037'
ORA-17503: ksfdopn:2 Failed to open file +DATA/ORACLE19/ARCHIVELOG/2026_06_07/thread_1_seq_60.308.1235333037
ORA-15012: ASM file '+DATA/ORACLE19/ARCHIVELOG/2026_06_07/thread_1_seq_60.308.1235333037' does not exist
|
해결
아카이브로그 백업이 있다면 해당 아카이브를 적용하면 아래 명령으로 적용하면되지만
|
1
|
SQL> alter database register logfile '/tmp/arch_stb/아카이브로그파일명.arc';
|
현재는 아카이브로그 백업이 없기 때문에 rman duplicate를 재수행해봄
Standby DB 종료 및 nomount 기동
|
1
2
|
SQL> shutdown immediate
SQL> startup nomount
|
Primary 서버에서 rman 접속
|
1
2
3
4
5
6
7
8
9
10
11
|
$ rman target sys/oracle@oracle19 auxiliary sys/oracle@oracle19stb
Recovery Manager: Release 19.0.0.0.0 - Production on Sun Jun 7 16:20:36 2026
Version 19.28.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
connected to target database: ORACLE19 (DBID=3400652514)
connected to auxiliary database: ORACLE19 (not mounted)
RMAN>
|
접속됨
duplicate 명령으로 복제
|
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
RMAN> duplicate target database for standby from active database dorecover;
duplicate target database for standby from active database;
Starting Duplicate Db at 2026-06-07 20:31:21
using target database control file instead of recovery catalog
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=21 device type=DISK
contents of Memory Script:
{
backup as copy reuse
passwordfile auxiliary format '/app/oracle/product/19c/dbs/orapworacle19stb' ;
}
executing Memory Script
Starting backup at 2026-06-07 20:31:22
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=50 device type=DISK
Finished backup at 2026-06-07 20:31:26
contents of Memory Script:
{
restore clone from service 'oracle19' standby controlfile;
}
executing Memory Script
Starting restore at 2026-06-07 20:31:26
using channel ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service oracle19
channel ORA_AUX_DISK_1: restoring control file
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01
output file name=/app/oracle/oradata/oracle19stb/control01.ctl
Finished restore at 2026-06-07 20:31:30
contents of Memory Script:
{
sql clone 'alter database mount standby database';
}
executing Memory Script
sql statement: alter database mount standby database
contents of Memory Script:
{
set newname for tempfile 1 to
"/app/oracle/oradata/oracle19stb/temp.264.1220456361";
switch clone tempfile all;
set newname for datafile 1 to
"/app/oracle/oradata/oracle19stb/system.261.1220456359";
set newname for datafile 2 to
"/app/oracle/oradata/oracle19stb/sysaux.262.1220456361";
set newname for datafile 3 to
"/app/oracle/oradata/oracle19stb/undotbs1.263.1220456361";
set newname for datafile 4 to
"/app/oracle/oradata/oracle19stb/users.265.1220456367";
restore
from nonsparse from service
'oracle19' clone database
;
sql 'alter system archive log current';
}
executing Memory Script
executing command: SET NEWNAME
renamed tempfile 1 to /app/oracle/oradata/oracle19stb/temp.264.1220456361 in control file
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
Starting restore at 2026-06-07 20:31:35
using channel ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service oracle19
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00001 to /app/oracle/oradata/oracle19stb/system.261.1220456359
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:01:55
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service oracle19
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00002 to /app/oracle/oradata/oracle19stb/sysaux.262.1220456361
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:15
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service oracle19
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00003 to /app/oracle/oradata/oracle19stb/undotbs1.263.1220456361
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:03
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service oracle19
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00004 to /app/oracle/oradata/oracle19stb/users.265.1220456367
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:02
Finished restore at 2026-06-07 20:33:50
sql statement: alter system archive log current
contents of Memory Script:
{
switch clone datafile all;
}
executing Memory Script
datafile 1 switched to datafile copy
input datafile copy RECID=1 STAMP=1235332888 file name=/app/oracle/oradata/oracle19stb/system.261.1220456359
datafile 2 switched to datafile copy
input datafile copy RECID=2 STAMP=1235332888 file name=/app/oracle/oradata/oracle19stb/sysaux.262.1220456361
datafile 3 switched to datafile copy
input datafile copy RECID=3 STAMP=1235332888 file name=/app/oracle/oradata/oracle19stb/undotbs1.263.1220456361
datafile 4 switched to datafile copy
input datafile copy RECID=4 STAMP=1235332888 file name=/app/oracle/oradata/oracle19stb/users.265.1220456367
Finished Duplicate Db at 2026-06-07 20:33:56
|
커맨드에 dorecover를 붙여주면 duplicate가 오래 걸려도 그사이 생긴 아카이브로그도 Standby에 적용해줌
참고로 병렬 채널 할당도 가능함
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
RMAN>
RUN {
# 1. Target(Primary) 채널 4개 할당 (ASM 디스크 Read 담당)
ALLOCATE CHANNEL p1 DEVICE TYPE DISK;
ALLOCATE CHANNEL p2 DEVICE TYPE DISK;
ALLOCATE CHANNEL p3 DEVICE TYPE DISK;
ALLOCATE CHANNEL p4 DEVICE TYPE DISK;
# 2. Auxiliary(Standby) 채널 4개 할당 (FS 디스크 Write 담당)
ALLOCATE AUXILIARY CHANNEL s1 DEVICE TYPE DISK;
ALLOCATE AUXILIARY CHANNEL s2 DEVICE TYPE DISK;
ALLOCATE AUXILIARY CHANNEL s3 DEVICE TYPE DISK;
ALLOCATE AUXILIARY CHANNEL s4 DEVICE TYPE DISK;
# 3. Duplicate 명령 수행 (DORECOVER 포함)
DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE
DORECOVER;
}
|
db role 및 상태 확인
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#Primary
SQL> select database_role, open_mode, (select status from v$instance) status from v$database;
DATABASE_ROLE OPEN_MODE STATUS
---------------- -------------------- ------------
PRIMARY READ WRITE OPEN
#Standby
SQL> select database_role, open_mode (select status from v$instance) status from v$database;
DATABASE_ROLE OPEN_MODE STATUS
---------------- -------------------- ------------
PHYSICAL STANDBY MOUNTED MOUNTED
|
Standby가 mount로 기동됨
Standby db read only로 기동
|
1
2
3
|
SQL> alter database open read only;
Database altered.
|
Standby에서 MRP 프로세스(Managed Recovery Process)를 기동
|
1
2
3
|
SQL> alter database recover managed standby database disconnect from session;
Database altered.
|
Primary에서 로그 스위치 수행
|
1
2
3
|
SQL> alter system switch logfile;
System altered.
|
alert log 확인
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#Primary
$ tail -300f /app/oracle/diag/rdbms/oracle19/oracle19/trace/alert_oracle19.log
2026-06-07T20:36:16.487709+09:00
Thread 1 advanced to log sequence 66 (LGWR switch), current SCN: 1332365
Current log# 3 seq# 66 mem# 0: +DATA/ORACLE19/ONLINELOG/group_3.260.1235315267
2026-06-07T20:36:16.592451+09:00
ARC3 (PID:44792): Archived Log entry 96 added for B-1220456354.T-1.S-65 LOS:0x00000000001453c1 NXS:0x000000000014548d NAB:16659 ID 0xcb94dc22 LAD:1
#Standby
$ tail -300f /app/oracle/diag/rdbms/oracle19stb/oracle19stb/trace/alert_oracle19stb.log
2026-06-07T20:03:54.232185+09:00
rfs (PID:53142): krsr_rfs_atc: Identified database type as 'PHYSICAL': Client is ASYNC (PID:85677)
2026-06-07T20:03:54.238631+09:00
rfs (PID:53142): Selected LNO:4 for T-1.S-66 dbid 3400652514 branch 1220456354
2026-06-07T20:03:54.965536+09:00
PR00 (PID:52942): Media Recovery Log /app/oracle/arch/1_65_1220456354.arc
PR00 (PID:52942): Media Recovery Waiting for T-1.S-66 (in transit)
2026-06-07T20:03:55.047052+09:00
Recovery of Online Redo Log: Thread 1 Group 4 Seq 66 Reading mem 0
Mem# 0: /app/oracle/oradata/oracle19stb/group_4.284.1235315377
|
정상적으로 아카이브가 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
|
#Primary
SQL>
set lines 200 pages 1000
select dest_id, db_unique_name, status, database_mode, recovery_mode, db_unique_name, gap_status
from v$archive_dest_status
where dest_id <=2
order by 1,2;
DEST_ID DB_UNIQUE_NAME STATUS DATABASE_MODE RECOVERY_MODE DB_UNIQUE_NAME GAP_STATUS
---------- ------------------------------ --------- --------------- ---------------------------------- ------------------------------ ------------------------
1 oracle19 VALID OPEN IDLE oracle19
2 oracle19stb VALID OPEN_READ-ONLY MANAGED REAL TIME APPLY WITH QUERY oracle19stb NO GAP <<--!!
#Standby
SQL>
select dest_id, db_unique_name, status, database_mode, recovery_mode, db_unique_name, gap_status
from v$archive_dest_status
where dest_id <=2
order by 1,2;
DEST_ID DB_UNIQUE_NAME STATUS DATABASE_MODE RECOVERY_MODE DB_UNIQUE_NAME GAP_STATUS
---------- ------------------------------ --------- --------------- ---------------------------------- ------------------------------ ------------------------
1 oracle19stb VALID OPEN_READ-ONLY MANAGED REAL TIME APPLY oracle19stb
2 oracle19 VALID UNKNOWN IDLE oracle19
|
GAP_STATUS가 UNRESOLVABLE GAP에서 NO GAP로 변경됨
Standby에서 아카이브 갭 시퀀스 확인
|
1
2
3
|
SQL> select * from v$archive_gap;
no rows selected
|
no rows로 표시됨
Standby에서 마지막으로 적용한 아카이브로그 확인
|
1
2
3
4
5
6
7
8
9
10
|
SQL>
select thread#, sequence#, first_change#, next_change#, applied
from v$archived_log
where applied = 'YES'
order by sequence# desc;
THREAD# SEQUENCE# FIRST_CHANGE# NEXT_CHANGE# APPLIED
---------- ---------- ------------- ------------ ---------
1 65 1332161 1332365 YES
1 64 1331051 1332161 YES
|
정상적으로 65번 시퀀스까지 아카이브를 적용함
66번 시퀀스는 현재 Standby에서 ACTIVE redo임
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
SQL>
set lines 200
set pages 1000
col member for a60
select thread#, l.group#, member, archived, l.status, (bytes/1024/1024) MB, sequence#
from v$standby_log l, v$logfile f
where f.group# = l.group#
order by 1, 2;
THREAD# GROUP# MEMBER ARC STATUS MB SEQUENCE#
---------- ---------- ------------------------------------------------------------ --- ---------- ---------- ----------
0 5 /app/oracle/oradata/oracle19stb/group_5.285.1235315381 YES UNASSIGNED 200 0
0 6 /app/oracle/oradata/oracle19stb/group_6.286.1235315381 YES UNASSIGNED 200 0
1 4 /app/oracle/oradata/oracle19stb/group_4.284.1235315377 YES ACTIVE 200 66 <<-- !!
|
결론 :
adg 환경에서 gap이 너무 많이 생기거나 아카이브로그가 유실된 경우 본문과 같은 방식으로
rman duplicate를 재수행 해주어서 정상화시킬 수 있음
참조 :
Oracle Linux 8.4에 Oracle 19c ADG 설치 가이드_Part 1 ( https://positivemh.tistory.com/819 )
Oracle Linux 8.4에 Oracle 19c RAC to RAC ADG 설치 가이드_Part 1 ( https://positivemh.tistory.com/824 )
오라클 19c Restart(ASM) to 싱글(FS) ADG 구성 가이드 ( https://positivemh.tistory.com/1391 )
https://docs.oracle.com/en/database/oracle/oracle-database/19/sbydb/managing-oracle-data-guard-role-transitions.html#GUID-AAD70601-D248-4309-B8DD-F461EE31A5FF
https://docs.oracle.com/en/database/oracle/oracle-database/19/spmss/switchover-to-a-physical-db.html#GUID-AAD70601-D248-4309-B8DD-F461EE31A5FF
'ORACLE > Admin' 카테고리의 다른 글
| 오라클 19c ADG 구성 중 db_file_name_convert, log_file_name_convert 파라미터 테스트 (0) | 2026.06.12 |
|---|---|
| 오라클 19c ADG Gap 발생시 rman 증분백업이용 복구 시나리오 (0) | 2026.06.11 |
| 오라클 19c ACFS 경로 변경 테스트 (0) | 2026.06.06 |
| 오라클 19c ACFS 구성 테스트 (0) | 2026.06.06 |
| 오라클 19c datapump 상세 로그 확인 METRICS, LOGTIME 옵션 (0) | 2026.06.01 |
