반응형
■ [2025-12-20] Oracle 12cR2 2 Node RAC to Single ADG 구축 (DG Broker 사용)

 

[제목]

 

[2025-12-20] Oracle 12cR2 2 Node RAC to Single ADG 구축 (DG Broker 사용)

 

[테스트 환경]

 

<Primary>

OS : Oracle Linux Server 7.9 (grep ^PRETTY_NAME= /etc/os-release | cut -d= -f2- | tr -d '"')
OS Kernal : 5.4.17-2102.201.3.el7uek.x86_64 (uname -r)
Oracle Version : Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

                (echo -e "set pages 0 lines 200 feedback off heading off\nselect banner from v\$version where banner like 'Oracle Database%';" | sqlplus -s / as sysdba)

Oracle Configuration
  DB명 : ORA12RF (echo -e 'set pages 0 feedback off heading off verify off\nselect '\''DB명 : '\''||name from v$database;' | sqlplus -s / as sysdba) '

  RAC Node 1
   Hostname : ol7ora12rf1 (hostname)
   Public IP : 192.168.240.11 (getent ahostsv4 `hostname` | awk '{print $1; exit}')
   Virtual IP : 192.168.240.14
   Instance Name : ORA12RF1 (echo -e 'set pages 0 feedback off heading off verify off\nselect '\''Instance Name : '\''||instance_name from v$instance;' | sqlplus -s / as sysdba) '

  RAC Node 2
   Hostname : ol7ora12rf2
   Public IP : 192.168.240.12 (getent ahostsv4 `hostname` | awk '{print $1; exit}')
   Virtual IP : 192.168.240.15
   Instance Name : ORA12RF2 (echo -e 'set pages 0 feedback off heading off verify off\nselect '\''Instance Name : '\''||instance_name from v$instance;' | sqlplus -s / as sysdba) '

  
Patch Info
 Grid (opatch lspatches) (grid os user)
  33610989;TOMCAT RELEASE UPDATE 12.2.0.1.0(ID:RELEASE) (33610989)
  26839277;DBWLM RELEASE UPDATE 12.2.0.1.0(ID:170913) (26839277)
  33116894;ACFS JUL 2021 RELEASE UPDATE 12.2.0.1.210720 (33116894)
  33678030;OCW JAN 2022 RELEASE UPDATE 12.2.0.1.220118 (33678030)
  33587128;Database Jan 2022 Release Update : 12.2.0.1.220118 (33587128)

 Oracle (opatch lspatches) (oracle os user)
  33678030;OCW JAN 2022 RELEASE UPDATE 12.2.0.1.220118 (33678030)
  33587128;Database Jan 2022 Release Update : 12.2.0.1.220118 (33587128)

 

<Standby>

OS : Oracle Linux Server 7.9 (grep ^PRETTY_NAME= /etc/os-release | cut -d= -f2- | tr -d '"')
OS Kernal : 5.4.17-2102.201.3.el7uek.x86_64 (uname -r)
Oracle Version : Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

                 (echo -e "set pages 0 lines 200 feedback off heading off\nselect banner from v\$version where banner like 'Oracle Database%';" | sqlplus -s / as sysdba)
Hostname : ol7ora12sf (hostname)
Public IP : 192.168.240.111 (getent ahostsv4 `hostname` | awk '{print $1; exit}')
Oracle Configuration
    DB명 : ORA12RF (echo -e 'set pages 0 feedback off heading off verify off\nselect '\''DB명 : '\''||name from v$database;' | sqlplus -s / as sysdba) '
           --> 이걸로 생성될것임
    DB Unique Name : ORA12RF_STB
                     --> 이걸로 생성될것임
   Instance Name : ORA12RF (echo -e 'set pages 0 feedback off heading off verify off\nselect '\''Instance Name : '\''||instance_name from v$instance;' | sqlplus -s / as sysdba) '
                   --> 이걸로 생성될것임

Patch Info
 Grid (opatch lspatches) (grid os user)
  33678030;OCW JAN 2022 RELEASE UPDATE 12.2.0.1.220118 (33678030)
  33610989;TOMCAT RELEASE UPDATE 12.2.0.1.0(ID:RELEASE) (33610989)
  33116894;ACFS JUL 2021 RELEASE UPDATE 12.2.0.1.210720 (33116894)
  26839277;DBWLM RELEASE UPDATE 12.2.0.1.0(ID:170913) (26839277)
  33587128;Database Jan 2022 Release Update : 12.2.0.1.220118 (33587128)

 Oracle (opatch lspatches) (oracle os user)
  33678030;OCW JAN 2022 RELEASE UPDATE 12.2.0.1.220118 (33678030)
  33587128;Database Jan 2022 Release Update : 12.2.0.1.220118 (33587128)


<Observer>

OS : Oracle Linux Server 7.9 (grep ^PRETTY_NAME= /etc/os-release | cut -d= -f2- | tr -d '"')
OS Kernal : 5.4.17-2102.201.3.el7uek.x86_64 (uname -r)
Oracle Version : Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

                 (echo -e "set pages 0 lines 200 feedback off heading off\nselect banner from v\$version where banner like 'Oracle Database%';" | sqlplus -s / as sysdba)
Hostname : ol7ora12ss (hostname)
Public IP : 192.168.240.112 (getent ahostsv4 `hostname` | awk '{print $1; exit}')
--> 해당 서버에 Oralce 12cr2 Cleint를 설치할 것임

Patch Info
 Oracle (opatch lspatches) (oracle os user)
  33587128;Database Jan 2022 Release Update : 12.2.0.1.220118 (33587128)
--> 해당 패치를 진행할 것임

 

[테스트 개요]

 

테스트 목적 본 테스트는 Oracle Database 12cR2 (12.2.0.1) 환경에서 고가용성(HA)을 보장하는 2-Node RAC Primary 시스템과 비용 효율적인 Single Instance Standby 시스템 간의 Active Data Guard (ADG)를 구축하는 것을 목표로 함
또한, Data Guard Broker를 통해 관리를 자동화하고, FSFO (Fast-Start Failover) 기능을 구현하여 장애 발생 시 Observer를 통한 자동 페일오버(Automated Failover) 및 데이터 무결성을 검증함

 

[구성 아키텍처 요약]
Primary Database (RAC): 2개의 노드(ol7ora12rf1, ol7ora12rf2)로 구성된 RAC 환경.
Standby Database (Single): 단일 노드(ol7ora12sf)로 구성된 Physical Standby 환경.
Observer (Client): 별도 서버(ol7ora12ss)에 Oracle Client만 설치하여 FSFO 감시 역할 수행.
네트워크: 데이터 전송 및 관리를 위해 별도의 리스너 포트(1522)를 구성하여 운영 트래픽과 분리.

 

[주요 수행 절차]

 

<네트워크 구성>
ADG 전용 리스너(Port 1522) 생성 및 정적 리스너(Static Registration) 등록.
tnsnames.ora 및 /etc/hosts 설정을 통해 RAC와 Single 간 통신 경로 확보.

 

<Primary DB 사전 설정>
Archive Log Mode, Flashback Database, Force Logging 활성화.
Standby Redo Log (SRL) 생성 (Redo Group 수 + 1).
Standby DB 구축 (Duplicate):
RMAN 백업(Archivelog 및 Standby Controlfile 포함) 수행.
백업본을 Standby 서버로 전송 후 복구(Restore & Recover) 수행.
RAC to Single 변환을 위한 파라미터(cluster_database=false, 파일 경로 변환 등) 수정.

 

<Data Guard Broker 구성>
dgmgrl을 사용하여 Configuration 생성 및 Standby Database 등록.
브로커를 통한 동기화 상태 확인 (SUCCESS).

 

[검증 시나리오 (Testing Scenarios)]

 

본 테스트에서는 구축 후 시스템의 안정성과 가용성을 확인하기 위해 다음 항목들을 수행하였음.

 

<데이터 동기화 테스트 (Synchronization)>
Primary에서 DML(Table 생성 및 Insert) 수행 후 Standby에 실시간 반영 여부 확인.

 

<재기동 테스트 (Restart)>
올바른 기동/종료 순서(Standby 기동 -> Primary 기동) 검증 및 재접속 확인.

 

<Role Transition (Switchover)>
계획된 유지보수를 가정한 Primary ↔ Standby 간의 역할 전환(Switchover) 및 데이터 유실 없음 확인.

 

<Role Transition (Failover)>
Primary 강제 종료(Abort) 상황 시 수동 Failover 수행 및 STANDBY_BECAME_PRIMARY_SCN 확인.
구(Old) Primary를 REINSTATE 명령어로 복구하여 Standby로 전환.

 

<FSFO (Fast-Start Failover) 테스트>
Observer 프로세스 구성 및 Wallet 설정을 통한 자동 인증 처리.
Primary 장애(Abort) 발생 시 Observer에 의한 자동 Failover 동작 및 시간(Threshold) 검증.
장애 복구 후 자동 Reinstate 동작 확인.

 

<Snapshot Standby 테스트>
Physical Standby를 일시적으로 Read-Write 모드로 전환하여 테스트 데이터 조작 수행.
다시 Physical Standby로 환원(Convert) 시 변경 사항 롤백 및 동기화 재개 확인.

 

<환경 복구 (Deconfiguration)>

FSFO 비활성화, Broker 구성 제거, Standby DB 삭제 및 네트워크 설정을 원복하여 테스트 종료.

 

[내용]

 

1. ADG 전용 신규 리스너 생성 및 정적 리스너 등록

 

--1522 포트를 사용하는 ADG 전용 리스너를 생성하고 정적 리스너로 등록할 것임

1-1. Primary 서버 설정

 

1-1-1. 신규 리스너 생성

 

--1번 노드 (grid os user)
[+ASM1:grid@ol7ora12rf1][/home/grid]$ srvctl config listener
Name: LISTENER
Type: Database Listener
Network: 1, Owner: grid
Home: <CRS home>
End points: TCP:1521
Listener is enabled.
Listener is individually enabled on nodes:
Listener is individually disabled on nodes:
--> 현재 1521 포트를 사용하는 LISTENER 만 존재하는 상황임.

 

[+ASM1:grid@ol7ora12rf1][/home/grid]$ echo $GRID_HOME
/u01/app/12c/grid

 

--1522 포트를 사용하는 새로운 리스너인 LISTENER_ADG 리스너를 생성함
[+ASM1:grid@ol7ora12rf1][/home/grid]$ srvctl add listener -listener LISTENER_ADG -oraclehome $GRID_HOME -endpoints "TCP:1522"
--> 2개의 RAC노드에 모두 생성됨
--> RAC 환경에서 한쪽 노드에서 리스너를 add하면 다른쪽 노드에도 자동으로 등록되는 것을 알 수 있음

 

[+ASM1:grid@ol7ora12rf1][/home/grid]$ srvctl config listener -listener LISTENER_ADG
Name: LISTENER_ADG
Type: Database Listener
Network: 1, Owner: grid
Home: <CRS home>
End points: TCP:1522
Listener is enabled.
Listener is individually enabled on nodes:
Listener is individually disabled on nodes:
--> 1522 포트를 사용하는 신규 리스너 생성 완료

 

[+ASM1:grid@ol7ora12rf1][/home/grid]$ srvctl status listener -listener LISTENER_ADG
Listener LISTENER_ADG is enabled
Listener LISTENER_ADG is not running
--> LISTENER_ADG 리스너가 아직 실행되고 있지는 않음

 

--리스너 시작
[+ASM1:grid@ol7ora12rf1][/home/grid]$ srvctl start listener -listener LISTENER_ADG

[+ASM1:grid@ol7ora12rf1][/home/grid]$ srvctl status listener -listener LISTENER_ADG
Listener LISTENER_ADG is enabled
Listener LISTENER_ADG is running on node(s): ol7ora12rf1,ol7ora12rf2

 

--LISTENER_ADG 리스너가 ONLINE 상태인지 확인
[+ASM1:grid@ol7ora12rf1][/home/grid]$ crsctl stat res ora.LISTENER_ADG.lsnr -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.LISTENER_ADG.lsnr
               ONLINE  ONLINE       ol7ora12rf1              STABLE
               ONLINE  ONLINE       ol7ora12rf2              STABLE
--------------------------------------------------------------------------------

 

1-1-2. 정적 리스너 설정

 

--1번 노드 (grid os user)
[+ASM1:grid@ol7ora12rf1][/home/grid]$ alias cdt
alias cdt='cd $ORACLE_HOME/network/admin'

[+ASM1:grid@ol7ora12rf1][/home/grid]$ cdt

[+ASM1:grid@ol7ora12rf1][/u01/app/12c/grid/network/admin]$ vi listener.ora
[+ASM1:grid@ol7ora12rf1][/u01/app/12c/grid/network/admin]$ cat listener.ora
LISTENER_ADG=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_ADG))))            # line added by Agent
MGMTLSNR=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=MGMTLSNR))))            # line added by Agent
# listener.ora Network Configuration File: /u01/app/12c/grid/network/admin/listener.ora
# Generated by Oracle configuration tools.

ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN3 = ON

ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN2 = ON

ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1 = ON

VALID_NODE_CHECKING_REGISTRATION_LISTENER_SCAN3 = OFF

VALID_NODE_CHECKING_REGISTRATION_LISTENER_SCAN2 = OFF

VALID_NODE_CHECKING_REGISTRATION_LISTENER_SCAN1 = OFF

VALID_NODE_CHECKING_REGISTRATION_ASMNET1LSNR_ASM = SUBNET

ASMNET1LSNR_ASM =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = ASMNET1LSNR_ASM))
    )
  )

VALID_NODE_CHECKING_REGISTRATION_LISTENER = SUBNET

LISTENER =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = LISTENER))
    )
  )

ENABLE_GLOBAL_DYNAMIC_ENDPOINT_ASMNET1LSNR_ASM = ON

ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER = ON

LISTENER_SCAN3 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = LISTENER_SCAN3))
    )
  )

LISTENER_SCAN2 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = LISTENER_SCAN2))
    )
  )

LISTENER_SCAN1 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = LISTENER_SCAN1))
    )
  )

ENABLE_GLOBAL_DYNAMIC_ENDPOINT_MGMTLSNR=ON              # line added by Agent
VALID_NODE_CHECKING_REGISTRATION_MGMTLSNR=SUBNET                # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_ADG=ON          # line added by Agent
VALID_NODE_CHECKING_REGISTRATION_LISTENER_ADG=SUBNET            # line added by Agent

-----------------------------------아래 부분을 추가 BEGIN-----------------------------------
SID_LIST_LISTENER_ADG =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = ORA12RF_DGMGRL)
      (ORACLE_HOME = /u01/app/oracle/product/12c/db_1)
      (SID_NAME = ORA12RF1)
    )
  )
-----------------------------------아래 부분을 추가 END-------------------------------------

 

--1번 노드 (oracle os user)
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ srvctl setenv database -d ORA12RF -t "TNS_ADMIN=/u01/app/oracle/product/12c/db_1/network/admin"
--> TNS_ADMIN 환경변수를 세팅해줌 (grid도 해당 위치를 알 수 있도록 해줌)

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ srvctl getenv database -d ORA12RF
ORA12RF:
TNS_ADMIN=/u01/app/oracle/product/12c/db_1/network/admin


--1번 노드 (grid os user)
[+ASM1:grid@ol7ora12rf1][/u01/app/12c/grid/network/admin]$ lsnrctl reload LISTENER_ADG

LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 20-DEC-2025 13:34:58

Copyright (c) 1991, 2016, Oracle.  All rights reserved.

Connectingto(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_ADG)))
The command completed successfully

 

[+ASM1:grid@ol7ora12rf1][/u01/app/12c/grid/network/admin]$ lsnrctl status LISTENER_ADG

LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 20-DEC-2025 13:36:08

Copyright (c) 1991, 2016, Oracle.  All rights reserved.

Connectingto(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_ADG)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER_ADG
Version                   TNSLSNR for Linux: Version 12.2.0.1.0 - Production
Start Date                20-DEC-2025 13:16:21
Uptime                    0 days 0 hr. 19 min. 46 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/12c/grid/network/admin/listener.ora
Listener Log File         /u01/app/oracle/diag/tnslsnr/ol7ora12rf1/listener_adg/alert/log.xml
Listening Endpoints Summary...
 (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_ADG)))
Services Summary...
Service "ORA12RF_DGMGRL" has 1 instance(s).
  Instance "ORA12RF1", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
--> 1522 포트를 사용하는 LISTENER_ADG 리스너에 ORA12RF_DGMGRL 서비스가 추가된 것을 확인할 수 있음

 

--2번 노드 (grid os user)
[+ASM2:grid@ol7ora12rf2][/home/grid]$ alias cdt
alias cdt='cd $ORACLE_HOME/network/admin'

[+ASM2:grid@ol7ora12rf2][/home/grid]$ cdt

[+ASM2:grid@ol7ora12rf2][/u01/app/12c/grid/network/admin]$ vi listener.ora
[+ASM2:grid@ol7ora12rf2][/u01/app/12c/grid/network/admin]$ cat listener.ora
LISTENER_ADG=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_ADG))))            # line added by Agent
LISTENER_SCAN3=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN3))))                # line added by Agent
MGMTLSNR=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=MGMTLSNR))))            # line added by Agent
LISTENER_SCAN2=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN2))))                # line added by Agent
LISTENER=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER))))            # line added by Agent
LISTENER_SCAN1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1))))                # line added by Agent
ASMNET1LSNR_ASM=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=ASMNET1LSNR_ASM))))              # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_ASMNET1LSNR_ASM=ON               # line added by Agent
VALID_NODE_CHECKING_REGISTRATION_ASMNET1LSNR_ASM=SUBNET         # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1=ON                # line added by Agent
VALID_NODE_CHECKING_REGISTRATION_LISTENER_SCAN1=OFF             # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON              # line added by Agent
VALID_NODE_CHECKING_REGISTRATION_LISTENER=SUBNET                # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN2=ON                # line added by Agent
VALID_NODE_CHECKING_REGISTRATION_LISTENER_SCAN2=OFF             # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_MGMTLSNR=ON              # line added by Agent
VALID_NODE_CHECKING_REGISTRATION_MGMTLSNR=SUBNET                # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN3=ON                # line added by Agent
VALID_NODE_CHECKING_REGISTRATION_LISTENER_SCAN3=OFF             # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_ADG=ON          # line added by Agent
VALID_NODE_CHECKING_REGISTRATION_LISTENER_ADG=SUBNET            # line added by Agent

-----------------------------------아래 부분을 추가 BEGIN-----------------------------------
SID_LIST_LISTENER_ADG =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = ORA12RF_DGMGRL)
      (ORACLE_HOME = /u01/app/oracle/product/12c/db_1)
      (SID_NAME = ORA12RF2)
    )
  )
-----------------------------------아래 부분을 추가 END-----------------------------------

 

--2번 노드 (oracle os user)
[ORA12RF2:oracle@ol7ora12rf2][/home/oracle]$ srvctl getenv database -db ora12rf
ORA12RF:
TNS_ADMIN=/u01/app/oracle/product/12c/db_1/network/admin
--> TNS_ADMIN 환경변수가 세팅된 것을 확인

 

--2번 노드 (grid os user)
[+ASM2:grid@ol7ora12rf2][/u01/app/12c/grid/network/admin]$ lsnrctl reload LISTENER_ADG

LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 20-DEC-2025 13:39:55

Copyright (c) 1991, 2016, Oracle.  All rights reserved.

Connectingto(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_ADG)))
The command completed successfully

 

[+ASM2:grid@ol7ora12rf2][/u01/app/12c/grid/network/admin]$ lsnrctl status LISTENER_ADG

LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 20-DEC-2025 13:40:11

Copyright (c) 1991, 2016, Oracle.  All rights reserved.

Connectingto(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_ADG)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER_ADG
Version                   TNSLSNR for Linux: Version 12.2.0.1.0 - Production
Start Date                20-DEC-2025 13:16:21
Uptime                    0 days 0 hr. 23 min. 49 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/12c/grid/network/admin/listener.ora
Listener Log File         /u01/app/oracle/diag/tnslsnr/ol7ora12rf2/listener_adg/alert/log.xml
Listening Endpoints Summary...
 (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_ADG)))
Services Summary...
Service "ORA12RF_DGMGRL" has 1 instance(s).
  Instance "ORA12RF2", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
--> 1522 포트를 사용하는 LISTENER_ADG 리스너에 ORA12RF_DGMGRL 서비스가 추가된 것을 확인할 수 있음

 

1-1-3. 신규로 생성한 리스너를 동적 리스너에도 등록 시킴

 

--1번 노드 (oracle os user)

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'

 

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Sat Dec 20 13:41:14 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

[ol7ora12rf1]<SYS@ORA12RF1>$ show parameter local_listener

NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
local_listener                      string                            (ADDRESS=(PROTOCOL=TCP)(HOST=
                                                                       192.168.240.14)(PORT=1521))

[ol7ora12rf1]<SYS@ORA12RF1>$ alter system set local_listener='
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.240.14)(PORT=1521))
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.240.14)(PORT=1522))
)' scope=both sid='ORA12RF1';
--> VIP를 사용해서 동적 리스너를 걸어줌

System altered.

Elapsed: 00:00:00.00

 

[ol7ora12rf1]<SYS@ORA12RF1>$ alter system register;

System altered.

Elapsed: 00:00:00.00

 

--grid os user
[+ASM1:grid@ol7ora12rf1][/u01/app/12c/grid/network/admin]$ lsnrctl status LISTENER_ADG

LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 20-DEC-2025 13:49:45

Copyright (c) 1991, 2016, Oracle.  All rights reserved.

Connectingto(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_ADG)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER_ADG
Version                   TNSLSNR for Linux: Version 12.2.0.1.0 - Production
Start Date                20-DEC-2025 13:16:21
Uptime                    0 days 0 hr. 33 min. 23 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/12c/grid/network/admin/listener.ora
Listener Log File         /u01/app/oracle/diag/tnslsnr/ol7ora12rf1/listener_adg/alert/log.xml
Listening Endpoints Summary...
 (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_ADG)))
 (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.240.11)(PORT=1522)))
 (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.240.14)(PORT=1522)))
Services Summary...
Service "+ASM" has 1 instance(s).
  Instance "+ASM1", status READY, has 1 handler(s) for this service...
Service "+ASM_CRS" has 1 instance(s).
  Instance "+ASM1", status READY, has 1 handler(s) for this service...
Service "+ASM_DATA1" has 1 instance(s).
  Instance "+ASM1", status READY, has 1 handler(s) for this service...
Service "+ASM_FRA1" has 1 instance(s).
  Instance "+ASM1", status READY, has 1 handler(s) for this service...
Service "+ASM_MGMT" has 1 instance(s).
  Instance "+ASM1", status READY, has 1 handler(s) for this service...
Service "ORA12RF" has 1 instance(s).
  Instance "ORA12RF1", status READY, has 1 handler(s) for this service...
Service "ORA12RFXDB" has 1 instance(s).
  Instance "ORA12RF1", status READY, has 1 handler(s) for this service...
Service "ORA12RF_DGMGRL" has 1 instance(s).
  Instance "ORA12RF1", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
--> ASM1 인스턴스, ORA12RF1 인스턴스 등이 모두 붙은 것을 확인

 

--2번 노드 (oracle os user)
[ORA12RF2:oracle@ol7ora12rf2][/home/oracle]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'

[ORA12RF2:oracle@ol7ora12rf2][/home/oracle]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Sun Dec 7 17:36:00 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

[ol7ora12rf2]<SYS@ORA12RF2>$
alter system set local_listener='
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.240.15)(PORT=1521))
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.240.15)(PORT=1522))
)' scope=both sid='ORA12RF2';

 

[ol7ora12rf2]<SYS@ORA12RF2>$ alter system register;

 

[+ASM2:grid@ol7ora12rf2][/u01/app/12c/grid/network/admin]$ lsnrctl status LISTENER_ADG

LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 20-DEC-2025 13:52:09

Copyright (c) 1991, 2016, Oracle.  All rights reserved.

Connectingto(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_ADG)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER_ADG
Version                   TNSLSNR for Linux: Version 12.2.0.1.0 - Production
Start Date                20-DEC-2025 13:16:21
Uptime                    0 days 0 hr. 35 min. 47 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/12c/grid/network/admin/listener.ora
Listener Log File         /u01/app/oracle/diag/tnslsnr/ol7ora12rf2/listener_adg/alert/log.xml
Listening Endpoints Summary...
 (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_ADG)))
 (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.240.12)(PORT=1522)))
 (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.240.15)(PORT=1522)))
Services Summary...
Service "+ASM" has 1 instance(s).
  Instance "+ASM2", status READY, has 1 handler(s) for this service...
Service "+ASM_CRS" has 1 instance(s).
  Instance "+ASM2", status READY, has 1 handler(s) for this service...
Service "+ASM_DATA1" has 1 instance(s).
  Instance "+ASM2", status READY, has 1 handler(s) for this service...
Service "+ASM_FRA1" has 1 instance(s).
  Instance "+ASM2", status READY, has 1 handler(s) for this service...
Service "+ASM_MGMT" has 1 instance(s).
  Instance "+ASM2", status READY, has 1 handler(s) for this service...
Service "ORA12RF" has 1 instance(s).
  Instance "ORA12RF2", status READY, has 1 handler(s) for this service...
Service "ORA12RFXDB" has 1 instance(s).
  Instance "ORA12RF2", status READY, has 1 handler(s) for this service...
Service "ORA12RF_DGMGRL" has 1 instance(s).
  Instance "ORA12RF2", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully

 

1-2. Standby 서버 설정

 

1-2-1. 신규 리스너 생성

 

--grid os user

[+ASM:grid@ol7ora12sf][/home/grid]$ srvctl config listener
Name: LISTENER
Type: Database Listener
Home: /u01/app/12c/grid
End points: TCP:1521
Listener is enabled.
--> 현재 1521 포트를 사용하는 LISTENER 리스너만 존재함.

 

[+ASM:grid@ol7ora12sf][/home/grid]$ echo $GRID_HOME
/u01/app/12c/grid

 

--신규 리스너 생성
[+ASM:grid@ol7ora12sf][/home/grid]$ srvctl add listener -listener LISTENER_ADG -oraclehome $GRID_HOME -endpoints "TCP:1522"
--> 1522 포트를 사용하는 LISTENER_ADG 리스너를 신규로 생성함

 

[+ASM:grid@ol7ora12sf][/home/grid]$ srvctl config listener -listener LISTENER_ADG
Name: LISTENER_ADG
Type: Database Listener
Home: /u01/app/12c/grid
End points: TCP:1522
Listener is enabled.

 

[+ASM:grid@ol7ora12sf][/home/grid]$ srvctl status listener -listener LISTENER_ADG
Listener LISTENER_ADG is enabled
Listener LISTENER_ADG is not running

 

[+ASM:grid@ol7ora12sf][/home/grid]$ srvctl start listener -listener LISTENER_ADG

[+ASM:grid@ol7ora12sf][/home/grid]$ srvctl status listener -listener LISTENER_ADG
Listener LISTENER_ADG is enabled
Listener LISTENER_ADG is running on node(s): ol7ora12sf

 

[+ASM:grid@ol7ora12sf][/home/grid]$ crsctl stat res ora.LISTENER_ADG.lsnr -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.LISTENER_ADG.lsnr
               ONLINE  ONLINE       ol7ora12sf               STABLE
--------------------------------------------------------------------------------
--> LISTENER_ADG 리스너가 ONLINE 상태인 것을 확인

 

1-2-2. 정적 리스너 설정

 

--grid os user
[+ASM:grid@ol7ora12sf][/home/grid]$ alias cdt
alias cdt='cd $ORACLE_HOME/network/admin'

 

[+ASM:grid@ol7ora12sf][/home/grid]$ cdt

[+ASM:grid@ol7ora12sf][/u01/app/12c/grid/network/admin]$ vi listener.ora
[+ASM:grid@ol7ora12sf][/u01/app/12c/grid/network/admin]$ cat listener.ora
#Backup file is  /u01/app/12c/grid/network/admin/listener.ora.bak.ol7ora12sf line added by Agent
LISTENER_ADG=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_ADG))))            # line added by Agent
# listener.ora Network Configuration File: /u01/app/12c/grid/network/admin/listener.ora
# Generated by Oracle configuration tools.

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = ol7ora12sf)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON              # line added by Agent
VALID_NODE_CHECKING_REGISTRATION_LISTENER=SUBNET                # line added by Agent

---------------------------------아래의 내용을 추가 BEGIN---------------------------------
SID_LIST_LISTENER_ADG =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = ORA12RF_STB_DGMGRL)
      (ORACLE_HOME = /u01/app/oracle/product/12c/db_1)
      (SID_NAME = ORA12RF)
    )
  )
---------------------------------아래의 내용을 추가 END-----------------------------------
 
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_ADG=ON          # line added by Agent
VALID_NODE_CHECKING_REGISTRATION_LISTENER_ADG=SUBNET            # line added by Agent


[+ASM:grid@ol7ora12sf][/u01/app/12c/grid/network/admin]$ lsnrctl reload LISTENER_ADG

LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 21-DEC-2025 15:51:25

Copyright (c) 1991, 2016, Oracle.  All rights reserved.

Connectingto(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_ADG)))
The command completed successfully

 

[+ASM:grid@ol7ora12sf][/u01/app/12c/grid/network/admin]$ lsnrctl status LISTENER_ADG

LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 21-DEC-2025 15:51:45

Copyright (c) 1991, 2016, Oracle.  All rights reserved.

Connectingto(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_ADG)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER_ADG
Version                   TNSLSNR for Linux: Version 12.2.0.1.0 - Production
Start Date                20-DEC-2025 14:08:05
Uptime                    1 days 1 hr. 43 min. 39 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/12c/grid/network/admin/listener.ora
Listener Log File         /u01/app/oracle/diag/tnslsnr/ol7ora12sf/listener_adg/alert/log.xml
Listening Endpoints Summary...
 (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_ADG)))
Services Summary...
Service "ORA12RF_STB_DGMGRL" has 1 instance(s).
  Instance "ORA12RF", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully


2. /etc/hosts 설정

 

2-1. Primary 서버

 

--1번 노드 (root os user)
[root@ol7ora12rf1][/root]$ vi /etc/hosts
[root@ol7ora12rf1][/root]$ cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
### Public IP
192.168.240.11  ol7ora12rf1
192.168.240.12  ol7ora12rf2

### Private IP
10.0.1.11       ol7ora12rf1-priv
10.0.1.12       ol7ora12rf2-priv

### Virtual IP
192.168.240.14  ol7ora12rf1-vip
192.168.240.15  ol7ora12rf2-vip

### DNS
192.168.240.17  ol7ora12rf-scan
192.168.240.18  ol7ora12rf-scan
192.168.240.19  ol7ora12rf-scan

---------------------------------아래의 내용을 추가 BEGIN---------------------------------
## Standby
192.168.240.111 ol7ora12sf
---------------------------------아래의 내용을 추가 END-----------------------------------

 

--2번 노드 (root os user)
[root@ol7ora12rf2][/root]$ vi /etc/hosts
[root@ol7ora12rf2][/root]$ cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
### Public IP
192.168.240.11  ol7ora12rf1
192.168.240.12  ol7ora12rf2

### Private IP
10.0.1.11       ol7ora12rf1-priv
10.0.1.12       ol7ora12rf2-priv

### Virtual IP
192.168.240.14  ol7ora12rf1-vip
192.168.240.15  ol7ora12rf2-vip

### DNS
192.168.240.17  ol7ora12rf-scan
192.168.240.18  ol7ora12rf-scan
192.168.240.19  ol7ora12rf-scan

---------------------------------아래의 내용을 추가 BEGIN---------------------------------
## Standby
192.168.240.111 ol7ora12sf
---------------------------------아래의 내용을 추가 END-----------------------------------

 

2-2. Standby 서버

 

--root os user
[root@ol7ora12sf][/root]$ vi /etc/hosts
[root@ol7ora12sf][/root]$ cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
### Public IP
192.168.240.111 ol7ora12sf

---------------------------------아래의 내용을 추가 BEGIN---------------------------------
## Primary
192.168.240.11  ol7ora12rf1
192.168.240.12  ol7ora12rf2
---------------------------------아래의 내용을 추가 END-----------------------------------

 

3. tnsnames.ora 설정

 

3-1. Primary 서버

 

--1번 노드 (oracle os user)
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ vi $ORACLE_HOME/network/admin/tnsnames.ora
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ cat $ORACLE_HOME/network/admin/tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/12c/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

ORA12RF =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = ol7ora12rf-scan)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORA12RF)
    )
  )

---------------------------------아래의 내용을 추가 BEGIN---------------------------------
#Primary
TNS_ORA12RF =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.240.14)(PORT = 1522))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.240.15)(PORT = 1522))
          (LOAD_BALANCE = OFF)
          (FAILOVER = ON)
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORA12RF)
      (FAILOVER_MODE = (TYPE = SELECT)(METHOD = BASIC))
    )
)

#Standby
TNS_ORA12RF_STB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.240.111)(PORT = 1522))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORA12RF_STB)
    )
  )
---------------------------------아래의 내용을 추가 END----------------------------------- 


--2번 노드 (oracle os user)
[ORA12RF2:oracle@ol7ora12rf2][/home/oracle]$ vi $ORACLE_HOME/network/admin/tnsnames.ora
[ORA12RF2:oracle@ol7ora12rf2][/home/oracle]$ cat $ORACLE_HOME/network/admin/tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/12c/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

ORA12RF =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = ol7ora12rf-scan)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORA12RF)
    )
  )

---------------------------------아래의 내용을 추가 BEGIN---------------------------------
#Primary
TNS_ORA12RF =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.240.14)(PORT = 1522))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.240.15)(PORT = 1522))
          (LOAD_BALANCE = OFF)
          (FAILOVER = ON)
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORA12RF)
      (FAILOVER_MODE = (TYPE = SELECT)(METHOD = BASIC))
    )
)

#Standby
TNS_ORA12RF_STB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.240.111)(PORT = 1522))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORA12RF_STB)
    )
  )
---------------------------------아래의 내용을 추가 END-----------------------------------  


3-2. Standby 서버

 

--oracle os user
[ORA12SF:oracle@ol7ora12sf][/home/oracle]$ vi $ORACLE_HOME/network/admin/tnsnames.ora
[ORA12SF:oracle@ol7ora12sf][/home/oracle]$ cat $ORACLE_HOME/network/admin/tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/12c/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

ORA12SF =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = ol7ora12sf)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORA12SF)
    )
  )

LISTENER_ORA12SF =
  (ADDRESS = (PROTOCOL = TCP)(HOST = ol7ora12sf)(PORT = 1521))

---------------------------------아래의 내용을 추가 BEGIN---------------------------------
#Primary
TNS_ORA12RF =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.240.14)(PORT = 1522))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.240.15)(PORT = 1522))
          (LOAD_BALANCE = OFF)
          (FAILOVER = ON)
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORA12RF)
      (FAILOVER_MODE = (TYPE = SELECT)(METHOD = BASIC))
    )
)

#Standby
TNS_ORA12RF_STB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.240.111)(PORT = 1522))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORA12RF_STB)
    )
  )
---------------------------------아래의 내용을 추가 END----------------------------------- 

 

4. tnsping Test

 

4-1. Primary 에서 Standby 로 접속

 

--1번 노드 (oracle os user)
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ tnsping TNS_ORA12RF_STB

TNS Ping Utility for Linux: Version 12.2.0.1.0 - Production on 29-NOV-2025 16:52:58

Copyright (c) 1997, 2016, Oracle.  All rights reserved.

Used parameter files:


Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.240.111)(PORT = 1522)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORA12RF_STB)))
OK (10 msec)

 

--2번 노드 (oracle os user)
[ORA12RF2:oracle@ol7ora12rf2][/home/oracle]$ tnsping TNS_ORA12RF_STB

TNS Ping Utility for Linux: Version 12.2.0.1.0 - Production on 29-NOV-2025 16:53:18

Copyright (c) 1997, 2016, Oracle.  All rights reserved.

Used parameter files:


Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.240.111)(PORT = 1522)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORA12RF_STB)))
OK (10 msec)


4-2. Standby 에서 Primary 로 접속

 

--oracle os user
[ORA12SF:oracle@ol7ora12sf][/home/oracle]$ tnsping TNS_ORA12RF

TNS Ping Utility for Linux: Version 12.2.0.1.0 - Production on 07-DEC-2025 17:50:58

Copyright (c) 1997, 2016, Oracle.  All rights reserved.

Used parameter files:

Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.240.14)(PORT = 1522))

                                                     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.240.15)(PORT = 1522))

                                      (LOAD_BALANCE = OFF) (FAILOVER = ON))

                                      (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORA12RF)< /P > < P align = left > < STRONG > < FONT style = "BACKGROUND-COLOR: #d4ffd4" size = 2 >                                       (FAILOVER_MODE = (TYPE = SELECT)(METHOD = BASIC))))
OK (0 msec)

 

5. Primary DB에서 ADG 설정

 

5-1. 아카이브 로그 모드인지 확인

 

--1번 노드 (oracle os user)
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Sun Nov 30 17:24:46 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

[ol7ora12rf1]<SYS@ORA12RF1>$ archive log list
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            +FRA1
Oldest online log sequence     23
Next log sequence to archive   25
Current log sequence           25
--> 아카이브 로그 모드인 것을 확인함.

 

[ol7ora12rf1]<SYS@ORA12RF1>$
col name for a20
col database_role for a20
col open_mode for a20
col log_mode for a20
select name, inst_id, database_role, open_mode, log_mode from gv$database;

NAME                    INST_ID DATABASE_ROLE        OPEN_MODE            LOG_MODE
-------------------- ---------- -------------------- -------------------- --------------------
ORA12RF                       1 PRIMARY              READ WRITE           ARCHIVELOG
ORA12RF                       2 PRIMARY              READ WRITE           ARCHIVELOG

2 rows selected.

Elapsed: 00:00:00.01

 

5-2. 플래시백 로그 활성화

 

--1번 노드 (oracle os user)
[ol7ora12rf1]<SYS@ORA12RF1>$ select inst_id, flashback_on from gv$database;

   INST_ID FLASHBACK_ON
---------- ------------------------------------------------------
         1 NO
         2 NO
--> 플래시백 로그를 활성화 해야함

2 rows selected.

Elapsed: 00:00:00.01

 

[ol7ora12rf1]<SYS@ORA12RF1>$ show parameter recovery

NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
db_recovery_file_dest                string                            (NULL)
db_recovery_file_dest_size           big integer                       0
recovery_parallelism                 integer                           0
remote_recovery_file_dest            string                            (NULL)

 

[ol7ora12rf1]<SYS@ORA12RF1>$ alter system set db_recovery_file_dest='+FRA1' scope=spfile sid='*';

System altered.

Elapsed: 00:00:00.01

[ol7ora12rf1]<SYS@ORA12RF1>$ alter system set db_recovery_file_dest_size=32G scope=both sid='*';

System altered.

Elapsed: 00:00:00.01

[ol7ora12rf1]<SYS@ORA12RF1>$ show parameter flashback

NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
db_flashback_retention_target        integer                           2880

[ol7ora12rf1]<SYS@ORA12RF1>$ alter system set db_flashback_retention_target=2880 scope=both sid='*';

System altered.

Elapsed: 00:00:00.01

 

--ora12rf DB 내림 (양쪽 노드 모두 내려감)
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ srvctl stop database -db ora12rf

 

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ crsctl stat res ora.ora12rf.db -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.ora12rf.db
      1        OFFLINE OFFLINE                               Instance Shutdown,ST
                                                             ABLE
      2        OFFLINE OFFLINE                               Instance Shutdown,ST
                                                             ABLE
--------------------------------------------------------------------------------

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Sun Nov 30 17:34:29 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

Connected to an idle instance.

 

--1번 노드(한쪽 노드만 mount 모드로 기동)
[ol7ora12rf1]<SYS@ORA12RF1>$ startup mount
ORACLE instance started.

Total System Global Area 5033164800 bytes
Fixed Size                  8631048 bytes
Variable Size            1476398328 bytes
Database Buffers         3539992576 bytes
Redo Buffers                8142848 bytes
Database mounted.
[ol7ora12rf1]<
SYS@ORA12RF1>$ alter database flashback on;

Database altered.

Elapsed: 00:00:06.10
[ol7ora12rf1]<
SYS@ORA12RF1>$ alter database open;

Database altered.

Elapsed: 00:00:01.07

[ol7ora12rf1]<SYS@ORA12RF1>$ select flashback_on from v$database;

FLASHBACK_ON
------------------------------------------------------
YES

1 row selected.

Elapsed: 00:00:00.01

 

--2번 노드도 올림
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ srvctl start instance -db ora12rf -instance ORA12RF2 -startoption open

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ crsctl stat res ora.ora12rf.db -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.ora12rf.db
      1        ONLINE  ONLINE       ol7ora12rf1              Open,HOME=/u01/app/o
                                                             racle/product/12c/db
                                                             _1,STABLE
      2        ONLINE  ONLINE       ol7ora12rf2              Open,HOME=/u01/app/o
                                                             racle/product/12c/db
                                                             _1,STABLE
--------------------------------------------------------------------------------


[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Sun Dec 7 18:37:40 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

[ol7ora12rf1]<SYS@ORA12RF1>$

[ol7ora12rf1]<SYS@ORA12RF1>$ select inst_id, flashback_on from gv$database;

   INST_ID FLASHBACK_ON
---------- ------------------------------------------------------
         1 YES
         2 YES

2 rows selected.

Elapsed: 00:00:00.01
--> 플래시백 데이터베이스가 활성화 된것을 확인함

 

5-3. force logging 설정

 

--Primary 서버
--1번 노드 (oracle os user)

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Sun Nov 30 17:40:09 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

[ol7ora12rf1]<SYS@ORA12RF1>$
col force_logging for a20
col inst_id for 999
select inst_id, force_logging from gv$database;

INST_ID FORCE_LOGGING
------- --------------------
      1 NO
      2 NO

2 rows selected.

Elapsed: 00:00:00.02

 

--force logging 활성화
--해당 설정은 RAC환경에서 한쪽노드에서만 수행하면 됨
[ol7ora12rf1]<
SYS@ORA12RF1>$ alter database force logging;

Database altered.

Elapsed: 00:00:00.05

[ol7ora12rf1]<SYS@ORA12RF1>$
col force_logging for a20
col inst_id for 999
select inst_id, force_logging from gv$database;

INST_ID FORCE_LOGGING
------- --------------------
      1 YES
      2 YES
--> Force Logging 설정이 완료됨

2 rows selected.

Elapsed: 00:00:00.01

 

--ADG 구축에 필요한
--Archived log 모드 (필수)
--Flashback database (선택, Failover 시 빠른 복구)

--Force Logging (필수)
--위 3가지 설정이 완료된 상황임

 

5-4. ADG 관련 파라미터 조회 SQL Script 작성

 

--1번 노드 (oracle os user)
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ mkdir -p /home/oracle/oracle_scripts
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ cat > /home/oracle/oracle_scripts/adg_par.sql << 'EOF'
SET LINESIZE 300 PAGES 100
COL VALUE FOR A90
COL NAME FOR A50
SELECT NAME
     , VALUE
  FROM V$PARAMETER
 WHERE UPPER(NAME)
    IN ( UPPER(TRIM('DB_NAME'                  ))
       , UPPER(TRIM('DB_UNIQUE_NAME'           ))
       , UPPER(TRIM('LOG_ARCHIVE_CONFIG'       ))
       , UPPER(TRIM('LOG_ARCHIVE_DEST_1'       ))
       , UPPER(TRIM('LOG_ARCHIVE_DEST_2'       ))
       , UPPER(TRIM('LOG_ARCHIVE_DEST_STATE_1' ))
       , UPPER(TRIM('LOG_ARCHIVE_DEST_STATE_2' ))
       , UPPER(TRIM('REMOTE_LOGIN_PASSWORDFILE'))
       , UPPER(TRIM('LOG_ARCHIVE_FORMAT'       ))
       , UPPER(TRIM('LOG_ARCHIVE_MAX_PROCESSES'))
       , UPPER(TRIM('FAL_CLIENT'               ))
       , UPPER(TRIM('FAL_SERVER'               ))
       , UPPER(TRIM('DB_FILE_NAME_CONVERT'     ))
       , UPPER(TRIM('LOG_FILE_NAME_CONVERT'    ))
       , UPPER(TRIM('STANDBY_FILE_MANAGEMENT'  ))
       );
EOF

 

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ chmod 744 /home/oracle/oracle_scripts/adg_par.sql
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ ls -l /home/oracle/oracle_scripts/adg_par.sql
-rwxr--r--. 1 oracle oinstall 885 Dec  7 20:08 /home/oracle/oracle_scripts/adg_par.sql

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ alias cdos
alias cdos='cd /home/oracle/oracle_scripts'

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ cdos

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle/oracle_scripts]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle/oracle_scripts]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Sun Nov 30 17:53:09 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

[ol7ora12rf1]<SYS@ORA12RF1>$ @adg_par

NAME                                               VALUE
-------------------------------------------------- -----------------------------------------------
db_file_name_convert                               (NULL)
log_file_name_convert                              (NULL)
log_archive_dest_1                                 LOCATION=+FRA1
log_archive_dest_2                                 (NULL)
log_archive_dest_state_1                           enable
log_archive_dest_state_2                           enable
fal_client                                         (NULL)
fal_server                                         (NULL)
log_archive_config                                 (NULL)
log_archive_format                                 %t_%s_%r.ARC
log_archive_max_processes                          4
standby_file_management                            MANUAL
remote_login_passwordfile                          EXCLUSIVE
db_name                                            ORA12RF
db_unique_name                                     ORA12RF

15 rows selected.

Elapsed: 00:00:00.01
[ol7ora12rf1]<
SYS@ORA12RF1>$

 

--2번 노드 (oracle os user)
[ORA12RF2:oracle@ol7ora12rf2][/home/oracle]$ mkdir -p /home/oracle/oracle_scripts
[ORA12RF2:oracle@ol7ora12rf2][/home/oracle]$ cat > /home/oracle/oracle_scripts/adg_par.sql << 'EOF'
SET LINESIZE 300 PAGES 100
COL VALUE FOR A90
COL NAME FOR A50
SELECT NAME
     , VALUE
  FROM V$PARAMETER
 WHERE UPPER(NAME)
    IN ( UPPER(TRIM('DB_NAME'                  ))
       , UPPER(TRIM('DB_UNIQUE_NAME'           ))
       , UPPER(TRIM('LOG_ARCHIVE_CONFIG'       ))
       , UPPER(TRIM('LOG_ARCHIVE_DEST_1'       ))
       , UPPER(TRIM('LOG_ARCHIVE_DEST_2'       ))
       , UPPER(TRIM('LOG_ARCHIVE_DEST_STATE_1' ))
       , UPPER(TRIM('LOG_ARCHIVE_DEST_STATE_2' ))
       , UPPER(TRIM('REMOTE_LOGIN_PASSWORDFILE'))
       , UPPER(TRIM('LOG_ARCHIVE_FORMAT'       ))
       , UPPER(TRIM('LOG_ARCHIVE_MAX_PROCESSES'))
       , UPPER(TRIM('FAL_CLIENT'               ))
       , UPPER(TRIM('FAL_SERVER'               ))
       , UPPER(TRIM('DB_FILE_NAME_CONVERT'     ))
       , UPPER(TRIM('LOG_FILE_NAME_CONVERT'    ))
       , UPPER(TRIM('STANDBY_FILE_MANAGEMENT'  ))
       );
EOF

 

[ORA12RF2:oracle@ol7ora12rf2][/home/oracle]$ chmod 744 /home/oracle/oracle_scripts/adg_par.sql

[ORA12RF2:oracle@ol7ora12rf2][/home/oracle]$ alias cdos
alias cdos='cd /home/oracle/oracle_scripts'

[ORA12RF2:oracle@ol7ora12rf2][/home/oracle]$ cdos
[ORA12RF2:oracle@ol7ora12rf2][/home/oracle/oracle_scripts]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'
[ORA12RF2:oracle@ol7ora12rf2][/home/oracle/oracle_scripts]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Sun Nov 30 17:53:09 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

[ol7ora12rf1]<SYS@ORA12RF2>$ @adg_par

NAME                                               VALUE
-------------------------------------------------- --------------------------------------------
db_file_name_convert                               (NULL)
log_file_name_convert                              (NULL)
log_archive_dest_1                                 LOCATION=+FRA1
log_archive_dest_2                                 (NULL)
log_archive_dest_state_1                           enable
log_archive_dest_state_2                           enable
fal_client                                         (NULL)
fal_server                                         (NULL)
log_archive_config                                 (NULL)
log_archive_format                                 %t_%s_%r.ARC
log_archive_max_processes                          4
standby_file_management                            MANUAL
remote_login_passwordfile                          EXCLUSIVE
db_name                                            ORA12RF
db_unique_name                                     ORA12RF

15 rows selected.

Elapsed: 00:00:00.01
[ol7ora12rf2]<
SYS@ORA12RF2>$

 

5-5. 파라미터 설정

 

--1번 노드 (oracle os user)
[ol7ora12rf1]<SYS@ORA12RF1>$ ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO SCOPE=BOTH SID= '*';

System altered.

Elapsed: 00:00:00.03

 

5-6. 리두 로그 추가

 

--Primary DB에 Standby Redo Log를 추가한다.
--1번 노드 (oracle os user)

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ cat > /home/oracle/oracle_scripts/rdl.sql << 'EOF'
col group# for 999
col thread# for 999
col member for a50
col STATUS for a10
col TYPE for a10
col MB for 999,999,999
col STATUS for a15
SELECT A.GROUP#
     , B.THREAD#
     , B.SEQUENCE#
     , A.MEMBER
     , A.STATUS
     , A.TYPE
     , B.BYTES/1024/1024 AS MB
     , B.STATUS
  FROM V$LOGFILE A
     , V$LOG B
 WHERE A.GROUP# = B.GROUP#
 ORDER BY 1
;
EOF

 

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle/oracle_scripts]$ chmod 744 /home/oracle/oracle_scripts/rdl.sql

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ alias cdos
alias cdos='cd /home/oracle/oracle_scripts'

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ cdos
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle/oracle_scripts]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle/oracle_scripts]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Sun Nov 30 17:59:16 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

[ol7ora12rf1]<SYS@ORA12RF1>$ @rdl

GROUP# THREAD#  SEQUENCE# MEMBER                                             STATUS          TYPE                 MB STATUS
------ ------- ---------- -------------------------------------------------- --------------- ---------- ------------ ---------------
     1       1         28 +FRA1/ORA12RF/ONLINELOG/group_1.259.1213483395     (NULL)          ONLINE              200 CURRENT
     1       1         28 +DATA1/ORA12RF/ONLINELOG/group_1.262.1213483395    (NULL)          ONLINE              200 CURRENT
     2       1         26 +DATA1/ORA12RF/ONLINELOG/group_2.263.1213483395    (NULL)          ONLINE              200 INACTIVE
     2       1         26 +FRA1/ORA12RF/ONLINELOG/group_2.257.1213483395     (NULL)          ONLINE              200 INACTIVE
     3       1         27 +FRA1/ORA12RF/ONLINELOG/group_3.258.1213483395     (NULL)          ONLINE              200 INACTIVE
     3       1         27 +DATA1/ORA12RF/ONLINELOG/group_3.264.1213483395    (NULL)          ONLINE              200 INACTIVE
     4       2         28 +DATA1/ORA12RF/ONLINELOG/group_4.267.1213483489    (NULL)          ONLINE              200 INACTIVE
     4       2         28 +FRA1/ORA12RF/ONLINELOG/group_4.260.1213483491     (NULL)          ONLINE              200 INACTIVE
     5       2         29 +DATA1/ORA12RF/ONLINELOG/group_5.268.1213483491    (NULL)          ONLINE              200 CURRENT
     5       2         29 +FRA1/ORA12RF/ONLINELOG/group_5.261.1213483491     (NULL)          ONLINE              200 CURRENT
     6       2         27 +DATA1/ORA12RF/ONLINELOG/group_6.269.1213483491    (NULL)          ONLINE              200 INACTIVE
     6       2         27 +FRA1/ORA12RF/ONLINELOG/group_6.262.1213483491     (NULL)          ONLINE              200 INACTIVE


12 rows selected.

Elapsed: 00:00:00.02

 

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ cat > /home/oracle/oracle_scripts/stb_rdl.sql << 'EOF'
COLUMN DUMMY FORMAT 999
COLUMN GROUP# FORMAT 9999
COLUMN THREAD# FORMAT 9999
COLUMN SEQUENCE# FORMAT 9999999
COLUMN ARCHIVED FORMAT A8
COLUMN STATUS FORMAT A12
COLUMN MEMBER FORMAT A60 WORD_WRAPPED
SELECT 1 AS DUMMY,
       a.GROUP#,
       a.THREAD#,
       a.SEQUENCE#,
       a.ARCHIVED,
       a.STATUS,
       b.STATUS AS LOG_STATUS,
       b.TYPE,
       b.MEMBER
  FROM V$STANDBY_LOG a, v$logfile b
 WHERE a.group# = b.group#
 ORDER BY a.GROUP#;
EOF

 

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle/oracle_scripts]$ chmod 744 /home/oracle/oracle_scripts/stb_rdl.sql


[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ alias cdos
alias cdos='cd /home/oracle/oracle_scripts'
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ cdos
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle/oracle_scripts]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle/oracle_scripts]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Sun Nov 30 18:00:54 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

[ol7ora12rf1]<SYS@ORA12RF1>$ @stb_rdl

no rows selected

Elapsed: 00:00:00.01
[ol7ora12rf1]<SYS@ORA12RF1>$

 

--Standby Redo Log 추가 (Standby Redo log의 Group은 Redo log보다 1개 더 많아야함)
--Redo log group의 수 3 + 1 = Standby Redo Log Group의 개수(=4)
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 group  7 ('+DATA1','+FRA1') SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 group  8 ('+DATA1','+FRA1') SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 group  9 ('+DATA1','+FRA1') SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 group 10 ('+DATA1','+FRA1') SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 group 11 ('+DATA1','+FRA1') SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 group 12 ('+DATA1','+FRA1') SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 group 13 ('+DATA1','+FRA1') SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 group 14 ('+DATA1','+FRA1') SIZE 200M;


[ol7ora12rf1]<SYS@ORA12RF1>$ @stb_rdl

DUMMY GROUP# THREAD# SEQUENCE# ARCHIVED STATUS       LOG_STATUS            TYPE       MEMBER
----- ------ ------- --------- -------- ------------ --------------------- ---------- -------------------------------------------------
    1      7       1         0 YES      UNASSIGNED   (NULL)                STANDBY    +DATA1/ORA12RF/ONLINELOG/group_7.282.1220458057
    1      7       1         0 YES      UNASSIGNED   (NULL)                STANDBY    +FRA1/ORA12RF/ONLINELOG/group_7.419.1220458057
    1      8       1         0 YES      UNASSIGNED   (NULL)                STANDBY    +DATA1/ORA12RF/ONLINELOG/group_8.281.1220458059
    1      8       1         0 YES      UNASSIGNED   (NULL)                STANDBY    +FRA1/ORA12RF/ONLINELOG/group_8.418.1220458059
    1      9       1         0 YES      UNASSIGNED   (NULL)                STANDBY    +DATA1/ORA12RF/ONLINELOG/group_9.280.1220458059
    1      9       1         0 YES      UNASSIGNED   (NULL)                STANDBY    +FRA1/ORA12RF/ONLINELOG/group_9.417.1220458059
    1     10       1         0 YES      UNASSIGNED   (NULL)                STANDBY    +DATA1/ORA12RF/ONLINELOG/group_10.279.1220458059
    1     10       1         0 YES      UNASSIGNED   (NULL)                STANDBY    +FRA1/ORA12RF/ONLINELOG/group_10.416.1220458059
    1     11       2         0 YES      UNASSIGNED   (NULL)                STANDBY    +DATA1/ORA12RF/ONLINELOG/group_11.278.1220458061
    1     11       2         0 YES      UNASSIGNED   (NULL)                STANDBY    +FRA1/ORA12RF/ONLINELOG/group_11.415.1220458061
    1     12       2         0 YES      UNASSIGNED   (NULL)                STANDBY    +DATA1/ORA12RF/ONLINELOG/group_12.265.1220458061
    1     12       2         0 YES      UNASSIGNED   (NULL)                STANDBY    +FRA1/ORA12RF/ONLINELOG/group_12.414.1220458061
    1     13       2         0 YES      UNASSIGNED   (NULL)                STANDBY    +DATA1/ORA12RF/ONLINELOG/group_13.270.1220458061
    1     13       2         0 YES      UNASSIGNED   (NULL)                STANDBY    +FRA1/ORA12RF/ONLINELOG/group_13.413.1220458061
    1     14       2         0 YES      UNASSIGNED   (NULL)                STANDBY    +DATA1/ORA12RF/ONLINELOG/group_14.277.1220458063
    1     14       2         0 YES      UNASSIGNED   (NULL)                STANDBY    +FRA1/ORA12RF/ONLINELOG/group_14.412.1220458063

16 rows selected.

Elapsed: 00:00:00.01
--> Standby Redo Log 추가를 완료함

 

--2번 노드 (oracle os user)
[ORA12RF2:oracle@ol7ora12rf2][/home/oracle]$ cat > /home/oracle/oracle_scripts/rdl.sql << 'EOF'
col group# for 999
col thread# for 999
col member for a50
col STATUS for a10
col TYPE for a10
col MB for 999,999,999
col STATUS for a15
SELECT A.GROUP#
     , B.THREAD#
     , B.SEQUENCE#
     , A.MEMBER
     , A.STATUS
     , A.TYPE
     , B.BYTES/1024/1024 AS MB
     , B.STATUS
  FROM V$LOGFILE A
     , V$LOG B
 WHERE A.GROUP# = B.GROUP#
 ORDER BY 1
;
EOF

 

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle/oracle_scripts]$ chmod 744 /home/oracle/oracle_scripts/rdl.sql

 

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ cat > /home/oracle/oracle_scripts/stb_rdl.sql << 'EOF'
COLUMN DUMMY FORMAT 999
COLUMN GROUP# FORMAT 9999
COLUMN THREAD# FORMAT 9999
COLUMN SEQUENCE# FORMAT 9999999
COLUMN ARCHIVED FORMAT A8
COLUMN STATUS FORMAT A12
COLUMN MEMBER FORMAT A60 WORD_WRAPPED
SELECT 1 AS DUMMY,
       a.GROUP#,
       a.THREAD#,
       a.SEQUENCE#,
       a.ARCHIVED,
       a.STATUS,
       b.STATUS AS LOG_STATUS,
       b.TYPE,
       b.MEMBER
  FROM V$STANDBY_LOG a, v$logfile b
 WHERE a.group# = b.group#
 ORDER BY a.GROUP#;
EOF

 

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle/oracle_scripts]$ chmod 744 /home/oracle/oracle_scripts/stb_rdl.sql


[ORA12RF2:oracle@ol7ora12rf2][/home/oracle/oracle_scripts]$ alias cdos
alias cdos='cd /home/oracle/oracle_scripts'

[ORA12RF2:oracle@ol7ora12rf2][/home/oracle]$ cdos
[ORA12RF2:oracle@ol7ora12rf2][/home/oracle/oracle_scripts]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'
[ORA12RF2:oracle@ol7ora12rf2][/home/oracle/oracle_scripts]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Sun Dec 7 20:17:07 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

[ol7ora12rf2]<SYS@ORA12RF2>$ @rdl

GROUP# THREAD# SEQUENCE# MEMBER                                             STATUS          TYPE                 MB STATUS
------ ------- --------- -------------------------------------------------- --------------- ---------- ------------ ---------
     1       1        26 +FRA1/ORA12RF/ONLINELOG/group_1.259.1213483395     (NULL)          ONLINE              200 CURRENT
     1       1        26 +DATA1/ORA12RF/ONLINELOG/group_1.262.1213483395    (NULL)          ONLINE              200 CURRENT
     2       1        24 +DATA1/ORA12RF/ONLINELOG/group_2.263.1213483395    (NULL)          ONLINE              200 INACTIVE
     2       1        24 +FRA1/ORA12RF/ONLINELOG/group_2.257.1213483395     (NULL)          ONLINE              200 INACTIVE
     3       1        25 +FRA1/ORA12RF/ONLINELOG/group_3.258.1213483395     (NULL)          ONLINE              200 INACTIVE
     3       1        25 +DATA1/ORA12RF/ONLINELOG/group_3.264.1213483395    (NULL)          ONLINE              200 INACTIVE
     4       2        20 +DATA1/ORA12RF/ONLINELOG/group_4.267.1213483489    (NULL)          ONLINE              200 INACTIVE
     4       2        20 +FRA1/ORA12RF/ONLINELOG/group_4.260.1213483491     (NULL)          ONLINE              200 INACTIVE
     5       2        21 +DATA1/ORA12RF/ONLINELOG/group_5.268.1213483491    (NULL)          ONLINE              200 CURRENT
     5       2        21 +FRA1/ORA12RF/ONLINELOG/group_5.261.1213483491     (NULL)          ONLINE              200 CURRENT
     6       2        19 +DATA1/ORA12RF/ONLINELOG/group_6.269.1213483491    (NULL)          ONLINE              200 INACTIVE
     6       2        19 +FRA1/ORA12RF/ONLINELOG/group_6.262.1213483491     (NULL)          ONLINE              200 INACTIVE

12 rows selected.

Elapsed: 00:00:00.02

 

[ol7ora12rf2]<SYS@ORA12RF2>$ @stb_rdl

DUMMY GROUP# THREAD# SEQUENCE# ARCHIVED STATUS       LOG_STATUS            TYPE                  MEMBER
----- ------ ------- --------- -------- ------------ --------------------- --------------------- -------------------------------------------------
    1      7       1         0 YES      UNASSIGNED   (NULL)                STANDBY               +DATA1/ORA12RF/ONLINELOG/group_7.282.1220458057
    1      7       1         0 YES      UNASSIGNED   (NULL)                STANDBY               +FRA1/ORA12RF/ONLINELOG/group_7.419.1220458057
    1      8       1         0 YES      UNASSIGNED   (NULL)                STANDBY               +DATA1/ORA12RF/ONLINELOG/group_8.281.1220458059
    1      8       1         0 YES      UNASSIGNED   (NULL)                STANDBY               +FRA1/ORA12RF/ONLINELOG/group_8.418.1220458059
    1      9       1         0 YES      UNASSIGNED   (NULL)                STANDBY               +DATA1/ORA12RF/ONLINELOG/group_9.280.1220458059
    1      9       1         0 YES      UNASSIGNED   (NULL)                STANDBY               +FRA1/ORA12RF/ONLINELOG/group_9.417.1220458059
    1     10       1         0 YES      UNASSIGNED   (NULL)                STANDBY               +DATA1/ORA12RF/ONLINELOG/group_10.279.1220458059
    1     10       1         0 YES      UNASSIGNED   (NULL)                STANDBY               +FRA1/ORA12RF/ONLINELOG/group_10.416.1220458059
    1     11       2         0 YES      UNASSIGNED   (NULL)                STANDBY               +DATA1/ORA12RF/ONLINELOG/group_11.278.1220458061
    1     11       2         0 YES      UNASSIGNED   (NULL)                STANDBY               +FRA1/ORA12RF/ONLINELOG/group_11.415.1220458061
    1     12       2         0 YES      UNASSIGNED   (NULL)                STANDBY               +DATA1/ORA12RF/ONLINELOG/group_12.265.1220458061
    1     12       2         0 YES      UNASSIGNED   (NULL)                STANDBY               +FRA1/ORA12RF/ONLINELOG/group_12.414.1220458061
    1     13       2         0 YES      UNASSIGNED   (NULL)                STANDBY               +DATA1/ORA12RF/ONLINELOG/group_13.270.1220458061
    1     13       2         0 YES      UNASSIGNED   (NULL)                STANDBY               +FRA1/ORA12RF/ONLINELOG/group_13.413.1220458061
    1     14       2         0 YES      UNASSIGNED   (NULL)                STANDBY               +DATA1/ORA12RF/ONLINELOG/group_14.277.1220458063
    1     14       2         0 YES      UNASSIGNED   (NULL)                STANDBY               +FRA1/ORA12RF/ONLINELOG/group_14.412.1220458063

16 rows selected.

Elapsed: 00:00:00.02

[ol7ora12rf2]<SYS@ORA12RF2>$


6. Primary DB 풀 백업

 

6-1. 양쪽 노드에 Autobackup 디렉토리 생성

 

--1번 노드 (oracle os user)
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ mkdir -pv /home/oracle/BACKUP_FOR_ADG/autobackup
mkdir: created directory ‘/home/oracle/BACKUP_FOR_ADG’
mkdir: created directory ‘/home/oracle/BACKUP_FOR_ADG/autobackup’

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ cat >> ~oracle/.bash_profile << 'EOF'
alias cdbfa='cd /home/oracle/BACKUP_FOR_ADG'
EOF
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ source ~oracle/.bash_profile
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ cdbfa
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle/BACKUP_FOR_ADG]$

 

--2번 노드 (oracle os user)
[ORA12RF2:oracle@ol7ora12rf2][/home/oracle]$ mkdir -pv /home/oracle/BACKUP_FOR_ADG/autobackup
mkdir: created directory ‘/home/oracle/BACKUP_FOR_ADG’
mkdir: created directory ‘/home/oracle/BACKUP_FOR_ADG/autobackup’

[ORA12RF2:oracle@ol7ora12rf2][/home/oracle]$ cat >> ~oracle/.bash_profile << 'EOF'
alias cdbfa='cd /home/oracle/BACKUP_FOR_ADG'
EOF

[ORA12RF2:oracle@ol7ora12rf2][/home/oracle]$ source ~oracle/.bash_profile
[ORA12RF2:oracle@ol7ora12rf2][/home/oracle]$ cdbfa
[ORA12RF2:oracle@ol7ora12rf2][/home/oracle/BACKUP_FOR_ADG]$

--> AutoBackup 되는 위치는 반드시 모든 노드에 디렉토리가 있어야 함.

 

6-2. Primary DB 풀 백업

 

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ crontab -e
crontab: installing new crontab
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ crontab -l
0 2 * * * /home/oracle/os_scripts/delete_oracle_log.sh &>/dev/null
10 2 1 * * /home/oracle/os_scripts/modify_oracle_alert_log.sh &>/dev/null

#20 2 * * * /home/oracle/os_scripts/rman_backup.sh &>/dev/null
--> 자동 백업 작업을 하지 않도록 설정함 (ADG구축완료후 주석해제하면됨)

 

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle/BACKUP_FOR_ADG]$ alias rt
alias rt='rman target /'
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle/BACKUP_FOR_ADG]$ rt

Recovery Manager: Release 12.2.0.1.0 - Production on Sun Nov 30 18:08:14 2025

Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.

connected to target database: ORA12RF (DBID=4288610047)

RMAN>

run {
CONFIGURE RETENTION POLICY TO REDUNDANCY 1;
CONFIGURE BACKUP OPTIMIZATION OFF;
CONFIGURE DEFAULT DEVICE TYPE TO DISK;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/home/oracle/BACKUP_FOR_ADG/autobackup/%F';
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/home/oracle/BACKUP_FOR_ADG/snapcf_CA.f';
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET;
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1;
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1;
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE;
CONFIGURE RMAN OUTPUT TO KEEP FOR 7 DAYS;
CONFIGURE MAXSETSIZE TO UNLIMITED;
CONFIGURE ENCRYPTION FOR DATABASE OFF;
CONFIGURE ENCRYPTION ALGORITHM 'AES128';
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE;
#CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY; #For ADG
}

 

RUN {
CONFIGURE CONTROLFILE AUTOBACKUP OFF;
sql 'alter system archive log current';
sql 'alter system checkpoint';
crosscheck backupset;
crosscheck backup;
crosscheck copy;
crosscheck archivelog all;
BACKUP AS COMPRESSED BACKUPSET database FORMAT '/home/oracle/BACKUP_FOR_ADG/ORA12RF_%U.bkp';
BACKUP CURRENT CONTROLFILE FOR STANDBY FORMAT '/home/oracle/BACKUP_FOR_ADG/ORA12RF_STB_CTL_1_%U_%T';
delete noprompt obsolete;
delete noprompt expired backup;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
}

 

run {
crosscheck archivelog all;
backup archivelog all format '/home/oracle/BACKUP_FOR_ADG/%d_ARCHIVE_%T_%u_s%s_p%p' delete input;
BACKUP CURRENT CONTROLFILE FOR STANDBY FORMAT '/home/oracle/BACKUP_FOR_ADG/ORA12RF_STB_CTL_2_%U_%T';
}

--> BACKUP CURRENT CONTROLFILE FOR STANDBY FORMAT '/home/oracle/BACKUP_FOR_ADG/ORA12RF_STB_CTL_2_%U_%T';
    --> 아카이브 로그까지 백업 받은 후 최종적으로 STANDBY 용 컨트롤 파일을 백업 받음
    --> 추후 Standby에서 복구 시 해당 컨트롤 파일을 복구 시킬 것임
    --> 해당 컨트롤 파일이 아카이브 로그의 백업까지 정확히 인식하고 있음

RMAN> list backup;


List of Backup Sets
===================


BS Key  Size       Device Type Elapsed Time Completion Time
------- ---------- ----------- ------------ -------------------
181     2.04G      DISK        00:00:03     2025-12-21 16:21:15
        BP Key: 181   Status: AVAILABLE  Compressed: NO  Tag: TAG20251221T162112
        Piece Name: /home/oracle/BACKUP_FOR_ADG/ORA12RF_ARCHIVE_20251221_5u4btebo_s190_p1

  List of Archived Logs in backup set 181
  Thrd Seq     Low SCN    Low Time            Next SCN   Next Time
  ---- ------- ---------- ------------------- ---------- ---------
  1    18      13043984   2025-12-19 14:50:20 13224141   2025-12-19 22:48:55
  1    19      13224141   2025-12-19 22:48:55 13224806   2025-12-19 22:49:02
  1    20      13224806   2025-12-19 22:49:02 13381060   2025-12-20 10:04:03
  1    21      13381060   2025-12-20 10:04:03 13458769   2025-12-20 15:02:22
  1    22      13458961   2025-12-20 15:03:55 13606151   2025-12-20 23:00:25
  1    23      13606151   2025-12-20 23:00:25 13607814   2025-12-20 23:04:21
  1    24      13607814   2025-12-20 23:04:21 13670777   2025-12-21 02:20:03
  1    25      13670777   2025-12-21 02:20:03 13806243   2025-12-21 10:30:01
  1    26      13806243   2025-12-21 10:30:01 13900438   2025-12-21 16:14:51
  1    27      13900438   2025-12-21 16:14:51 13902289   2025-12-21 16:21:11
  2    15      13069967   2025-12-19 16:00:03 13257264   2025-12-20 00:06:14
  2    16      13257264   2025-12-20 00:06:14 13381059   2025-12-20 10:04:04
  2    17      13381059   2025-12-20 10:04:04 13381223   2025-12-20 10:04:04
  2    18      13419384   2025-12-20 13:11:16 13579249   2025-12-20 21:20:16
  2    19      13579249   2025-12-20 21:20:16 13670792   2025-12-21 02:20:04
  2    20      13670792   2025-12-21 02:20:04 13806248   2025-12-21 10:30:03
  2    21      13806248   2025-12-21 10:30:03 13900433   2025-12-21 16:14:51
  2    22      13900433   2025-12-21 16:14:51 13902296   2025-12-21 16:21:12


BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ -------------------
184     Full    5.47G      DISK        00:04:28     2025-12-21 17:17:24
        BP Key: 184   Status: AVAILABLE  Compressed: YES  Tag: TAG20251221T171256
        Piece Name: /home/oracle/BACKUP_FOR_ADG/ORA12RF_614bthco_1_1.bkp
  List of Datafiles in backup set 184
  File LV Type Ckp SCN    Ckp Time            Abs Fuz SCN Sparse Name
  ---- -- ---- ---------- ------------------- ----------- ------ ----
  1       Full 13917361   2025-12-21 17:12:56              NO    +DATA1/ORA12RF/DATAFILE/system.257.1213483305
  2       Full 13917361   2025-12-21 17:12:56              NO    +DATA1/ORA12RF/DATAFILE/tuner_data1.272.1216160599
  3       Full 13917361   2025-12-21 17:12:56              NO    +DATA1/ORA12RF/DATAFILE/sysaux.258.1213483329
  4       Full 13917361   2025-12-21 17:12:56              NO    +DATA1/ORA12RF/DATAFILE/undotbs1.259.1213483345
  5       Full 13917361   2025-12-21 17:12:56              NO    +DATA1/ORA12RF/DATAFILE/undotbs2.266.1213483407
  7       Full 13917361   2025-12-21 17:12:56              NO    +DATA1/ORA12RF/DATAFILE/users.260.1213483345
  8       Full 13917361   2025-12-21 17:12:56              NO    +DATA1/ORA12RF/DATAFILE/tuner_idx1.273.1216160601

--> 백업본의 Check Point SCN 은 13917361 임

 

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ -------------------
185     Full    1.13M      DISK        00:00:01     2025-12-21 17:17:32
        BP Key: 185   Status: AVAILABLE  Compressed: YES  Tag: TAG20251221T171256
        Piece Name: /home/oracle/BACKUP_FOR_ADG/ORA12RF_624bthlb_1_1.bkp
  SPFILE Included: Modification time: 2025-12-21 16:06:50
  SPFILE db_unique_name: ORA12RF
  Control File Included: Ckp SCN: 13918029     Ckp time: 2025-12-21 17:17:31

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ -------------------
186     Full    19.19M     DISK        00:00:01     2025-12-21 17:17:34
        BP Key: 186   Status: AVAILABLE  Compressed: NO  Tag: TAG20251221T171733
        Piece Name: /home/oracle/BACKUP_FOR_ADG/ORA12RF_STB_CTL_1_634bthld_1_1_20251221
  Standby Control File Included: Ckp SCN: 13918058     Ckp time: 2025-12-21 17:17:33
--> 이게 나중에 datafile 백업 직 후 백업 받은 Standby Control File 임 13918058 시점에서 백업 받았음
--> Standby DB의 Restore controlfile 작업 시 해당 파일(/home/oracle/BACKUP_FOR_ADG/ORA12RF_STB_CTL_1_634bthld_1_1_20251221)로 복구해야함

 

BS Key  Size       Device Type Elapsed Time Completion Time
------- ---------- ----------- ------------ -------------------
187     36.96M     DISK        00:00:00     2025-12-21 17:17:46
        BP Key: 187   Status: AVAILABLE  Compressed: NO  Tag: TAG20251221T171746
        Piece Name: /home/oracle/BACKUP_FOR_ADG/ORA12RF_ARCHIVE_20251221_644bthlq_s196_p1

  List of Archived Logs in backup set 187
  Thrd Seq     Low SCN    Low Time            Next SCN   Next Time
  ---- ------- ---------- ------------------- ---------- ---------
  1    28      13902289   2025-12-21 16:21:11 13917254   2025-12-21 17:12:55
  1    29      13917254   2025-12-21 17:12:55 13918143   2025-12-21 17:17:43
  2    23      13902296   2025-12-21 16:21:12 13917251   2025-12-21 17:12:55
  2    24      13917251   2025-12-21 17:12:55 13918154   2025-12-21 17:17:46
--> 아카이브 로그 백업 본임
--> Thread 1번의 최대 sequence 는 29 이고 Next SCN은 13918143 임
--> Thread 2번의 최대 sequence 는 24 이고 Next SCN은 13918154 임
--> 결국 Thread 1번의 sequence 27 의 Next SCN 이 더 작으므로 13918143-1=13918142 까지 복구가 가능한 상황임
--> 복구 시 에는 RECOVER DATABASE UNTIL SCN 13918143; --> 이렇게 해야함
--> RMAN에서 UNTIL SCN X를 사용할 때, Oracle은 "SCN X 도달 직전까지"를 의미

 

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ -------------------
188     Full    19.19M     DISK        00:00:01     2025-12-21 17:17:48
        BP Key: 188   Status: AVAILABLE  Compressed: NO  Tag: TAG20251221T171747
        Piece Name: /home/oracle/BACKUP_FOR_ADG/ORA12RF_STB_CTL_2_654bthlr_1_1_20251221
  Standby Control File Included: Ckp SCN: 13918186     Ckp time: 2025-12-21 17:17:47

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ -------------------
189     Full    19.22M     DISK        00:00:00     2025-12-21 17:17:49
        BP Key: 189   Status: AVAILABLE  Compressed: NO  Tag: TAG20251221T171749
        Piece Name: /home/oracle/BACKUP_FOR_ADG/autobackup/c-4288610047-20251221-03
  SPFILE Included: Modification time: 2025-12-21 16:06:50
  SPFILE db_unique_name: ORA12RF
  Control File Included: Ckp SCN: 13918198     Ckp time: 2025-12-21 17:17:49


RMAN> quit

Recovery Manager complete.

 

--백업 파일 확인
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ ls -lR /home/oracle/BACKUP_FOR_ADG
/home/oracle/BACKUP_FOR_ADG:
total 7973268
drwxr-xr-x. 2 oracle oinstall         38 Dec 21 17:17 autobackup
-rw-r--r--. 1 oracle asmadmin       3192 Dec 21 16:36 initORA12RF.ora
-rw-r-----. 1 oracle asmadmin 5872197632 Dec 21 17:17 ORA12RF_614bthco_1_1.bkp
-rw-r-----. 1 oracle asmadmin    1196032 Dec 21 17:17 ORA12RF_624bthlb_1_1.bkp
-rw-r-----. 1 oracle asmadmin 2192104448 Dec 21 16:21 ORA12RF_ARCHIVE_20251221_5u4btebo_s190_p1
-rw-r-----. 1 oracle asmadmin   38760960 Dec 21 17:17 ORA12RF_ARCHIVE_20251221_644bthlq_s196_p1
-rw-r-----. 1 oracle asmadmin   20135936 Dec 21 17:17 ORA12RF_STB_CTL_1_634bthld_1_1_20251221
-rw-r-----. 1 oracle asmadmin   20135936 Dec 21 17:17 ORA12RF_STB_CTL_2_654bthlr_1_1_20251221
-rwxr-xr-x. 1 oracle oinstall       3584 Dec 21 16:37 orapwORA12RF
-rw-r-----. 1 oracle asmadmin   20070400 Dec 21 17:17 snapcf_CA.f

/home/oracle/BACKUP_FOR_ADG/autobackup:
total 19700
-rw-r-----. 1 oracle asmadmin 20168704 Dec 21 17:17 c-4288610047-20251221-03

 

6-3. Primary DB의 pfile 과 pwfile 을 백업

 

--1번 노드 (oracle os user)
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Sun Nov 30 18:56:18 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

 

--파라미터 파일 백업
[ol7ora12rf1]<SYS@ORA12RF1>$ create pfile='/home/oracle/BACKUP_FOR_ADG/initORA12RF.ora' from spfile;

File created.

Elapsed: 00:00:00.01
[ol7ora12rf1]<
SYS@ORA12RF1>$ quit
Disconnected from Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

 

--spfile과 pwfile의 위치를 확인
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ srvctl config database -db ora12rf | grep -i file
Spfile: +DATA1/ORA12RF/PARAMETERFILE/spfile.276.1216917171
Password file: +DATA1/ORA12RF/PASSWORD/pwdora12rf.256.1213483291

 

--grid os user 로 접속해서 pwfile을 /tmp 위치에 복사
[+ASM1:grid@ol7ora12rf1][/home/grid]$ asmcmd pwcopy +DATA1/ORA12RF/PASSWORD/pwdora12rf.256.1213483291 /tmp/orapwORA12RF
copying +DATA1/ORA12RF/PASSWORD/pwdora12rf.256.1213483291 -> /tmp/orapwORA12RF
[+ASM1:grid@ol7ora12rf1][/home/grid]$ chmod 775 /tmp/orapwORA12RF
--> oracle os user가 복사해서 가져갈 수 있도록 775 권한을 줌

[+ASM1:grid@ol7ora12rf1][/home/grid]$ ls -l /tmp/orapwORA12RF
-rwxrwxr-x. 1 grid oinstall 3584 Dec 10 22:06 /tmp/orapwORA12RF


--oracle os user에서 /tmp 위치에 있는 pwfile 을 백업본이 저장된 디렉토리에 복사
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ cp /tmp/orapwORA12RF /home/oracle/BACKUP_FOR_ADG/
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ ls -l /home/oracle/BACKUP_FOR_ADG/orapwORA12RF
-rwxr-xr-x. 1 oracle oinstall 3584 Dec 10 22:09 /home/oracle/BACKUP_FOR_ADG/orapwORA12RF

 

--> 여기까지 해서 백업본, 아카이브 백업본, 스탠바이 컨트롤 파일, pfile, pwfile 까지
--> 모두 /home/oracle/BACKUP_FOR_ADG/ 위치에 존재하게

 

7. Standby 서버에서 Primary 서버의 DB 백업본 가져오기

 

--oracle os user로 접속

--Primary의 백업본을 가져올 디렉토리를 생성
[ORA12SF:oracle@ol7ora12sf][/home/oracle]$ mkdir -pv /home/oracle/BACKUP_FOR_ADG/autobackup
mkdir: created directory ‘/home/oracle/BACKUP_FOR_ADG’
mkdir: created directory ‘/home/oracle/BACKUP_FOR_ADG/autobackup’

--생성한 디렉토리를 .bash_profile에 alias로 등록
[ORA12SF:oracle@ol7ora12sf][/home/oracle]$ cat >> ~oracle/.bash_profile << 'EOF'
alias cdbfa='cd /home/oracle/BACKUP_FOR_ADG'
EOF

[ORA12SF:oracle@ol7ora12sf][/home/oracle]$ source ~oracle/.bash_profile

[ORA12SF:oracle@ol7ora12sf][/home/oracle]$ cdbfa
--Primary에 있는 DB 백업본을 scp를 이용해서 복사해옴

[ORA12SF:oracle@ol7ora12sf][/home/oracle/BACKUP_FOR_ADG]$ scp -rp ol7ora12rf1:/home/oracle/BACKUP_FOR_ADG/ /home/oracle/
oracle@ol7ora12rf1''s password:
c-4288610047-20251221-03                          100%   19MB 195.1MB/s   00:00
snapcf_CA.f                                       100%   19MB 187.3MB/s   00:00
ORA12RF_ARCHIVE_20251221_5u4btebo_s190_p1         100% 2091MB 268.3MB/s   00:07
initORA12RF.ora                                   100% 3192   458.1KB/s   00:00
orapwORA12RF                                      100% 3584   565.4KB/s   00:00
ORA12RF_614bthco_1_1.bkp                          100% 5600MB 114.5MB/s   00:48
ORA12RF_624bthlb_1_1.bkp                          100% 1168KB 163.9MB/s   00:00
ORA12RF_STB_CTL_1_634bthld_1_1_20251221           100%   19MB 198.0MB/s   00:00
ORA12RF_ARCHIVE_20251221_644bthlq_s196_p1         100%   37MB 248.1MB/s   00:00
ORA12RF_STB_CTL_2_654bthlr_1_1_20251221           100%   19MB 218.4MB/s   00:00
[ORA12RF:oracle@ol7ora12sf][/home/oracle/BACKUP_FOR_ADG]$

 

[ORA12SF:oracle@ol7ora12sf][/home/oracle]$ ls -lR /home/oracle/BACKUP_FOR_ADG
/home/oracle/BACKUP_FOR_ADG:
total 7973256
drwxr-xr-x. 2 oracle oinstall         38 Dec 21 17:17 autobackup
-rw-r--r--. 1 oracle oinstall       3192 Dec 21 17:21 initORA12RF.ora
-rw-r-----. 1 oracle oinstall 5872197632 Dec 21 17:17 ORA12RF_614bthco_1_1.bkp
-rw-r-----. 1 oracle oinstall    1196032 Dec 21 17:17 ORA12RF_624bthlb_1_1.bkp
-rw-r-----. 1 oracle oinstall 2192104448 Dec 21 16:21 ORA12RF_ARCHIVE_20251221_5u4btebo_s190_p1
-rw-r-----. 1 oracle oinstall   38760960 Dec 21 17:17 ORA12RF_ARCHIVE_20251221_644bthlq_s196_p1
-rw-r-----. 1 oracle oinstall   20135936 Dec 21 17:17 ORA12RF_STB_CTL_1_634bthld_1_1_20251221
-rw-r-----. 1 oracle oinstall   20135936 Dec 21 17:17 ORA12RF_STB_CTL_2_654bthlr_1_1_20251221
-rwxr-xr-x. 1 oracle oinstall       3584 Dec 21 17:21 orapwORA12RF
-rw-r-----. 1 oracle oinstall   20070400 Dec 21 17:17 snapcf_CA.f

/home/oracle/BACKUP_FOR_ADG/autobackup:
total 19696
-rw-r-----. 1 oracle oinstall 20168704 Dec 21 17:17 c-4288610047-20251221-03

 

8. Standby 서버 설정

 

8-1. 필수 바이너리 권한 확인

 

--oracle os user
[ORA12SF:oracle@ol7ora12sf][/home/oracle]$ ls -al $ORACLE_HOME/bin | egrep "extjob$|jssu$|oracle$|oradism"
-rwsr-x---.  1 root   oinstall   2241432 Nov 16 23:15 extjob
-rwsr-x---.  1 root   oinstall   2252256 Nov 16 19:13 jssu
-rwsr-s--x.  1 oracle asmadmin 408794904 Nov 16 23:15 oracle
-rwsr-x---.  1 root   oinstall     95844 Jan 26  2017 oradism
--> 만약 소유자/그룹 및 권한이 위와 같지 않다면 맞춰줘야함
--> oracle은 oracle:asmadmin에 6751
--> extjob, jssu, oradism 은 root:oinstall에 4750

 

--grid os user
[+ASM:grid@ol7ora12sf][/home/grid]$ ls -al $GRID_HOME/bin | egrep "extjob$|jssu$|oracle$|oradism"
-rwsr-x---.  1 root oinstall   2241432 Nov 16 23:09 extjob
-rwsr-x---.  1 root oinstall   2252256 Nov 16 18:15 jssu
-rwsr-s--x.  1 grid oinstall 373530016 Nov 16 23:09 oracle
-rwsr-x---.  1 root oinstall     95844 Jan 26  2017 oradism
--> 만약 소유자/그룹 및 권한이 위와 같지 않다면 맞춰줘야함

--> oracle은 grid:oinstall 6751
--> extjob, jssu, oradism 은 root:oinstall에 4750

 

8-2. oracle os user 로그인 시 접속 대상을 지정할 수 있도록 설정

 

--oracle os user
[ORA12SF:oracle@ol7ora12sf][/home/oracle]$ alias cdoss
alias cdoss='cd /home/oracle/os_scripts'
[ORA12SF:oracle@ol7ora12sf][/home/oracle]$ cdoss
[ORA12SF:oracle@ol7ora12sf][/home/oracle/os_scripts]$ cat > /home/oracle/os_scripts/oenv.sh << 'EOF'

#!/bin/bash

echo "접속할 데이터베이스(DB_NAME)를 선택하세요:"
echo "1) ORA12SF"
echo "2) ORA12RF"
echo "3) RESERVED"

if [ "$#" -eq 0 ]; then
    read -e -r -p "번호를 입력하세요 (1,2,3): " choice
else
    choice="$1"
fi

case "$choice" in
    1) SID="ORA12SF" ;;
    2) SID="ORA12RF" ;;
    3) SID="RESERVED" ;;
    *)
        echo "잘못된 입력입니다. ORA12SF DB로 적용합니다."
        SID="ORA12SF"
        ;;
esac

export ORACLE_SID="$SID"

echo "현재 ORACLE_SID: $ORACLE_SID"
if [ -z "$ORACLE_SID" ]; then
    echo "ORACLE_SID 환경변수가 설정되어 있지 않습니다. (예: export ORACLE_SID=ORA12SF)"
    exit 1
fi

case "$ORACLE_SID" in
    ORA12SF)
        echo "ORA12SF 환경 설정 적용 중..."
        export ORACLE_UNQNAME=ORA12SF
        export ORACLE_UNQNAME_LOWER=ora12sf
        export ORACLE_DBNAME=ORA12SF
        export ORACLE_DBNAME_LOWER=ora12sf
        export ORACLE_SID=ORA12SF
        export ORACLE_SID_LOWER=ora12sf
        ;;
    ORA12RF)
        echo "ORA12RF 환경 설정 적용 중..."
        export ORACLE_UNQNAME=ORA12RF_STB
        export ORACLE_UNQNAME_LOWER=ora12rf_stb
        export ORACLE_DBNAME=ORA12RF
        export ORACLE_DBNAME_LOWER=ora12rf
        export ORACLE_SID=ORA12RF
        export ORACLE_SID_LOWER=ora12rf
        ;;
    RESERVED)
        echo "RESERVED 환경 설정 적용 중..."
        export ORACLE_UNQNAME=RESERVED
        export ORACLE_UNQNAME_LOWER=reserved
        export ORACLE_DBNAME=RESERVED
        export ORACLE_DBNAME_LOWER=reserved
        export ORACLE_SID=RESERVED
        export ORACLE_SID_LOWER=reserved
        ;;
    *)
        echo "알 수 없는 ORACLE_SID: $ORACLE_SID"
        exit 1
        ;;
esac

echo "환경 설정 완료 : 현재 ORACLE_SID = $ORACLE_SID"
EOF

 

[ORA12SF:oracle@ol7ora12sf][/home/oracle/os_scripts]$ chmod 775 /home/oracle/os_scripts/oenv.sh

[ORA12SF:oracle@ol7ora12sf][/home/oracle/os_scripts]$ vi ~oracle/.bash_profile
[ORA12SF:oracle@ol7ora12sf][/home/oracle/os_scripts]$ cat ~oracle/.bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/.local/bin:$HOME/bin
stty erase $(tput kbs) ##추가 for oenv
. /home/oracle/os_scripts/oenv.sh ##추가 for oenv


export PATH
export TMP=/tmp
export TMPDIR=$TMP
export EDITOR=vi
export ORACLE_HOSTNAME=`hostname`


#export ORACLE_UNQNAME=ORA12SF ##주석 처리 for oenv
#export ORACLE_UNQNAME_LOWER=ora12sf ##주석 처리 for oenv

 

export ORACLE_BASE=/u01/app/oracle
export GRID_HOME=/u01/app/12c/grid
export DB_HOME=$ORACLE_BASE/product/12c/db_1
export ORACLE_HOME=$DB_HOME

#export ORACLE_DBNAME=ORA12SF ##주석 처리 for oenv
#export ORACLE_DBNAME_LOWER=ora12sf ##주석 처리 for oenv
#export ORACLE_SID=ORA12SF ##주석 처리 for oenv
#export ORACLE_SID_LOWER=ora12sf ##주석 처리 for oenv

 

export ORACLE_TERM=xterm
export BASE_PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$GRID_HOME/bin:$BASE_PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export NLS_LANG=AMERICAN_KOREA.AL32UTF8
export NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'
export PS1='[$ORACLE_SID:\u@\h][$PWD]$ '
alias ss='rlwrap sqlplus "/as sysdba"'
alias st='rlwrap sqlplus tuner/oracle'
alias cdt='cd $ORACLE_HOME/network/admin'
alias cdb='cd $ORACLE_BASE'
alias cdo='cd $ORACLE_HOME'
alias cdod='cd $ORACLE_HOME/dbs'
alias alog='tail -f $ORACLE_BASE/diag/rdbms/$ORACLE_UNQNAME_LOWER/$ORACLE_SID/trace/alert_$ORACLE_SID.log'
alias valog='vi -R $ORACLE_BASE/diag/rdbms/$ORACLE_UNQNAME_LOWER/$ORACLE_SID/trace/alert_$ORACLE_SID.log'
alias llog='tail -f $ORACLE_BASE/diag/tnslsnr/`hostname`/listener/trace/listener.log'
alias vllog='vi -R $ORACLE_BASE/diag/tnslsnr/`hostname`/listener/trace/listener.log'
#alias cdord='cd $ORACLE_BASE/oradata/$ORACLE_SID' #for FileSystem
alias csrt='crsctl stat res -t'
alias rt='rman target /'
alias cdrb='cd /home/oracle/rman_backup/$ORACLE_DBNAME'
alias cdrba='cd /home/oracle/rman_backup/$ORACLE_DBNAME/ADG'
alias cdrbx='cd /home/oracle/rman_backup/$ORACLE_DBNAME/XTTS'
alias cdx='cd /home/oracle/xtts'
alias cdos='cd /home/oracle/oracle_scripts'
alias cdoss='cd /home/oracle/os_scripts'
alias cdrbl='cd /home/oracle/os_scripts/rman_log'
set -o vi
stty erase ^H
stty erase ^?
alias cdbfa='cd /home/oracle/BACKUP_FOR_ADG'
alias oenv='source /home/oracle/os_scripts/oenv.sh' ##추가 for oenv

[ORA12SF:oracle@ol7ora12sf][/home/oracle]$ source ~oracle/.bash_profile
접속할 데이터베이스(DB_NAME)를 선택하세요:
1) ORA12SF
2) ORA12RF
3) RESERVED
번호를 입력하세요 (1,2,3): 2

현재 ORACLE_SID: ORA12RF
ORA12RF 환경 설정 적용 중...
환경 설정 완료 : 현재 ORACLE_SID = ORA12RF

 

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ oenv
접속할 데이터베이스(DB_NAME)를 선택하세요:
1) ORA12SF
2) ORA12RF
3) RESERVED
번호를 입력하세요 (1,2,3): 2
현재 ORACLE_SID: ORA12RF
ORA12RF 환경 설정 적용 중...
환경 설정 완료 : 현재 ORACLE_SID = ORA12RF

 

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ echo $ORACLE_UNQNAME
ORA12RF_STB

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ echo $ORACLE_UNQNAME_LOWER
ora12rf_stb
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ echo $ORACLE_DBNAME
ORA12RF
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ echo $ORACLE_DBNAME_LOWER
ora12rf
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ echo $ORACLE_SID
ORA12RF
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ echo $ORACLE_SID_LOWER
ora12rf

 

8-3. Standby 서버 내 ADG전용 리스너 정보 확인

 

--grid os user
[+ASM:grid@ol7ora12sf][/home/grid]$ lsnrctl status LISTENER_ADG

LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 10-DEC-2025 23:17:36

Copyright (c) 1991, 2016, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_ADG)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER_ADG
Version                   TNSLSNR for Linux: Version 12.2.0.1.0 - Production
Start Date                07-DEC-2025 18:15:01
Uptime                    3 days 5 hr. 2 min. 34 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/12c/grid/network/admin/listener.ora
Listener Log File         /u01/app/oracle/diag/tnslsnr/ol7ora12sf/listener_adg/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_ADG)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.240.111)(PORT=1522)))

--> 위의 정보를 Standby DB의 local_listener 파라미터로 세팅할 것임
Services Summary...
Service "ORA12RF_STB_DGMGRL" has 1 instance(s).
  Instance "ORA12RF", status UNKNOWN, has 1 handler(s) for this service...
--> 정적 리스너가 구동중인 것을 확인

The command completed successfully

 

8-4. 파라미터 파일 세팅

 

--oracle os user
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ cp /home/oracle/BACKUP_FOR_ADG/initORA12RF.ora /home/oracle/BACKUP_FOR_ADG/initORA12RF.ora.bak

[ORA12RF:oracle@ol7ora12sf][/home/oracle/BACKUP_FOR_ADG]$ vi /home/oracle/BACKUP_FOR_ADG/initORA12RF.ora

 

--아래와 같이 파라미터 파일 수정
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ cat /home/oracle/BACKUP_FOR_ADG/initORA12RF.ora
*._optimizer_gather_stats_on_load=FALSE
*.audit_file_dest='/u01/app/oracle/admin/ORA12RF_STB/adump' ##Modify
*.audit_sys_operations=TRUE
*.audit_trail='OS'
*.cluster_database=false ##Modify
*.compatible='12.2.0'
*.control_files='+DATA1/ORA12RF_STB/CONTROLFILE/current.261.1213483391','+FRA1/ORA12RF_STB/CONTROLFILE/current.256.1213483391' ##Modify
*.db_block_size=8192
*.db_create_file_dest='+DATA1'
*.db_create_online_log_dest_1='+DATA1'
*.db_create_online_log_dest_2='+FRA1'
*.db_flashback_retention_target=2880
*.db_unique_name='ORA12RF_STB' ##Add
*.db_name='ORA12RF'
*.db_recovery_file_dest='+FRA1'
*.db_recovery_file_dest_size=34359738368
*.diagnostic_dest='/u01/app/oracle'
*.disk_asynch_io=TRUE
*.dispatchers='(PROTOCOL=TCP) (SERVICE=ORA12RFXDB)'
*.filesystemio_options='SETALL'
*.heat_map='OFF'
family:dw_helper.instance_mode='read-only'
*.local_listener='

(ADDRESS_LIST=

(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.240.111)(PORT=1521))

(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.240.111)(PORT=1522)))' ##Modify
*.log_archive_dest_1='LOCATION=+FRA1'
*.log_archive_format='%t_%s_%r.ARC'
*.max_string_size='EXTENDED'
*.nls_language='AMERICAN'
*.nls_territory='KOREA'
*.open_cursors=300
*.optimizer_adaptive_plans=FALSE
*.optimizer_adaptive_reporting_only=TRUE
*.optimizer_dynamic_sampling=0
*.parallel_force_local=TRUE
*.parallel_min_servers=0
*.pga_aggregate_limit=0m
*.pga_aggregate_target=1601m
*.processes=1432
*.remote_login_passwordfile='exclusive'
*.resource_manager_plan='FORCE:'
*.sga_target=4800m
*.standby_file_management='AUTO'
*.undo_retention=3600
*.undo_tablespace='UNDOTBS1' ##Modify
*.uniform_log_timestamp_format=FALSE
*.use_large_pages='true' ##Modify
*.log_file_name_convert=('+DATA1/ORA12RF/', '+DATA1/ORA12RF_STB/', '+FRA1/ORA12RF/',  '+FRA1/ORA12RF_STB/') ##Add

 

8-5. 필수 디렉토리 생성

 

--oracle os user
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ mkdir -pv /u01/app/oracle/admin/ORA12RF_STB/adump
mkdir: created directory ‘/u01/app/oracle/admin/ORA12RF_STB’
mkdir: created directory ‘/u01/app/oracle/admin/ORA12RF_STB/adump’

 

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ ls -l /u01/app/oracle | grep admin
drwxrwxr-x.  5 grid   oinstall   52 Dec 11 22:51 admin
--> /u01/app/oracle/admin 디렉토리의 소유자가 grid:oinstall 이고 권한이 775인 것을 확인

 

8-6. Standby 서버에서 기존에 실행 중인 오라클 인스턴스를 stop 시키기

 

--기존에 Standby 서버에 운영중인 오라클 DB가 있었음 이걸 내리고 테스트할려고 하는것임

--메모리 공간 때문에 내리는 것임

 

[ORA12RF:oracle@ol7ora12sf][/home/oracle/BACKUP_FOR_ADG]$ crsctl stat res ora.ora12sf.db  -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.ora12sf.db
      1        ONLINE  ONLINE       ol7ora12sf               Open,HOME=/u01/app/o
                                                             racle/product/12c/db
                                                             _1,STABLE
--------------------------------------------------------------------------------

[ORA12RF:oracle@ol7ora12sf][/home/oracle/BACKUP_FOR_ADG]$ srvctl stop database -db ora12sf

[ORA12RF:oracle@ol7ora12sf][/home/oracle/BACKUP_FOR_ADG]$ crsctl stat res ora.ora12sf.db  -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.ora12sf.db
      1        OFFLINE OFFLINE                               Instance Shutdown,ST
                                                             ABLE
--------------------------------------------------------------------------------

 

9. Standby 서버에서 Primary DB의 풀 백업본을 복구

 

9-1. nomount 모드로 기동

 

--oracle os user
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ alias oenv
alias oenv='source /home/oracle/os_scripts/oenv.sh'
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ oenv
접속할 데이터베이스(DB_NAME)를 선택하세요:
1) ORA12SF
2) ORA12RF
3) RESERVED
번호를 입력하세요 (1,2,3): 2
현재 ORACLE_SID: ORA12RF
ORA12RF 환경 설정 적용 중...
환경 설정 완료 : 현재 ORACLE_SID = ORA12RF

 

[ORA12RF:oracle@ol7ora12sf][/home/oracle/BACKUP_FOR_ADG]$ echo $ORACLE_UNQNAME
ORA12RF_STB

[ORA12RF:oracle@ol7ora12sf][/home/oracle/BACKUP_FOR_ADG]$ echo $ORACLE_SID
ORA12RF

[ORA12RF:oracle@ol7ora12sf][/home/oracle/BACKUP_FOR_ADG]$ echo $ORACLE_DBNAME
ORA12RF

[ORA12RF:oracle@ol7ora12sf][/home/oracle/BACKUP_FOR_ADG]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'

[ORA12RF:oracle@ol7ora12sf][/home/oracle/BACKUP_FOR_ADG]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Sun Nov 30 19:58:39 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

Connected to an idle instance.

[ol7ora12sf]<SYS@ORA12RF>$ startup nomount pfile='/home/oracle/BACKUP_FOR_ADG/initORA12RF.ora';
ORACLE instance started.

Total System Global Area 5033164800 bytes
Fixed Size                  8631048 bytes
Variable Size            1409289464 bytes
Database Buffers         3607101440 bytes
Redo Buffers                8142848 bytes

 

9-2. Standby 컨트롤 파일 복구

 

--새로운 ssh창을 열어서
--oracle os user로 접속
접속할 데이터베이스(DB_NAME)를 선택하세요:
1) ORA12SF
2) ORA12RF
3) RESERVED
번호를 입력하세요 (1,2,3): 2
현재 ORACLE_SID: ORA12RF
ORA12RF 환경 설정 적용 중...
환경 설정 완료 : 현재 ORACLE_SID = ORA12RF

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ ls -laR /home/oracle/BACKUP_FOR_ADG/
/home/oracle/BACKUP_FOR_ADG/:
total 7973268
drwxr-xr-x.  3 oracle oinstall       4096 Dec 21 17:26 .
drwx------. 12 oracle oinstall       4096 Dec 21 17:27 ..
drwxr-xr-x.  2 oracle oinstall         38 Dec 21 17:17 autobackup
-rw-r--r--.  1 oracle oinstall       1775 Dec 21 17:26 initORA12RF.ora
-rw-r--r--.  1 oracle oinstall       3192 Dec 21 17:24 initORA12RF.ora.bak
-rw-r-----.  1 oracle oinstall 5872197632 Dec 21 17:17 ORA12RF_614bthco_1_1.bkp
-rw-r-----.  1 oracle oinstall    1196032 Dec 21 17:17 ORA12RF_624bthlb_1_1.bkp
-rw-r-----.  1 oracle oinstall 2192104448 Dec 21 16:21 ORA12RF_ARCHIVE_20251221_5u4btebo_s190_p1
-rw-r-----.  1 oracle oinstall   38760960 Dec 21 17:17 ORA12RF_ARCHIVE_20251221_644bthlq_s196_p1
-rw-r-----.  1 oracle oinstall   20135936 Dec 21 17:17 ORA12RF_STB_CTL_1_634bthld_1_1_20251221
-rw-r-----.  1 oracle oinstall   20135936 Dec 21 17:17 ORA12RF_STB_CTL_2_654bthlr_1_1_20251221
-rwxr-xr-x.  1 oracle oinstall       3584 Dec 21 17:21 orapwORA12RF
-rw-r-----.  1 oracle oinstall   20070400 Dec 21 17:17 snapcf_CA.f

/home/oracle/BACKUP_FOR_ADG/autobackup:
total 19700
drwxr-xr-x. 2 oracle oinstall       38 Dec 21 17:17 .
drwxr-xr-x. 3 oracle oinstall     4096 Dec 21 17:26 ..
-rw-r-----. 1 oracle oinstall 20168704 Dec 21 17:17 c-4288610047-20251221-03

 

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ alias rt
alias rt='rman target /'
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ rt

Recovery Manager: Release 12.2.0.1.0 - Production on Thu Dec 11 22:59:51 2025

Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.

connected to target database: ORA12RF (not mounted)

RMAN> restore controlfile from '/home/oracle/BACKUP_FOR_ADG/ORA12RF_STB_CTL_1_634bthld_1_1_20251221';
--> Primary DB 백업 시 아카이브 로그 백업 직후 백업 받은 Standby Controlfile 임

Starting restore at 2025-12-21 18:05:18
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=823 device type=DISK

channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
output file name=+DATA1/ORA12RF_STB/CONTROLFILE/current.291.1220465119
output file name=+FRA1/ORA12RF_STB/CONTROLFILE/current.441.1220465119
Finished restore at 2025-12-21 18:05:19

--> 컨트롤 파일 복구 완료

 

--새로운 ssh창을 열어서
--grid os user로 접속하여 복구된 컨트롤 파일 확인
[+ASM:grid@ol7ora12sf][/home/grid]$ asmcmd ls -sl +DATA1/ORA12RF_STB/CONTROLFILE/

Type         Redund  Striped  Time             Sys  Block_Size  Blocks     Bytes     Space  Name
CONTROLFILE  UNPROT  FINE     DEC 21 18:00:00  Y         16384    1225  20070400  33554432  current.291.1220465119
[+ASM:grid@ol7ora12sf][/home/grid]$ asmcmd ls -sl +FRA1/ORA12RF_STB/CONTROLFILE/

Type         Redund  Striped  Time             Sys  Block_Size  Blocks     Bytes     Space  Name
CONTROLFILE  UNPROT  FINE     DEC 21 18:00:00  Y         16384    1225  20070400  33554432  current.441.1220465119

 

--새로운 ssh창 열어서
--oracle os user 로 접속
접속할 데이터베이스(DB_NAME)를 선택하세요:
1) ORA12SF
2) ORA12RF
3) RESERVED
번호를 입력하세요 (1,2,3): 2
현재 ORACLE_SID: ORA12RF
ORA12RF 환경 설정 적용 중...
환경 설정 완료 : 현재 ORACLE_SID = ORA12RF
--pfile에서 control_files 파라미터 수정

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ vi /home/oracle/BACKUP_FOR_ADG/initORA12RF.ora

[ORA12RF:oracle@ol7ora12sf][/home/oracle/BACKUP_FOR_ADG]$ cat /home/oracle/BACKUP_FOR_ADG/initORA12RF.ora | grep -i control_files
*.control_files='+DATA1/ORA12RF_STB/CONTROLFILE/current.291.1220465119','+FRA1/ORA12RF_STB/CONTROLFILE/current.441.1220465119' ##Modify
#*.control_files='+DATA1/ORA12RF_STB/CONTROLFILE/current.261.1213483391','+FRA1/ORA12RF_STB/CONTROLFILE/current.256.1213483391' ##Modify


9-3. database restore

 

--oracle os user 의 rman 접속 창으로 돌아와서 database mount
RMAN> alter database mount;

Statement processed
released channel: ORA_DISK_1

--인식하고 있는 백업본을 확인함
--Primary DB에서 백업 시 백업본이 저장된 디렉토리 위치와 Standby DB에 저장된 Primary DB의 백업본의 디렉토리 경로가 같으므로 제대로 인식하게 될 것임
RMAN> list backup;

List of Backup Sets
===================


BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ -------------------
178     Full    5.47G      DISK        00:04:30     2025-12-21 16:19:23
        BP Key: 178   Status: AVAILABLE  Compressed: YES  Tag: TAG20251221T161453
        Piece Name: /home/oracle/BACKUP_FOR_ADG/ORA12RF_5r4btdvt_1_1.bkp
  List of Datafiles in backup set 178
  File LV Type Ckp SCN    Ckp Time            Abs Fuz SCN Sparse Name
  ---- -- ---- ---------- ------------------- ----------- ------ ----
  1       Full 13900519   2025-12-21 16:14:53              NO    +DATA1/ORA12RF/DATAFILE/system.257.1213483305
  2       Full 13900519   2025-12-21 16:14:53              NO    +DATA1/ORA12RF/DATAFILE/tuner_data1.272.1216160599
  3       Full 13900519   2025-12-21 16:14:53              NO    +DATA1/ORA12RF/DATAFILE/sysaux.258.1213483329
  4       Full 13900519   2025-12-21 16:14:53              NO    +DATA1/ORA12RF/DATAFILE/undotbs1.259.1213483345
  5       Full 13900519   2025-12-21 16:14:53              NO    +DATA1/ORA12RF/DATAFILE/undotbs2.266.1213483407
  7       Full 13900519   2025-12-21 16:14:53              NO    +DATA1/ORA12RF/DATAFILE/users.260.1213483345
  8       Full 13900519   2025-12-21 16:14:53              NO    +DATA1/ORA12RF/DATAFILE/tuner_idx1.273.1216160601

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ -------------------
179     Full    1.13M      DISK        00:00:01     2025-12-21 16:19:29
        BP Key: 179   Status: AVAILABLE  Compressed: YES  Tag: TAG20251221T161453
        Piece Name: /home/oracle/BACKUP_FOR_ADG/ORA12RF_5s4bte8g_1_1.bkp
  SPFILE Included: Modification time: 2025-12-21 16:06:50
  SPFILE db_unique_name: ORA12RF
  Control File Included: Ckp SCN: 13901196     Ckp time: 2025-12-21 16:19:28

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ -------------------
180     Full    19.19M     DISK        00:00:01     2025-12-21 16:19:31
        BP Key: 180   Status: AVAILABLE  Compressed: NO  Tag: TAG20251221T161930
        Piece Name: /home/oracle/BACKUP_FOR_ADG/ORA12RF_STB_CTL_5t4bte8i_1_1_20251221
  Standby Control File Included: Ckp SCN: 13901223     Ckp time: 2025-12-21 16:19:30

BS Key  Size       Device Type Elapsed Time Completion Time
------- ---------- ----------- ------------ -------------------
181     2.04G      DISK        00:00:03     2025-12-21 16:21:15
        BP Key: 181   Status: AVAILABLE  Compressed: NO  Tag: TAG20251221T162112
        Piece Name: /home/oracle/BACKUP_FOR_ADG/ORA12RF_ARCHIVE_20251221_5u4btebo_s190_p1

  List of Archived Logs in backup set 181
  Thrd Seq     Low SCN    Low Time            Next SCN   Next Time
  ---- ------- ---------- ------------------- ---------- ---------
  1    18      13043984   2025-12-19 14:50:20 13224141   2025-12-19 22:48:55
  1    19      13224141   2025-12-19 22:48:55 13224806   2025-12-19 22:49:02
  1    20      13224806   2025-12-19 22:49:02 13381060   2025-12-20 10:04:03
  1    21      13381060   2025-12-20 10:04:03 13458769   2025-12-20 15:02:22
  1    22      13458961   2025-12-20 15:03:55 13606151   2025-12-20 23:00:25
  1    23      13606151   2025-12-20 23:00:25 13607814   2025-12-20 23:04:21
  1    24      13607814   2025-12-20 23:04:21 13670777   2025-12-21 02:20:03
  1    25      13670777   2025-12-21 02:20:03 13806243   2025-12-21 10:30:01
  1    26      13806243   2025-12-21 10:30:01 13900438   2025-12-21 16:14:51
  1    27      13900438   2025-12-21 16:14:51 13902289   2025-12-21 16:21:11
  2    15      13069967   2025-12-19 16:00:03 13257264   2025-12-20 00:06:14
  2    16      13257264   2025-12-20 00:06:14 13381059   2025-12-20 10:04:04
  2    17      13381059   2025-12-20 10:04:04 13381223   2025-12-20 10:04:04
  2    18      13419384   2025-12-20 13:11:16 13579249   2025-12-20 21:20:16
  2    19      13579249   2025-12-20 21:20:16 13670792   2025-12-21 02:20:04
  2    20      13670792   2025-12-21 02:20:04 13806248   2025-12-21 10:30:03
  2    21      13806248   2025-12-21 10:30:03 13900433   2025-12-21 16:14:51
  2    22      13900433   2025-12-21 16:14:51 13902296   2025-12-21 16:21:12

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ -------------------
182     Full    19.19M     DISK        00:00:01     2025-12-21 16:21:21
        BP Key: 182   Status: AVAILABLE  Compressed: NO  Tag: TAG20251221T162120
        Piece Name: /home/oracle/BACKUP_FOR_ADG/ORA12RF_STB_CTL_5v4btec0_1_1_20251221
  Standby Control File Included: Ckp SCN: 13902340     Ckp time: 2025-12-21 16:21:20

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ -------------------
183     Full    19.22M     DISK        00:00:00     2025-12-21 16:21:22
        BP Key: 183   Status: AVAILABLE  Compressed: NO  Tag: TAG20251221T162122
        Piece Name: /home/oracle/BACKUP_FOR_ADG/autobackup/c-4288610047-20251221-02
  SPFILE Included: Modification time: 2025-12-21 16:06:50
  SPFILE db_unique_name: ORA12RF
  Control File Included: Ckp SCN: 13902368     Ckp time: 2025-12-21 16:21:22

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ -------------------
184     Full    5.47G      DISK        00:04:28     2025-12-21 17:17:24
        BP Key: 184   Status: AVAILABLE  Compressed: YES  Tag: TAG20251221T171256
        Piece Name: /home/oracle/BACKUP_FOR_ADG/ORA12RF_614bthco_1_1.bkp
  List of Datafiles in backup set 184
  File LV Type Ckp SCN    Ckp Time            Abs Fuz SCN Sparse Name
  ---- -- ---- ---------- ------------------- ----------- ------ ----
  1       Full 13917361   2025-12-21 17:12:56              NO    +DATA1/ORA12RF/DATAFILE/system.257.1213483305
  2       Full 13917361   2025-12-21 17:12:56              NO    +DATA1/ORA12RF/DATAFILE/tuner_data1.272.1216160599
  3       Full 13917361   2025-12-21 17:12:56              NO    +DATA1/ORA12RF/DATAFILE/sysaux.258.1213483329
  4       Full 13917361   2025-12-21 17:12:56              NO    +DATA1/ORA12RF/DATAFILE/undotbs1.259.1213483345
  5       Full 13917361   2025-12-21 17:12:56              NO    +DATA1/ORA12RF/DATAFILE/undotbs2.266.1213483407
  7       Full 13917361   2025-12-21 17:12:56              NO    +DATA1/ORA12RF/DATAFILE/users.260.1213483345
  8       Full 13917361   2025-12-21 17:12:56              NO    +DATA1/ORA12RF/DATAFILE/tuner_idx1.273.1216160601

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ -------------------
185     Full    1.13M      DISK        00:00:01     2025-12-21 17:17:32
        BP Key: 185   Status: AVAILABLE  Compressed: YES  Tag: TAG20251221T171256
        Piece Name: /home/oracle/BACKUP_FOR_ADG/ORA12RF_624bthlb_1_1.bkp
  SPFILE Included: Modification time: 2025-12-21 16:06:50
  SPFILE db_unique_name: ORA12RF
  Control File Included: Ckp SCN: 13918029     Ckp time: 2025-12-21 17:17:31


--Primary DB에서 아래의 SQL문 실행 (oracle os user)
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Sun Dec 21 17:57:41 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

[ol7ora12rf1]<SYS@ORA12RF1>$
set linesize 200
set pagesize 0
set feedback off
set verify off
set heading off
set restore_datafile for a50
SELECT 'RESTORE DATAFILE ' || LISTAGG(FILE#, ', ') WITHIN GROUP (ORDER BY FILE#) || ';' as restore_datafile FROM V$DATAFILE;

RESTORE DATAFILE 1, 2, 3, 4, 5, 7, 8;

Elapsed: 00:00:00.01

 

run
{
    SET NEWNAME FOR DATABASE TO '+DATA1';
 #RESTORE DATABASE;
    RESTORE DATAFILE 1, 2, 3, 4, 5, 7, 8;
    SWITCH DATAFILE ALL;
    SWITCH TEMPFILE ALL;
}

executing command: SET NEWNAME

Starting restore at 2025-12-21 18:07:55
Starting implicit crosscheck backup at 2025-12-21 18:07:55
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=823 device type=DISK
Crosschecked 8 objects
Finished implicit crosscheck backup at 2025-12-21 18:07:55

Starting implicit crosscheck copy at 2025-12-21 18:07:55
using channel ORA_DISK_1
Finished implicit crosscheck copy at 2025-12-21 18:07:55

searching for all files in the recovery area
cataloging files...
no files cataloged

using channel ORA_DISK_1

channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00001 to +DATA1
channel ORA_DISK_1: restoring datafile 00002 to +DATA1
channel ORA_DISK_1: restoring datafile 00003 to +DATA1
channel ORA_DISK_1: restoring datafile 00004 to +DATA1
channel ORA_DISK_1: restoring datafile 00005 to +DATA1
channel ORA_DISK_1: restoring datafile 00007 to +DATA1
channel ORA_DISK_1: restoring datafile 00008 to +DATA1
channel ORA_DISK_1: reading from backup piece /home/oracle/BACKUP_FOR_ADG/ORA12RF_614bthco_1_1.bkp
channel ORA_DISK_1: piece handle=/home/oracle/BACKUP_FOR_ADG/ORA12RF_614bthco_1_1.bkp tag=TAG20251221T171256
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:06:45
Finished restore at 2025-12-21 18:14:40

datafile 1 switched to datafile copy
input datafile copy RECID=8 STAMP=1220465680 file name=+DATA1/ORA12RF_STB/DATAFILE/system.279.1220465275
datafile 2 switched to datafile copy
input datafile copy RECID=9 STAMP=1220465680 file name=+DATA1/ORA12RF_STB/DATAFILE/tuner_data1.292.1220465275
datafile 3 switched to datafile copy
input datafile copy RECID=10 STAMP=1220465680 file name=+DATA1/ORA12RF_STB/DATAFILE/sysaux.273.1220465275
datafile 4 switched to datafile copy
input datafile copy RECID=11 STAMP=1220465680 file name=+DATA1/ORA12RF_STB/DATAFILE/undotbs1.280.1220465275
datafile 5 switched to datafile copy
input datafile copy RECID=12 STAMP=1220465680 file name=+DATA1/ORA12RF_STB/DATAFILE/undotbs2.278.1220465275
datafile 7 switched to datafile copy
input datafile copy RECID=13 STAMP=1220465680 file name=+DATA1/ORA12RF_STB/DATAFILE/users.277.1220465275
datafile 8 switched to datafile copy
input datafile copy RECID=14 STAMP=1220465680 file name=+DATA1/ORA12RF_STB/DATAFILE/tuner_idx1.267.1220465275

renamed tempfile 2 to +DATA1 in control file
renamed tempfile 3 to +DATA1 in control file

 

--grid os user
[+ASM:grid@ol7ora12sf][/home/grid]$ asmcmd ls -sl +DATA1/ORA12RF_STB/DATAFILE/
Type      Redund  Striped  Time             Sys  Block_Size   Blocks        Bytes        Space  Name
DATAFILE  UNPROT  COARSE   DEC 21 18:00:00  Y          8192   646145   5293219840   5301600256  SYSAUX.273.1220465275
DATAFILE  UNPROT  COARSE   DEC 21 18:00:00  Y          8192   107609    881532928    889192448  SYSTEM.279.1220465275
DATAFILE  UNPROT  COARSE   DEC 21 18:00:00  Y          8192  2146817  17586724864  17595105280  TUNER_DATA1.292.1220465275
DATAFILE  UNPROT  COARSE   DEC 21 18:00:00  Y          8192  1378433  11292123136  11299454976  TUNER_IDX1.267.1220465275
DATAFILE  UNPROT  COARSE   DEC 21 18:00:00  Y          8192   318721   2610962432   2617245696  UNDOTBS1.280.1220465275
DATAFILE  UNPROT  COARSE   DEC 21 18:00:00  Y          8192    12801    104865792    109051904  UNDOTBS2.278.1220465275
DATAFILE  UNPROT  COARSE   DEC 21 18:00:00  Y          8192     3681     30154752     33554432  USERS.277.1220465275


--oracle os user
[ol7ora12sf]<SYS@ORA12RF>$
col name for a100
select name from v$datafile;
NAME
----------------------------------------------------------------------------------------------------
+DATA1/ORA12RF_STB/DATAFILE/system.279.1220465275
+DATA1/ORA12RF_STB/DATAFILE/tuner_data1.292.1220465275
+DATA1/ORA12RF_STB/DATAFILE/sysaux.273.1220465275
+DATA1/ORA12RF_STB/DATAFILE/undotbs1.280.1220465275
+DATA1/ORA12RF_STB/DATAFILE/undotbs2.278.1220465275
+DATA1/ORA12RF_STB/DATAFILE/users.277.1220465275
+DATA1/ORA12RF_STB/DATAFILE/tuner_idx1.267.1220465275

7 rows selected.

Elapsed: 00:00:00.01

 

[ol7ora12sf]<SYS@ORA12RF>$

col name for a100
select name from v$tempfile;
NAME
----------------------------------------------------------------------------------------------------
+DATA1
+DATA1

2 rows selected.

Elapsed: 00:00:00.01


[ol7ora12sf]<SYS@ORA12RF>$

SET LINESIZE 220 PAGESIZE 1000 TRIMSPOOL ON
SET NUMFORMAT 999,999,999,990

COL FILE#               FOR 99990
COL TS#                 FOR 99990
COL NAME                FOR A60
COL SIZE_MB             FOR 999,999,990.00
COL STATUS              FOR A10
COL CHECKPOINT_CHANGE#  FOR 999,999,999,999,999

SELECT A.FILE#
     , A.TS#
     , A.NAME
     , A.BYTES/1024/1024 AS SIZE_MB
     , A.STATUS
     , A.CHECKPOINT_CHANGE#
  FROM V$DATAFILE_HEADER A;

 FILE#    TS# NAME                                                                 SIZE_MB STATUS       CHECKPOINT_CHANGE#
------ ------ ------------------------------------------------------------ --------------- ---------- --------------------
     1      0 +DATA1/ORA12RF_STB/DATAFILE/system.279.1220465275                     840.69 ONLINE               13,917,361
     2      6 +DATA1/ORA12RF_STB/DATAFILE/tuner_data1.292.1220465275             16,772.00 ONLINE               13,917,361
     3      1 +DATA1/ORA12RF_STB/DATAFILE/sysaux.273.1220465275                   5,048.00 ONLINE               13,917,361
     4      2 +DATA1/ORA12RF_STB/DATAFILE/undotbs1.280.1220465275                 2,490.00 ONLINE               13,917,361
     5      5 +DATA1/ORA12RF_STB/DATAFILE/undotbs2.278.1220465275                   100.00 ONLINE               13,917,361
     7      4 +DATA1/ORA12RF_STB/DATAFILE/users.277.1220465275                       28.75 ONLINE               13,917,361
     8      7 +DATA1/ORA12RF_STB/DATAFILE/tuner_idx1.267.1220465275              10,769.00 ONLINE               13,917,361


7 rows selected.

Elapsed: 00:00:00.02

 

--rman 창에서
RMAN> report schema;

RMAN-06139: warning: control file is not current for REPORT SCHEMA
Report of database schema for database with db_unique_name ORA12RF_STB

List of Permanent Datafiles
===========================
File Size(MB) Tablespace           RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1    840      SYSTEM               ***     +DATA1/ORA12RF_STB/DATAFILE/system.279.1220465275
2    16772    TUNER_DATA1          ***     +DATA1/ORA12RF_STB/DATAFILE/tuner_data1.292.1220465275
3    5048     SYSAUX               ***     +DATA1/ORA12RF_STB/DATAFILE/sysaux.273.1220465275
4    2490     UNDOTBS1             ***     +DATA1/ORA12RF_STB/DATAFILE/undotbs1.280.1220465275
5    100      UNDOTBS2             ***     +DATA1/ORA12RF_STB/DATAFILE/undotbs2.278.1220465275
7    28       USERS                ***     +DATA1/ORA12RF_STB/DATAFILE/users.277.1220465275
8    10769    TUNER_IDX1           ***     +DATA1/ORA12RF_STB/DATAFILE/tuner_idx1.267.1220465275

List of Temporary Files
=======================
File Size(MB) Tablespace           Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
2    128      TUNER_TEMP           32767       +DATA1
3    2048     TEMP                 8192        +DATA1


9-4. recover database

 

--아카이브 백업본 인식(복구에 사용된 Standby 컨트롤 파일을 백업 받은 이후 시점에 백업 받은 아카이브 로그 백업본을 인식 시켜주는 것임)
RMAN> catalog start with '/home/oracle/BACKUP_FOR_ADG/ORA12RF_ARCHIVE_20251221_644bthlq_s196_p1';

searching for all files that match the pattern /home/oracle/BACKUP_FOR_ADG/ORA12RF_ARCHIVE_20251221_644bthlq_s196_p1

List of Files Unknown to the Database
=====================================
File Name: /home/oracle/BACKUP_FOR_ADG/ORA12RF_ARCHIVE_20251221_644bthlq_s196_p1

Do you really want to catalog the above files (enter YES or NO)? YES
cataloging files...
cataloging done

List of Cataloged Files
=======================
File Name: /home/oracle/BACKUP_FOR_ADG/ORA12RF_ARCHIVE_20251221_644bthlq_s196_p1

 

--아카이브 백업본 확인
RMAN> LIST BACKUP OF ARCHIVELOG ALL;


List of Backup Sets
===================


BS Key  Size       Device Type Elapsed Time Completion Time
------- ---------- ----------- ------------ -------------------
181     2.04G      DISK        00:00:03     2025-12-21 16:21:15
        BP Key: 181   Status: AVAILABLE  Compressed: NO  Tag: TAG20251221T162112
        Piece Name: /home/oracle/BACKUP_FOR_ADG/ORA12RF_ARCHIVE_20251221_5u4btebo_s190_p1

  List of Archived Logs in backup set 181
  Thrd Seq     Low SCN    Low Time            Next SCN   Next Time
  ---- ------- ---------- ------------------- ---------- ---------
  1    18      13043984   2025-12-19 14:50:20 13224141   2025-12-19 22:48:55
  1    19      13224141   2025-12-19 22:48:55 13224806   2025-12-19 22:49:02
  1    20      13224806   2025-12-19 22:49:02 13381060   2025-12-20 10:04:03
  1    21      13381060   2025-12-20 10:04:03 13458769   2025-12-20 15:02:22
  1    22      13458961   2025-12-20 15:03:55 13606151   2025-12-20 23:00:25
  1    23      13606151   2025-12-20 23:00:25 13607814   2025-12-20 23:04:21
  1    24      13607814   2025-12-20 23:04:21 13670777   2025-12-21 02:20:03
  1    25      13670777   2025-12-21 02:20:03 13806243   2025-12-21 10:30:01
  1    26      13806243   2025-12-21 10:30:01 13900438   2025-12-21 16:14:51
  1    27      13900438   2025-12-21 16:14:51 13902289   2025-12-21 16:21:11
  2    15      13069967   2025-12-19 16:00:03 13257264   2025-12-20 00:06:14
  2    16      13257264   2025-12-20 00:06:14 13381059   2025-12-20 10:04:04
  2    17      13381059   2025-12-20 10:04:04 13381223   2025-12-20 10:04:04
  2    18      13419384   2025-12-20 13:11:16 13579249   2025-12-20 21:20:16
  2    19      13579249   2025-12-20 21:20:16 13670792   2025-12-21 02:20:04
  2    20      13670792   2025-12-21 02:20:04 13806248   2025-12-21 10:30:03
  2    21      13806248   2025-12-21 10:30:03 13900433   2025-12-21 16:14:51
  2    22      13900433   2025-12-21 16:14:51 13902296   2025-12-21 16:21:12

BS Key  Size       Device Type Elapsed Time Completion Time
------- ---------- ----------- ------------ -------------------
186     36.96M     DISK        00:00:00     2025-12-21 17:17:46
        BP Key: 186   Status: AVAILABLE  Compressed: NO  Tag: TAG20251221T171746
        Piece Name: /home/oracle/BACKUP_FOR_ADG/ORA12RF_ARCHIVE_20251221_644bthlq_s196_p1

  List of Archived Logs in backup set 186
  Thrd Seq     Low SCN    Low Time            Next SCN   Next Time
  ---- ------- ---------- ------------------- ---------- ---------
  1    28      13902289   2025-12-21 16:21:11 13917254   2025-12-21 17:12:55
  1    29      13917254   2025-12-21 17:12:55 13918143   2025-12-21 17:17:43
  2    23      13902296   2025-12-21 16:21:12 13917251   2025-12-21 17:12:55
  2    24      13917251   2025-12-21 17:12:55 13918154   2025-12-21 17:17:46
--> 인식이 완료됨

-- 이상태에서 아카이브로 로그로 갈수있는 가장 큰 scn까지 복구함
RMAN> RECOVER DATABASE UNTIL SCN 13918143;

Starting recover at 2025-12-21 18:24:20
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=550 device type=DISK

starting media recovery

channel ORA_DISK_1: starting archived log restore to default destination
channel ORA_DISK_1: restoring archived log
archived log thread=2 sequence=24
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=29
channel ORA_DISK_1: reading from backup piece /home/oracle/BACKUP_FOR_ADG/ORA12RF_ARCHIVE_20251221_644bthlq_s196_p1
channel ORA_DISK_1: piece handle=/home/oracle/BACKUP_FOR_ADG/ORA12RF_ARCHIVE_20251221_644bthlq_s196_p1 tag=TAG20251221T171746
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
archived log file name=+FRA1/ORA12RF_STB/ARCHIVELOG/2025_12_21/thread_1_seq_29.552.1220466261 thread=1 sequence=29
archived log file name=+FRA1/ORA12RF_STB/ARCHIVELOG/2025_12_21/thread_2_seq_24.551.1220466261 thread=2 sequence=24
media recovery complete, elapsed time: 00:00:01
Finished recover at 2025-12-21 18:24:22
 
[ol7ora12sf]<SYS@ORA12RF>$

SET LINESIZE 220 PAGESIZE 1000 TRIMSPOOL ON
SET NUMFORMAT 999,999,999,990

COL FILE#               FOR 99990
COL TS#                 FOR 99990
COL NAME                FOR A60
COL SIZE_MB             FOR 999,999,990.00
COL STATUS              FOR A10
COL CHECKPOINT_CHANGE#  FOR 999,999,999,999,999

SELECT A.FILE#
     , A.TS#
     , A.NAME
     , A.BYTES/1024/1024 AS SIZE_MB
     , A.STATUS
     , A.CHECKPOINT_CHANGE#
  FROM V$DATAFILE_HEADER A;

 FILE#    TS# NAME                                                                 SIZE_MB STATUS       CHECKPOINT_CHANGE#
------ ------ ------------------------------------------------------------ --------------- ---------- --------------------
     1      0 +DATA1/ORA12RF_STB/DATAFILE/system.279.1220465275                     840.69 ONLINE               13,918,143
     2      6 +DATA1/ORA12RF_STB/DATAFILE/tuner_data1.292.1220465275             16,772.00 ONLINE               13,918,143
     3      1 +DATA1/ORA12RF_STB/DATAFILE/sysaux.273.1220465275                   5,048.00 ONLINE               13,918,143
     4      2 +DATA1/ORA12RF_STB/DATAFILE/undotbs1.280.1220465275                 2,490.00 ONLINE               13,918,143
     5      5 +DATA1/ORA12RF_STB/DATAFILE/undotbs2.278.1220465275                   100.00 ONLINE               13,918,143
     7      4 +DATA1/ORA12RF_STB/DATAFILE/users.277.1220465275                       28.75 ONLINE               13,918,143
     8      7 +DATA1/ORA12RF_STB/DATAFILE/tuner_idx1.267.1220465275              10,769.00 ONLINE               13,918,143
--> 아카이브 적용이 가능한 최대 위치까지 왔음

7 rows selected.

Elapsed: 00:00:00.02

 

9-5. Primary DB 에서 리두 로그 상태 확인 후 Standby DB에서 redo log 및 standby redo log 초기화

 

--Primary DB (oracle os user)
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ alias cdos
alias cdos='cd /home/oracle/oracle_scripts'
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ cdos
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle/oracle_scripts]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle/oracle_scripts]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Sun Nov 30 22:23:30 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

[ol7ora12rf1]<SYS@ORA12RF1>$ @rdl

GROUP# THREAD#  SEQUENCE# MEMBER                                             STATUS          TYPE                 MB STATUS
------ ------- ---------- -------------------------------------------------- --------------- ---------- ------------ ---------------
     1       1         46 +FRA1/ORA12RF/ONLINELOG/group_1.259.1213483395     (NULL)          ONLINE              200 INACTIVE
     1       1         46 +DATA1/ORA12RF/ONLINELOG/group_1.262.1213483395    (NULL)          ONLINE              200 INACTIVE
     2       1         47 +DATA1/ORA12RF/ONLINELOG/group_2.263.1213483395    (NULL)          ONLINE              200 CURRENT
     2       1         47 +FRA1/ORA12RF/ONLINELOG/group_2.257.1213483395     (NULL)          ONLINE              200 CURRENT
     3       1         45 +FRA1/ORA12RF/ONLINELOG/group_3.258.1213483395     (NULL)          ONLINE              200 INACTIVE
     3       1         45 +DATA1/ORA12RF/ONLINELOG/group_3.264.1213483395    (NULL)          ONLINE              200 INACTIVE
     4       2         46 +DATA1/ORA12RF/ONLINELOG/group_4.267.1213483489    (NULL)          ONLINE              200 CURRENT
     4       2         46 +FRA1/ORA12RF/ONLINELOG/group_4.260.1213483491     (NULL)          ONLINE              200 CURRENT
     5       2         44 +DATA1/ORA12RF/ONLINELOG/group_5.268.1213483491    (NULL)          ONLINE              200 INACTIVE
     5       2         44 +FRA1/ORA12RF/ONLINELOG/group_5.261.1213483491     (NULL)          ONLINE              200 INACTIVE
     6       2         45 +DATA1/ORA12RF/ONLINELOG/group_6.269.1213483491    (NULL)          ONLINE              200 INACTIVE
     6       2         45 +FRA1/ORA12RF/ONLINELOG/group_6.262.1213483491     (NULL)          ONLINE              200 INACTIVE

12 rows selected.

Elapsed: 00:00:00.04

 

[ol7ora12rf1]<SYS@ORA12RF1>$ @stb_rdl

DUMMY GROUP# THREAD# SEQUENCE# ARCHIVED STATUS       LOG_STATUS            TYPE       MEMBER
----- ------ ------- --------- -------- ------------ --------------------- ---------- --------------------------------------------------
    1      7       1         0 YES      UNASSIGNED   (NULL)                STANDBY    +DATA1/ORA12RF/ONLINELOG/group_7.277.1219263267
    1      7       1         0 YES      UNASSIGNED   (NULL)                STANDBY    +FRA1/ORA12RF/ONLINELOG/group_7.337.1219263267
    1      8       1         0 YES      UNASSIGNED   (NULL)                STANDBY    +DATA1/ORA12RF/ONLINELOG/group_8.270.1219263267
    1      8       1         0 YES      UNASSIGNED   (NULL)                STANDBY    +FRA1/ORA12RF/ONLINELOG/group_8.339.1219263267
    1      9       1         0 YES      UNASSIGNED   (NULL)                STANDBY    +DATA1/ORA12RF/ONLINELOG/group_9.265.1219263267
    1      9       1         0 YES      UNASSIGNED   (NULL)                STANDBY    +FRA1/ORA12RF/ONLINELOG/group_9.340.1219263267
    1     10       1         0 YES      UNASSIGNED   (NULL)                STANDBY    +DATA1/ORA12RF/ONLINELOG/group_10.278.1219263267
    1     10       1         0 YES      UNASSIGNED   (NULL)                STANDBY    +FRA1/ORA12RF/ONLINELOG/group_10.341.1219263269
    1     11       2         0 YES      UNASSIGNED   (NULL)                STANDBY    +DATA1/ORA12RF/ONLINELOG/group_11.279.1219263269
    1     11       2         0 YES      UNASSIGNED   (NULL)                STANDBY    +FRA1/ORA12RF/ONLINELOG/group_11.342.1219263269
    1     12       2         0 YES      UNASSIGNED   (NULL)                STANDBY    +DATA1/ORA12RF/ONLINELOG/group_12.280.1219263269
    1     12       2         0 YES      UNASSIGNED   (NULL)                STANDBY    +FRA1/ORA12RF/ONLINELOG/group_12.343.1219263269
    1     13       2         0 YES      UNASSIGNED   (NULL)                STANDBY    +DATA1/ORA12RF/ONLINELOG/group_13.281.1219263269
    1     13       2         0 YES      UNASSIGNED   (NULL)                STANDBY    +FRA1/ORA12RF/ONLINELOG/group_13.329.1219263269
    1     14       2         0 YES      UNASSIGNED   (NULL)                STANDBY    +DATA1/ORA12RF/ONLINELOG/group_14.282.1219263271
    1     14       2         0 YES      UNASSIGNED   (NULL)                STANDBY    +FRA1/ORA12RF/ONLINELOG/group_14.322.1219263285

16 rows selected.

Elapsed: 00:00:00.02


--Standby DB (oracle os user)
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ alias cdos
alias cdos='cd /home/oracle/oracle_scripts'
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ cat /home/oracle/oracle_scripts/rdl.sql

col group# for 999
col thread# for 999
col member for a70

SELECT A.GROUP#
     , B.THREAD#
     , B.SEQUENCE#
     , A.MEMBER
     , A.STATUS
     , A.TYPE
     , B.BYTES/1024/1024 AS MB
     , B.STATUS
  FROM V$LOGFILE A
     , V$LOG B
 WHERE A.GROUP# = B.GROUP#
 ORDER BY 1
;

 

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ cat >> /home/oracle/oracle_scripts/stb_rdl.sql << 'EOF'
COLUMN DUMMY FORMAT 999
COLUMN GROUP# FORMAT 9999
COLUMN THREAD# FORMAT 9999
COLUMN SEQUENCE# FORMAT 9999999
COLUMN ARCHIVED FORMAT A8
COLUMN STATUS FORMAT A12
COLUMN MEMBER FORMAT A60 WORD_WRAPPED
SELECT 1 AS DUMMY,
       a.GROUP#,
       a.THREAD#,
       a.SEQUENCE#,
       a.ARCHIVED,
       a.STATUS,
       b.STATUS AS LOG_STATUS,
       b.TYPE,
       b.MEMBER
  FROM V$STANDBY_LOG a, v$logfile b
 WHERE a.group# = b.group#
 ORDER BY a.GROUP#;

EOF

 

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ chmod 775 /home/oracle/oracle_scripts/stb_rdl.sql


[ORA12RF:oracle@ol7ora12sf][/home/oracle/oracle_scripts]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Sat Dec 13 12:40:55 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

[ol7ora12sf]<SYS@ORA12RF>$ @rdl

GROUP# THREAD#  SEQUENCE# MEMBER                                                                 STATUS                TYPE                          MB STATUS
------ ------- ---------- ---------------------------------------------------------------------- --------------------- --------------------- ---------- -----------
     1       1         29 +FRA1/MUST_RENAME_THIS_LOGFILE_1.4294967295.4294967295                 (NULL)                ONLINE                       200 CURRENT
     1       1         29 +DATA1/MUST_RENAME_THIS_LOGFILE_1.4294967295.4294967295                (NULL)                ONLINE                       200 CURRENT
     2       1         27 +DATA1/MUST_RENAME_THIS_LOGFILE_2.4294967295.4294967295                (NULL)                ONLINE                       200 INACTIVE
     2       1         27 +FRA1/MUST_RENAME_THIS_LOGFILE_2.4294967295.4294967295                 (NULL)                ONLINE                       200 INACTIVE
     3       1         28 +FRA1/MUST_RENAME_THIS_LOGFILE_3.4294967295.4294967295                 (NULL)                ONLINE                       200 INACTIVE
     3       1         28 +DATA1/MUST_RENAME_THIS_LOGFILE_3.4294967295.4294967295                (NULL)                ONLINE                       200 INACTIVE
     4       2         23 +DATA1/MUST_RENAME_THIS_LOGFILE_4.4294967295.4294967295                (NULL)                ONLINE                       200 INACTIVE
     4       2         23 +FRA1/MUST_RENAME_THIS_LOGFILE_4.4294967295.4294967295                 (NULL)                ONLINE                       200 INACTIVE
     5       2         24 +DATA1/MUST_RENAME_THIS_LOGFILE_5.4294967295.4294967295                (NULL)                ONLINE                       200 CURRENT
     5       2         24 +FRA1/MUST_RENAME_THIS_LOGFILE_5.4294967295.4294967295                 (NULL)                ONLINE                       200 CURRENT
     6       2         22 +DATA1/MUST_RENAME_THIS_LOGFILE_6.4294967295.4294967295                (NULL)                ONLINE                       200 INACTIVE
     6       2         22 +FRA1/MUST_RENAME_THIS_LOGFILE_6.4294967295.4294967295                 (NULL)                ONLINE                       200 INACTIVE

12 rows selected.

Elapsed: 00:00:00.01

 

[ol7ora12sf]<SYS@ORA12RF>$ @stb_rdl

DUMMY GROUP# THREAD# SEQUENCE# ARCHIVED STATUS       LOG_STATUS            TYPE                  MEMBER
----- ------ ------- --------- -------- ------------ --------------------- --------------------- ---------------------------------------------------------
    1      7       1         0 YES      UNASSIGNED   (NULL)                STANDBY               +DATA1/MUST_RENAME_THIS_LOGFILE_7.4294967295.4294967295
    1      7       1         0 YES      UNASSIGNED   (NULL)                STANDBY               +FRA1/MUST_RENAME_THIS_LOGFILE_7.4294967295.4294967295
    1      8       1         0 YES      UNASSIGNED   (NULL)                STANDBY               +DATA1/MUST_RENAME_THIS_LOGFILE_8.4294967295.4294967295
    1      8       1         0 YES      UNASSIGNED   (NULL)                STANDBY               +FRA1/MUST_RENAME_THIS_LOGFILE_8.4294967295.4294967295
    1      9       1         0 YES      UNASSIGNED   (NULL)                STANDBY               +DATA1/MUST_RENAME_THIS_LOGFILE_9.4294967295.4294967295
    1      9       1         0 YES      UNASSIGNED   (NULL)                STANDBY               +FRA1/MUST_RENAME_THIS_LOGFILE_9.4294967295.4294967295
    1     10       1         0 YES      UNASSIGNED   (NULL)                STANDBY               +DATA1/MUST_RENAME_THIS_LOGFILE_10.4294967295.4294967295
    1     10       1         0 YES      UNASSIGNED   (NULL)                STANDBY               +FRA1/MUST_RENAME_THIS_LOGFILE_10.4294967295.4294967295
    1     11       2         0 YES      UNASSIGNED   (NULL)                STANDBY               +DATA1/MUST_RENAME_THIS_LOGFILE_11.4294967295.4294967295
    1     11       2         0 YES      UNASSIGNED   (NULL)                STANDBY               +FRA1/MUST_RENAME_THIS_LOGFILE_11.4294967295.4294967295
    1     12       2         0 YES      UNASSIGNED   (NULL)                STANDBY               +DATA1/MUST_RENAME_THIS_LOGFILE_12.4294967295.4294967295
    1     12       2         0 YES      UNASSIGNED   (NULL)                STANDBY               +FRA1/MUST_RENAME_THIS_LOGFILE_12.4294967295.4294967295
    1     13       2         0 YES      UNASSIGNED   (NULL)                STANDBY               +DATA1/MUST_RENAME_THIS_LOGFILE_13.4294967295.4294967295
    1     13       2         0 YES      UNASSIGNED   (NULL)                STANDBY               +FRA1/MUST_RENAME_THIS_LOGFILE_13.4294967295.4294967295
    1     14       2         0 YES      UNASSIGNED   (NULL)                STANDBY               +DATA1/MUST_RENAME_THIS_LOGFILE_14.4294967295.4294967295
    1     14       2         0 YES      UNASSIGNED   (NULL)                STANDBY               +FRA1/MUST_RENAME_THIS_LOGFILE_14.4294967295.4294967295

16 rows selected.

Elapsed: 00:00:00.01

 

[ol7ora12sf]<SYS@ORA12RF>$
SET LINESIZE 200 PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF

SELECT 'ALTER DATABASE CLEAR LOGFILE GROUP ' || GROUP# || ';'
FROM V$LOGFILE
GROUP BY GROUP#
ORDER BY GROUP#;

ALTER DATABASE CLEAR LOGFILE GROUP 1;
ALTER DATABASE CLEAR LOGFILE GROUP 2;
ALTER DATABASE CLEAR LOGFILE GROUP 3;
ALTER DATABASE CLEAR LOGFILE GROUP 4;
ALTER DATABASE CLEAR LOGFILE GROUP 5;
ALTER DATABASE CLEAR LOGFILE GROUP 6;
ALTER DATABASE CLEAR LOGFILE GROUP 7;
ALTER DATABASE CLEAR LOGFILE GROUP 8;
ALTER DATABASE CLEAR LOGFILE GROUP 9;
ALTER DATABASE CLEAR LOGFILE GROUP 10;
ALTER DATABASE CLEAR LOGFILE GROUP 11;
ALTER DATABASE CLEAR LOGFILE GROUP 12;
ALTER DATABASE CLEAR LOGFILE GROUP 13;
ALTER DATABASE CLEAR LOGFILE GROUP 14;
Elapsed: 00:00:00.00

--redo log 및 stadnby redo log 파일 초기화
[ol7ora12sf]<SYS@ORA12RF>$
ALTER DATABASE CLEAR LOGFILE GROUP 1;
ALTER DATABASE CLEAR LOGFILE GROUP 2;
ALTER DATABASE CLEAR LOGFILE GROUP 3;
ALTER DATABASE CLEAR LOGFILE GROUP 4;
ALTER DATABASE CLEAR LOGFILE GROUP 5;
ALTER DATABASE CLEAR LOGFILE GROUP 6;
ALTER DATABASE CLEAR LOGFILE GROUP 7;
ALTER DATABASE CLEAR LOGFILE GROUP 8;
ALTER DATABASE CLEAR LOGFILE GROUP 9;
ALTER DATABASE CLEAR LOGFILE GROUP 10;
ALTER DATABASE CLEAR LOGFILE GROUP 11;
ALTER DATABASE CLEAR LOGFILE GROUP 12;
ALTER DATABASE CLEAR LOGFILE GROUP 13;
ALTER DATABASE CLEAR LOGFILE GROUP 14;

 

[ol7ora12sf]<SYS@ORA12RF>$ @rdl
     1       1         0 +FRA1/ORA12RF_STB/ONLINELOG/group_1.553.1220466901                     (NULL)       ONLINE                       200 CURRENT
     1       1         0 +DATA1/ORA12RF_STB/ONLINELOG/group_1.276.1220466901                    (NULL)       ONLINE                       200 CURRENT
     2       1         0 +DATA1/ORA12RF_STB/ONLINELOG/group_2.275.1220466901                    (NULL)       ONLINE                       200 UNUSED
     2       1         0 +FRA1/ORA12RF_STB/ONLINELOG/group_2.554.1220466903                     (NULL)       ONLINE                       200 UNUSED
     3       1         0 +FRA1/ORA12RF_STB/ONLINELOG/group_3.555.1220466903                     (NULL)       ONLINE                       200 UNUSED
     3       1         0 +DATA1/ORA12RF_STB/ONLINELOG/group_3.274.1220466903                    (NULL)       ONLINE                       200 UNUSED
     4       2         0 +DATA1/ORA12RF_STB/ONLINELOG/group_4.281.1220466903                    (NULL)       ONLINE                       200 UNUSED
     4       2         0 +FRA1/ORA12RF_STB/ONLINELOG/group_4.556.1220466903                     (NULL)       ONLINE                       200 UNUSED
     5       2         0 +DATA1/ORA12RF_STB/ONLINELOG/group_5.282.1220466903                    (NULL)       ONLINE                       200 CURRENT
     5       2         0 +FRA1/ORA12RF_STB/ONLINELOG/group_5.584.1220466903                     (NULL)       ONLINE                       200 CURRENT
     6       2         0 +DATA1/ORA12RF_STB/ONLINELOG/group_6.301.1220466905                    (NULL)       ONLINE                       200 UNUSED
     6       2         0 +FRA1/ORA12RF_STB/ONLINELOG/group_6.583.1220466905                     (NULL)       ONLINE                       200 UNUSED
Elapsed: 00:00:00.00


[ol7ora12sf]<SYS@ORA12RF>$ @stb_rdl
    1      7       1         0 YES      UNASSIGNED   (NULL)                STANDBY               +DATA1/ORA12RF_STB/ONLINELOG/group_7.285.1220466905
    1      7       1         0 YES      UNASSIGNED   (NULL)                STANDBY               +FRA1/ORA12RF_STB/ONLINELOG/group_7.582.1220466905
    1      8       1         0 YES      UNASSIGNED   (NULL)                STANDBY               +DATA1/ORA12RF_STB/ONLINELOG/group_8.286.1220466905
    1      8       1         0 YES      UNASSIGNED   (NULL)                STANDBY               +FRA1/ORA12RF_STB/ONLINELOG/group_8.580.1220466905
    1      9       1         0 YES      UNASSIGNED   (NULL)                STANDBY               +DATA1/ORA12RF_STB/ONLINELOG/group_9.287.1220466905
    1      9       1         0 YES      UNASSIGNED   (NULL)                STANDBY               +FRA1/ORA12RF_STB/ONLINELOG/group_9.579.1220466905
    1     10       1         0 YES      UNASSIGNED   (NULL)                STANDBY               +DATA1/ORA12RF_STB/ONLINELOG/group_10.288.1220466907
    1     10       1         0 YES      UNASSIGNED   (NULL)                STANDBY               +FRA1/ORA12RF_STB/ONLINELOG/group_10.565.1220466907
    1     11       2         0 YES      UNASSIGNED   (NULL)                STANDBY               +DATA1/ORA12RF_STB/ONLINELOG/group_11.289.1220466907
    1     11       2         0 YES      UNASSIGNED   (NULL)                STANDBY               +FRA1/ORA12RF_STB/ONLINELOG/group_11.564.1220466907
    1     12       2         0 YES      UNASSIGNED   (NULL)                STANDBY               +DATA1/ORA12RF_STB/ONLINELOG/group_12.290.1220466907
    1     12       2         0 YES      UNASSIGNED   (NULL)                STANDBY               +FRA1/ORA12RF_STB/ONLINELOG/group_12.563.1220466907
    1     13       2         0 YES      UNASSIGNED   (NULL)                STANDBY               +DATA1/ORA12RF_STB/ONLINELOG/group_13.295.1220466907
    1     13       2         0 YES      UNASSIGNED   (NULL)                STANDBY               +FRA1/ORA12RF_STB/ONLINELOG/group_13.549.1220466907
    1     14       2         0 YES      UNASSIGNED   (NULL)                STANDBY               +DATA1/ORA12RF_STB/ONLINELOG/group_14.296.1220466909
    1     14       2         0 YES      UNASSIGNED   (NULL)                STANDBY               +FRA1/ORA12RF_STB/ONLINELOG/group_14.550.1220466909
Elapsed: 00:00:00.00


10. Standby DB 를 HAS에 등록

 

10-1. password 파일을 ASM 영역에 복사

 

--oracle os user
접속할 데이터베이스(DB_NAME)를 선택하세요:
1) ORA12SF
2) ORA12RF
3) RESERVED
번호를 입력하세요 (1,2,3): 2
현재 ORACLE_SID: ORA12RF
ORA12RF 환경 설정 적용 중...
환경 설정 완료 : 현재 ORACLE_SID = ORA12RF

 

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ cp /home/oracle/BACKUP_FOR_ADG/orapwORA12RF /tmp
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ chmod 664 /tmp/orapwORA12RF
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ ls -l /tmp/orapwORA12RF
-rw-rw-r--. 1 oracle oinstall 3584 Dec 21 18:38 /tmp/orapwORA12RF


--grid os user
[+ASM:grid@ol7ora12sf][/home/grid]$ asmcmd pwcopy --dbuniquename ORA12RF_STB -f /tmp/orapwORA12RF +DATA1/ORA12RF_STB/PASSWORD/orapwORA12RF
PRCD-1120 : The resource for database ORA12RF_STB could not be found.
PRCR-1001 : Resource ora.ora12rf_stb.db does not exist
ASMCMD-9457: an internally issued srvctl command failed with errors
copying /tmp/orapwORA12RF -> +DATA1/ORA12RF_STB/PASSWORD/orapwORA12RF
ASMCMD-9453: failed to register password file as a CRS resource

[+ASM:grid@ol7ora12sf][/home/grid]$ asmcmd ls -sl +DATA1/ORA12RF_STB/PASSWORD/orapwORA12RF
Type      Redund  Striped  Time             Sys  Block_Size  Blocks  Bytes  Space  Name
PASSWORD  UNPROT  COARSE   DEC 21 18:00:00  N           512       7   3584      0  orapwORA12RF => +DATA1/ORA12RF_STB/PASSWORD/pwdora12rf_stb.297.1220467105


10-2. pfile을 spfile로 변환하여 ASM 영역에 넣기

 

--oracle os user
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'

 

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Sun Dec 21 18:39:00 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

[ol7ora12sf]<SYS@ORA12RF>$ col name for a60
[ol7ora12sf]<
SYS@ORA12RF>$ select name from v$controlfile;

NAME
------------------------------------------------------------
+DATA1/ORA12RF_STB/CONTROLFILE/current.291.1220465119
+FRA1/ORA12RF_STB/CONTROLFILE/current.441.1220465119

2 rows selected.

Elapsed: 00:00:00.00

 

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ cat /home/oracle/BACKUP_FOR_ADG/initORA12RF.ora | grep -i control_files
*.control_files='+DATA1/ORA12RF_STB/CONTROLFILE/current.291.1220465119','+FRA1/ORA12RF_STB/CONTROLFILE/current.441.1220465119' ##Modify
#*.control_files='+DATA1/ORA12RF_STB/CONTROLFILE/current.261.1213483391','+FRA1/ORA12RF_STB/CONTROLFILE/current.256.1213483391' ##Modify
--> 현재 mount 상태로 떠있는 Standby DB의 컨트롤 파일 경로와 pfile의 control_files 파라미터의 경로가 일치함을 확인

 

--oracle os user
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ echo $ORACLE_SID
ORA12RF
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Fri Dec 12 22:58:54 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

[ol7ora12sf]<SYS@ORA12RF>$ create spfile='+DATA1' from pfile='/home/oracle/BACKUP_FOR_ADG/initORA12RF.ora';

File created.

Elapsed: 00:00:00.11

 

--grid os user
[+ASM:grid@ol7ora12sf][/home/grid]$ asmcmd ls -sl +DATA1/ORA12RF_STB/PARAMETERFILE
Type           Redund  Striped  Time             Sys  Block_Size  Blocks  Bytes    Space  Name
PARAMETERFILE  UNPROT  COARSE   DEC 21 18:00:00  Y           512       9   4608  4194304  spfile.298.1220467273
[+ASM:grid@ol7ora12sf][/home/grid]$

 

10-3. Standby DB를 HAS에 등록

 

--oracle os user
--pwfile 과 spfile 위치를 잘 지정해줌
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$
srvctl add database \
-db ORA12RF_STB \
-dbname ORA12RF \
-oraclehome /u01/app/oracle/product/12c/db_1 \
-pwfile '+DATA1/ORA12RF_STB/PASSWORD/pwdora12rf_stb.297.1220467105' \
-spfile '+DATA1/ORA12RF_STB/PARAMETERFILE/spfile.298.1220467273' \
-role PHYSICAL_STANDBY \
-startoption "READ ONLY" \
-instance ORA12RF

 

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ crsctl stat res ora.ora12rf_stb.db  -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.ora12rf_stb.db
      1        OFFLINE OFFLINE                               STABLE
--------------------------------------------------------------------------------


10-4. Standby DB를 mount 모드로 기동

 

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ echo $ORACLE_SID
ORA12RF

 

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Mon Dec 1 00:02:11 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

 

[ol7ora12sf]<SYS@ORA12RF>$ shutdown immediate;
ORA-01109: database not open


Database dismounted.
ORACLE instance shut down.

 

[ol7ora12sf]<SYS@ORA12RF>$ startup mount
ORACLE instance started.

Total System Global Area 5033164800 bytes
Fixed Size                  8631048 bytes
Variable Size            1409289464 bytes
Database Buffers         3607101440 bytes
Redo Buffers                8142848 bytes
Database mounted.

 

--Primary DB의 플래시백이 켜져있었다고 해도 Standby까지 자동으로 켜지는것은 아님
[ol7ora12sf]<SYS@ORA12RF>$ select inst_id, flashback_on from gv$database;

   INST_ID FLASHBACK_ON
---------- ------------------------------------------------------
         1 NO
--> 플래시백 데이터베이스 안켜져있음을 확인

1 row selected.

Elapsed: 00:00:00.01

[ol7ora12sf]<SYS@ORA12RF>$ show parameter flashback;

NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- -------
db_flashback_retention_target        integer                           2880

 

[ol7ora12sf]<SYS@ORA12RF>$ show parameter recovery;

NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- -------
db_recovery_file_dest                string                            +FRA1
db_recovery_file_dest_size           big integer                       32G
recovery_parallelism                 integer                           0
remote_recovery_file_dest            string                            (NULL)


[ol7ora12sf]<SYS@ORA12RF>$ ALTER DATABASE FLASHBACK ON;

Database altered.

Elapsed: 00:00:00.22

 

[ol7ora12sf]<SYS@ORA12RF>$ select inst_id, flashback_on from gv$database;

   INST_ID FLASHBACK_ON
---------- ------------------------------------------------------
         1 YES

1 row selected.

Elapsed: 00:00:00.01

 

--HAS에 TNS_ADMIN 환경 변수 등록

접속할 데이터베이스(DB_NAME)를 선택하세요:
1) ORA12SF
2) ORA12RF
3) RESERVED
번호를 입력하세요 (1,2,3): 2
현재 ORACLE_SID: ORA12RF
ORA12RF 환경 설정 적용 중...
환경 설정 완료 : 현재 ORACLE_SID = ORA12RF
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ srvctl setenv database -d ORA12RF_STB -t "TNS_ADMIN=/u01/app/oracle/product/12c/db_1/network/admin"
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ srvctl getenv database -d ORA12RF_STB
ORA12RF_STB:
TNS_ADMIN=/u01/app/oracle/product/12c/db_1/network/admin

 


11. DG Broker 활성화

 

11-1. 소스 및 타켓에서 DG Broker 파라미터 설정

 

11-1-1. Primary DB

 

--grid os user
--ADG 용 디렉토리 생성
[+ASM1:grid@ol7ora12rf1][/home/grid]$ asmcmd mkdir +DATA1/ADG
[+ASM1:grid@ol7ora12rf1][/home/grid]$ asmcmd ls -sl +DATA1/ | grep ADG
                                        N                                      ADG/

--> 디렉토리 생성 확인 완료

 

--oracle os user
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Tue Dec 2 23:48:42 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production


[ol7ora12rf1]<SYS@ORA12RF1>$ show parameter dg_broker_config_file;

NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
dg_broker_config_file1               string                            /u01/app/oracle/product/12c/db
                                                                       _1/dbs/dr1ORA12RF.dat
dg_broker_config_file2               string                            /u01/app/oracle/product/12c/db
                                                                       _1/dbs/dr2ORA12RF.dat
dg_broker_start                      boolean                           FALSE

 

[ol7ora12rf1]<SYS@ORA12RF1>$ alter system set dg_broker_config_file1='+DATA1/ADG/dr1ORA12RF.dat' scope=both sid='*';

System altered.

Elapsed: 00:00:00.03

[ol7ora12rf1]<SYS@ORA12RF1>$ alter system set dg_broker_config_file2='+DATA1/ADG/dr2ORA12RF.dat' scope=both sid='*';

System altered.

Elapsed: 00:00:00.01

 

[ol7ora12rf1]<SYS@ORA12RF1>$ show parameter dg_broker_start

NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
dg_broker_start                      boolean                           FALSE


[ol7ora12rf1]<SYS@ORA12RF1>$ alter system set dg_broker_start=true scope=both sid='*';

System altered.

Elapsed: 00:00:02.04

[ol7ora12rf1]<SYS@ORA12RF1>$ show parameter dg_broker

NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
dg_broker_config_file1               string                            +DATA1/ADG/dr1ORA12RF.dat
dg_broker_config_file2               string                            +DATA1/ADG/dr2ORA12RF.dat
dg_broker_start                      boolean                           TRUE


11-1-2. Standby DB

 

--grid os user
--ADG 용 디렉토리 생성
[+ASM:grid@ol7ora12sf][/home/grid]$ asmcmd mkdir +DATA1/ADG
[+ASM:grid@ol7ora12sf][/home/grid]$ asmcmd ls -sl +DATA1/ | grep ADG
                                            N                                      ADG/

--> 디렉토리 생성 완료

 

접속할 데이터베이스(DB_NAME)를 선택하세요:
1) ORA12SF
2) ORA12RF
3) RESERVED
번호를 입력하세요 (1,2,3): 2
현재 ORACLE_SID: ORA12RF
ORA12RF 환경 설정 적용 중...
환경 설정 완료 : 현재 ORACLE_SID = ORA12RF

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Tue Dec 2 23:37:02 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

[ol7ora12sf]<SYS@ORA12RF>$ show parameter dg_broker_config_file

NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
dg_broker_config_file1               string                            /u01/app/oracle/product/12c/db
                                                                       _1/dbs/dr1ORA12RF_STB.dat
dg_broker_config_file2               string                            /u01/app/oracle/product/12c/db
                                                                       _1/dbs/dr2ORA12RF_STB.dat

 

[ol7ora12sf]<SYS@ORA12RF>$ alter system set dg_broker_config_file1='+DATA1/ADG/dr1ORA12RF_STB.dat' scope=both;

System altered.

Elapsed: 00:00:00.02
[ol7ora12sf]<
SYS@ORA12RF>$ alter system set dg_broker_config_file2='+DATA1/ADG/dr2ORA12RF_STB.dat' scope=both;

System altered.

Elapsed: 00:00:00.01

[ol7ora12sf]<SYS@ORA12RF>$ show parameter dg_broker_start;

NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
dg_broker_start                      boolean                           FALSE

 

[ol7ora12sf]<SYS@ORA12RF>$ alter system set dg_broker_start=true scope=both;

System altered.

Elapsed: 00:00:02.12


11-2. DG Broker 설정

 

--Primary DB의 1번 노드에서 작업 (oracle os user)
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'

 

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ cat >> ~oracle/.bash_profile << 'EOF'
alias dg='rlwrap dgmgrl
sys/oracle@TNS_ORA12RF'
EOF

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ source ~oracle/.bash_profile
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ dg
DGMGRL for Linux: Release 12.2.0.1.0 - Production on Sat Dec 13 10:22:53 2025

Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.

Welcome to DGMGRL, type "help" for information.
Connected to "ORA12RF"
Connected as SYSDBA.

 

--ORA12RF_DG 라는 설정을 생성하고 Primary DB를 등록함
DGMGRL> create configuration 'ORA12RF_DG' AS primary database is 'ORA12RF' connect identifier is TNS_ORA12RF;
Configuration "ORA12RF_DG" created with primary database "ORA12RF"

 

DGMGRL> SHOW CONFIGURATION

Configuration - ORA12RF_DG

  Protection Mode: MaxPerformance
  Members:
  ORA12RF - Primary database

Fast-Start Failover: DISABLED

Configuration Status:
DISABLED

DGMGRL> quit

 

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Wed Dec 3 00:05:12 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

[ol7ora12rf1]<SYS@ORA12RF1>$ show parameter LOG_ARCHIVE_DEST_2;

NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- -------
log_archive_dest_2                   string                            (NULL)
log_archive_dest_20                  string                            (NULL)
log_archive_dest_21                  string                            (NULL)
log_archive_dest_22                  string                            (NULL)
log_archive_dest_23                  string                            (NULL)
log_archive_dest_24                  string                            (NULL)
log_archive_dest_25                  string                            (NULL)
log_archive_dest_26                  string                            (NULL)
log_archive_dest_27                  string                            (NULL)
log_archive_dest_28                  string                            (NULL)
log_archive_dest_29                  string                            (NULL)
--> log_archive_dest_2 파라미터는 설정이 되어 있으면 안됨. 설정이 안되어 있는 것을 확인

[ol7ora12rf1]<SYS@ORA12RF1>$ quit

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ alias dg
alias dg='rlwrap dgmgrl sys/oracle@TNS_ORA12RF'

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ dg
DGMGRL for Linux: Release 12.2.0.1.0 - Production on Sat Dec 13 10:25:07 2025

Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.

Welcome to DGMGRL, type "help" for information.
Connected to "ORA12RF"
Connected as SYSDBA.


DGMGRL> add database ORA12RF_STB as connect identifier is TNS_ORA12RF_STB;
Database "ora12rf_stb" added

DGMGRL> show configuration

Configuration - ORA12RF_DG

  Protection Mode: MaxPerformance
  Members:
  ORA12RF     - Primary database
    ora12rf_stb - Physical standby database

Fast-Start Failover: DISABLED

Configuration Status:
DISABLED

DGMGRL> enable configuration;
Enabled.

DGMGRL> SHOW INSTANCE 'ORA12RF1' StaticConnectIdentifier;
  StaticConnectIdentifier = '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.240.14)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORA12RF_DGMGRL)(INSTANCE_NAME=ORA12RF1)(SERVER=DEDICATED)))'
DGMGRL> SHOW INSTANCE 'ORA12RF2' StaticConnectIdentifier;

  StaticConnectIdentifier = '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.240.15)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORA12RF_DGMGRL)(INSTANCE_NAME=ORA12RF2)(SERVER=DEDICATED)))'
DGMGRL> SHOW INSTANCE 'ORA12RF' StaticConnectIdentifier;
  StaticConnectIdentifier = '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.240.111)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORA12RF_STB_DGMGRL)(INSTANCE_NAME=ORA12RF)(SERVER=DEDICATED)))'


DGMGRL> show configuration

Configuration - ORA12RF_DG

  Protection Mode: MaxPerformance
  Members:
  ORA12RF     - Primary database
    ora12rf_stb - Physical standby database
      Warning: ORA-16809: multiple warnings detected for the member

Fast-Start Failover: DISABLED

Configuration Status:
WARNING   (status updated 13 seconds ago)


DGMGRL> show configuration verbose;

Configuration - ORA12RF_DG

  Protection Mode: MaxPerformance
  Members:
  ORA12RF     - Primary database
    ora12rf_stb - Physical standby database
      Warning: ORA-16809: multiple warnings detected for the member

  Properties:
    FastStartFailoverThreshold      = '30'
    OperationTimeout                = '30'
    TraceLevel                      = 'USER'
    FastStartFailoverLagLimit       = '30'
    CommunicationTimeout            = '180'
    ObserverReconnect               = '0'
    FastStartFailoverAutoReinstate  = 'TRUE'
    FastStartFailoverPmyShutdown    = 'TRUE'
    BystandersFollowRoleChange      = 'ALL'
    ObserverOverride                = 'FALSE'
    ExternalDestination1            = ''
    ExternalDestination2            = ''
    PrimaryLostWriteAction          = 'CONTINUE'
    ConfigurationWideServiceName    = 'ORA12RF_CFG'

Fast-Start Failover: DISABLED

Configuration Status:
WARNING

 

DGMGRL> show database ORA12RF_STB;

Database - ora12rf_stb

  Role:               PHYSICAL STANDBY
  Intended State:     OFFLINE
  Transport Lag:      (unknown)
  Apply Lag:          (unknown)
  Average Apply Rate: (unknown)
  Real Time Query:    OFF
  Instance(s):
    ORA12RF

Database Status:
DISABLED

DGMGRL> disable configuration;
Disabled.


--Standby DB에서 작업 (oracle os user)
[ORA12RF:oracle@ol7ora12sf][/home/oracle/BACKUP_FOR_ADG]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'

[ORA12RF:oracle@ol7ora12sf][/home/oracle/BACKUP_FOR_ADG]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Wed Dec 3 00:20:44 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

[ol7ora12sf]<SYS@ORA12RF>$ alter database open read only;

Database altered.

Elapsed: 00:00:01.64

-------------------------------------동기화 문제 발생 시 BEGIN------------------------------------------
[ol7ora12sf]<
SYS@ORA12RF>$ shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
[ol7ora12sf]<
SYS@ORA12RF>$ startup mount;


[ol7ora12sf]<SYS@ORA12RF>$
--동기화 문제 발생 시 Standby DB에서 Standby Redo Log는 별도로 생성해줘야함
ALTER DATABASE DROP LOGFILE GROUP 7;
ALTER DATABASE DROP LOGFILE GROUP 8;
ALTER DATABASE DROP LOGFILE GROUP 9;
ALTER DATABASE DROP LOGFILE GROUP 10;
ALTER DATABASE DROP LOGFILE GROUP 11;
ALTER DATABASE DROP LOGFILE GROUP 12;
ALTER DATABASE DROP LOGFILE GROUP 13;
ALTER DATABASE DROP LOGFILE GROUP 14;

ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 group  7('+DATA1','+FRA1') SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 group  8('+DATA1','+FRA1') SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 group  9('+DATA1','+FRA1') SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 group 10('+DATA1','+FRA1') SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 group 11('+DATA1','+FRA1') SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 group 12('+DATA1','+FRA1') SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 group 13('+DATA1','+FRA1') SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 group 14('+DATA1','+FRA1') SIZE 200M;

[ol7ora12sf]<SYS@ORA12RF>$ alter database open read only;

------------------------------------동기화 문제 발생 시 END-----------------------------------------------

 

--Primary DB의 DGMGRL에서 configuration 활성화
DGMGRL> enable configuration;
Enabled.

 

--Primary DB의 DGMGRL에서 ORA12RF_STB 상태 확인
DGMGRL> show database ORA12RF_STB;

Database - ora12rf_stb

  Role:               PHYSICAL STANDBY
  Intended State:     APPLY-ON
  Transport Lag:      0 seconds (computed 1 second ago)
  Apply Lag:          0 seconds (computed 1 second ago)
  Average Apply Rate: 7.11 MByte/s
  Real Time Query:    ON
  Instance(s):
    ORA12RF

Database Status:
SUCCESS

 

--Standby DB에서 DGMGRL로 접속 가능하도록 설정함
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ cat >> ~oracle/.bash_profile << EOF
alias dg='rlwrap dgmgrl
sys/oracle@TNS_ORA12RF_STB'
EOF
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ source ~oracle/.bash_profile

접속할 데이터베이스(DB_NAME)를 선택하세요:
1) ORA12SF
2) ORA12RF
3) RESERVED
번호를 입력하세요 (1,2,3): 2
현재 ORACLE_SID: ORA12RF
ORA12RF 환경 설정 적용 중...
환경 설정 완료 : 현재 ORACLE_SID = ORA12RF

 

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ dg
DGMGRL for Linux: Release 12.2.0.1.0 - Production on Sat Dec 13 13:37:53 2025

Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.

Welcome to DGMGRL, type "help" for information.
Connected to "ORA12RF_STB"
Connected as SYSDBA.


11-3. DG Broker 설정 후 파라미터 확인

 

--Primary DB (oracle os user)
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ cdos
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle/oracle_scripts]$ ls
1.USER_TABLESPACE_SYS_SYSTEM_v1_0.sql          adg_par.sql  asmf.sql  cf.sql   hpara.sql  para.sql  stb_rdl.sql  tbs.sql
2.TABLE_INDEX_MERGE_STATISTICS_TUNER_v1_1.sql  al.sql       asm.sql   fra.sql  mys.sql    rdl.sql   st_redo.sql  tsdf.sql
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle/oracle_scripts]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Wed Dec 3 22:36:55 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

[ol7ora12rf1]<SYS@ORA12RF1>$ @adg_par

NAME                                               VALUE
-------------------------------------------------- ------------------------------------------------------------------------------------------
db_file_name_convert                               (NULL)
log_file_name_convert                              (NULL)
log_archive_dest_1                                 LOCATION=+FRA1
log_archive_dest_2                                 service="tns_ora12rf_stb", ASYNC NOAFFIRM delay=0 optional compression=disable max_failure
                                                   =0 max_connections=1 reopen=300 db_unique_name="ora12rf_stb" net_timeout=30, valid_for=(on
                                                   line_logfile,all_roles)

log_archive_dest_state_1                           enable
log_archive_dest_state_2                           ENABLE
fal_client                                         (NULL)
fal_server                                         (NULL)
log_archive_config                                 dg_config=(ORA12RF,ora12rf_stb)
log_archive_format                                 %t_%s_%r.ARC
log_archive_max_processes                          4
standby_file_management                            AUTO
remote_login_passwordfile                          EXCLUSIVE
db_name                                            ORA12RF
db_unique_name                                     ORA12RF


15 rows selected.

Elapsed: 00:00:00.01

 

--Standby DB (orale os user)
[ORA12RF:oracle@ol7ora12sf][/home/oracle/oracle_scripts]$ cat > /home/oracle/oracle_scripts/adg_par.sql << 'EOF'
SET LINESIZE 300 PAGES 100
COL VALUE FOR A90
COL NAME FOR A50
SELECT NAME
     , VALUE
  FROM V$PARAMETER
 WHERE UPPER(NAME)
    IN ( UPPER(TRIM('DB_NAME'                  ))
       , UPPER(TRIM('DB_UNIQUE_NAME'           ))
       , UPPER(TRIM('LOG_ARCHIVE_CONFIG'       ))
       , UPPER(TRIM('LOG_ARCHIVE_DEST_1'       ))
       , UPPER(TRIM('LOG_ARCHIVE_DEST_2'       ))
       , UPPER(TRIM('LOG_ARCHIVE_DEST_STATE_1' ))
       , UPPER(TRIM('LOG_ARCHIVE_DEST_STATE_2' ))
       , UPPER(TRIM('REMOTE_LOGIN_PASSWORDFILE'))
       , UPPER(TRIM('LOG_ARCHIVE_FORMAT'       ))
       , UPPER(TRIM('LOG_ARCHIVE_MAX_PROCESSES'))
       , UPPER(TRIM('FAL_CLIENT'               ))
       , UPPER(TRIM('FAL_SERVER'               ))
       , UPPER(TRIM('DB_FILE_NAME_CONVERT'     ))
       , UPPER(TRIM('LOG_FILE_NAME_CONVERT'    ))
       , UPPER(TRIM('STANDBY_FILE_MANAGEMENT'  ))
       );
EOF

[ORA12RF:oracle@ol7ora12sf][/home/oracle/oracle_scripts]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'

[ORA12RF:oracle@ol7ora12sf][/home/oracle/oracle_scripts]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Wed Dec 3 22:39:23 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

[ol7ora12sf]<SYS@ORA12RF>$ @adg_par

NAME                                               VALUE
-------------------------------------------------- -------------------------------------------------------------------------
db_file_name_convert                               (NULL)
log_file_name_convert                              +DATA1/ORA12RF/, +DATA1/ORA12RF_STB/, +FRA1/ORA12RF/, +FRA1/ORA12RF_STB/
log_archive_dest_1                                 LOCATION=+FRA1
log_archive_dest_2                                 (NULL)
log_archive_dest_state_1                           enable
log_archive_dest_state_2                           enable
fal_client                                         (NULL)
fal_server                                         tns_ora12rf
log_archive_config                                 dg_config=(ORA12RF_STB,ORA12RF)
log_archive_format                                 %t_%s_%r.ARC
log_archive_max_processes                          4
standby_file_management                            AUTO
remote_login_passwordfile                          EXCLUSIVE
db_name                                            ORA12RF
db_unique_name                                     ORA12RF_STB

15 rows selected.

Elapsed: 00:00:00.00


[ol7ora12sf]<SYS@ORA12RF>$ alter system reset log_file_name_convert scope=spfile;

System altered.

Elapsed: 00:00:00.02

 

--Primary DB의 DGMGRL 에서 상태 확인
DGMGRL> show database ORA12RF_STB;

Database - ora12rf_stb

  Role:               PHYSICAL STANDBY
  Intended State:     APPLY-ON
  Transport Lag:      0 seconds (computed 1 second ago)
  Apply Lag:          0 seconds (computed 1 second ago)
  Average Apply Rate: 375.00 KByte/s
  Real Time Query:    ON
  Instance(s):
    ORA12RF
      Warning: ORA-16675: database instance restart required for property value modification to take effect
      Warning: ORA-16714: the value of property LogFileNameConvert is inconsistent with the member setting

Database Status:
WARNING


DGMGRL> SHOW DATABASE 'ora12rf_stb' InconsistentProperties;
INCONSISTENT PROPERTIES
   INSTANCE_NAME        PROPERTY_NAME         MEMORY_VALUE         SPFILE_VALUE         BROKER_VALUE
         ORA12RF   LogFileNameConvert                                           +DATA1/ORA12RF/, +DATA1/ORA12RF_STB/, +FRA1/ORA12RF/, +FRA1/ORA12RF_STB/

DGMGRL> EDIT DATABASE 'ora12rf_stb' SET PROPERTY LogFileNameConvert = '';
Warning: ORA-16675: database instance restart required for property value modification to take effect

Property "logfilenameconvert" updated

 

--Standby DB 재기동
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Sun Dec 21 18:56:28 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

[ol7ora12sf]<SYS@ORA12RF>$ shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
[ol7ora12sf]<
SYS@ORA12RF>$ startup
ORACLE instance started.

Total System Global Area 5033164800 bytes
Fixed Size                  8631048 bytes
Variable Size            1409289464 bytes
Database Buffers         3607101440 bytes
Redo Buffers                8142848 bytes
Database mounted.
Database opened.

 

--Primary DB에서 SWITCH LOGFILE 한번 해줌
[ol7ora12rf1]<SYS@ORA12RF1>$ ALTER SYSTEM SWITCH LOGFILE;

 

--Primary DB의 DGMGRL 에서 상태 확인
DGMGRL> show database ORA12RF_STB;

Database - ora12rf_stb

  Role:               PHYSICAL STANDBY
  Intended State:     APPLY-ON
  Transport Lag:      0 seconds (computed 1 second ago)
  Apply Lag:          0 seconds (computed 1 second ago)
  Average Apply Rate: 121.00 KByte/s
  Real Time Query:    ON
  Instance(s):
    ORA12RF

Database Status:
SUCCESS


11-4. Primary DB에서 아카이브 못지우게 설정


--Primary 서버에서 RMAN 백업 시 아래 설정 추가 (oracle os user)
CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY;

 

--Primary 서버 1번 노드
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle/os_scripts]$ cat rman_init.sh | grep -i STANDBY
CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY; #For ADG

 

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ crontab -l | grep -i backup
20 2 * * * /home/oracle/os_scripts/rman_backup.sh &>/dev/null
--> 백업 자동화 쉘 활성화 시킴

 

11-5. Standby DB에서 아카이브 주기적인 백업 및 삭제

 

접속할 데이터베이스(DB_NAME)를 선택하세요:
1) ORA12SF
2) ORA12RF
3) RESERVED
번호를 입력하세요 (1,2,3): 2
현재 ORACLE_SID: ORA12RF
ORA12RF 환경 설정 적용 중...
환경 설정 완료 : 현재 ORACLE_SID = ORA12RF
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ mkdir -p /home/oracle/os_scripts/ORA12RF_STB
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ mkdir -p /home/oracle/rman_backup/ORA12RF_STB/autobackup
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ vi /home/oracle/os_scripts/ORA12RF_STB/rman_init.sh

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ cat /home/oracle/os_scripts/ORA12RF_STB/rman_init.sh
#!/bin/bash

export ORACLE_HOME=/u01/app/oracle/product/12c/db_1
export ORACLE_SID=ORA12RF

mkdir -p /home/oracle/rman_backup/ORA12RF_STB/autobackup/

$ORACLE_HOME/bin/rman target / << EOF
run {
#CONFIGURE RETENTION POLICY TO REDUNDANCY 1;
CONFIGURE BACKUP OPTIMIZATION OFF;
CONFIGURE DEFAULT DEVICE TYPE TO DISK;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/home/oracle/rman_backup/ORA12RF_STB/autobackup/%F';
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '+DATA1/ORA12RF_STB/CONTROLFILE/snapcf_CA.f';
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET;
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1;
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1;
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE;
CONFIGURE RMAN OUTPUT TO KEEP FOR 7 DAYS;
CONFIGURE MAXSETSIZE TO UNLIMITED;
CONFIGURE ENCRYPTION FOR DATABASE OFF;
CONFIGURE ENCRYPTION ALGORITHM 'AES128';
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE;
CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY; #For ADG
}
exit;
EOF

 

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ chmod 775 /home/oracle/os_scripts/ORA12RF_STB/rman_init.sh

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ vi /home/oracle/os_scripts/ORA12RF_STB/rman_arch.sh
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ cat /home/oracle/os_scripts/ORA12RF_STB/rman_arch.sh

export ORACLE_HOME=/u01/app/oracle/product/12c/db_1
export ORACLE_SID=ORA12RF

$ORACLE_HOME/bin/rman target / << EOF
run {
crosscheck archivelog all;
delete noprompt force archivelog until time 'SYSDATE-7';
}
exit;
EOF

 

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ chmod 775  /home/oracle/os_scripts/ORA12RF_STB/rman_arch.sh
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ vi /home/oracle/os_scripts/ORA12RF_STB/rman_backup.sh
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ cat /home/oracle/os_scripts/ORA12RF_STB/rman_backup.sh
mkdir -pv /home/oracle/os_scripts/rman_log/ORA12RF_STB/

save_datetime=`date +"%Y%m%d%H%M%S"`
/home/oracle/os_scripts/ORA12RF_STB/rman_init.sh > /home/oracle/os_scripts/rman_log/ORA12RF_STB/rman_init_log_${save_datetime}.log
/home/oracle/os_scripts/ORA12RF_STB/rman_arch.sh > /home/oracle/os_scripts/rman_log/ORA12RF_STB/rman_arch_log_${save_datetime}.log

 

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ chmod 775 /home/oracle/os_scripts/ORA12RF_STB/rman_backup.sh

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ crontab -e

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ crontab -l | grep -i ora12rf_stb
30 2 * * * /home/oracle/os_scripts/ORA12RF_STB/rman_backup.sh &>/dev/null

--> 위와 같이 설정하면 주기적으로 Standby DB의 아카이브 로그(7일전에 생성된)를 삭제하게됨

 

12. 동기화 테스트


--Primary DB
create user adg_test identified by oracle;
GRANT RESOURCE, CONNECT TO adg_test;
ALTER USER adg_test ACCOUNT UNLOCK;
ALTER USER adg_test DEFAULT TABLESPACE users;
ALTER USER adg_test TEMPORARY TABLESPACE temp;
ALTER USER adg_test quota unlimited on users;

drop table adg_test.tb_adg_test_01;
create table adg_test.tb_adg_test_01
(
    adg_test_01_no number(15)
)
;

insert into adg_test.tb_adg_test_01 values (1);

commit;

insert into adg_test.tb_adg_test_01
select (select nvl(max(adg_test_01_no), 0) from adg_test.tb_adg_test_01)+level from dual connect by level <= 1000000
;

commit;

 

--Standby DB에서 확인
select count(*) from adg_test.TB_ADG_TEST_01;

COUNT(*)
---------
  1000001

--> 정상적으로 실시간 동기화 됨을 확인함


13. ADG 상태 모니터링

 

13-1. DG Broker를 이용한 통합 모니터링

 

--Primary 서버에서 확인 (oracle os user)

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ alias dg
alias dg='rlwrap dgmgrl sys/oracle@TNS_ORA12RF'
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ dg
DGMGRL for Linux: Release 12.2.0.1.0 - Production on Wed Dec 17 22:36:02 2025

Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.

Welcome to DGMGRL, type "help" for information.
Connected to "ORA12RF"
Connected as SYSDBA.


DGMGRL> SHOW CONFIGURATION;

Configuration - ORA12RF_DG

  Protection Mode: MaxPerformance
  Members:
  ORA12RF     - Primary database
    ora12rf_stb - Physical standby database

Fast-Start Failover: DISABLED

Configuration Status:
SUCCESS   (status updated 15 seconds ago)
--> 결과가 "SUCCESS"여야 함. "WARNING"이나 "ERROR" 발생 시 상세 확인 필요.

 

DGMGRL> SHOW DATABASE verbose 'ORA12RF';

Database - ORA12RF

  Role:               PRIMARY
  Intended State:     TRANSPORT-ON
  Instance(s):
    ORA12RF1
    ORA12RF2

  Properties:
    DGConnectIdentifier             = 'tns_ora12rf'
    ObserverConnectIdentifier       = ''
    LogXptMode                      = 'ASYNC'
    RedoRoutes                      = ''
    DelayMins                       = '0'
    Binding                         = 'optional'
    MaxFailure                      = '0'
    MaxConnections                  = '1'
    ReopenSecs                      = '300'
    NetTimeout                      = '30'
    RedoCompression                 = 'DISABLE'
    LogShipping                     = 'ON'
    PreferredApplyInstance          = ''
    ApplyInstanceTimeout            = '0'
    ApplyLagThreshold               = '30'
    TransportLagThreshold           = '30'
    TransportDisconnectedThreshold  = '30'
    ApplyParallel                   = 'AUTO'
    ApplyInstances                  = '0'
    StandbyFileManagement           = 'AUTO'
    ArchiveLagTarget                = '0'
    LogArchiveMaxProcesses          = '4'
    LogArchiveMinSucceedDest        = '1'
    DataGuardSyncLatency            = '0'
    DbFileNameConvert               = ''
    LogFileNameConvert              = ''
    FastStartFailoverTarget         = ''
    InconsistentProperties          = '(monitor)'
    InconsistentLogXptProps         = '(monitor)'
    SendQEntries                    = '(monitor)'
    LogXptStatus                    = '(monitor)'
    RecvQEntries                    = '(monitor)'
    PreferredObserverHosts          = ''
    StaticConnectIdentifier(*)
    StandbyArchiveLocation(*)
    AlternateLocation(*)
    LogArchiveTrace(*)
    LogArchiveFormat(*)
    TopWaitEvents(*)
    (*) - Please check specific instance for the property value

  Log file locations(*):
    (*) - Check specific instance for log file locations.

Database Status:
SUCCESS

DGMGRL> SHOW DATABASE verbose 'ora12rf_stb';

Database - ora12rf_stb

  Role:               PHYSICAL STANDBY
  Intended State:     APPLY-ON
  Transport Lag:      0 seconds (computed 1 second ago)
  Apply Lag:          0 seconds (computed 1 second ago)
  Average Apply Rate: 103.00 KByte/s
  Active Apply Rate:  2.70 MByte/s
  Maximum Apply Rate: 7.13 MByte/s
  Real Time Query:    ON
  Instance(s):
    ORA12RF

  Properties:
    DGConnectIdentifier             = 'tns_ora12rf_stb'
    ObserverConnectIdentifier       = ''
    LogXptMode                      = 'ASYNC'
    RedoRoutes                      = ''
    DelayMins                       = '0'
    Binding                         = 'optional'
    MaxFailure                      = '0'
    MaxConnections                  = '1'
    ReopenSecs                      = '300'
    NetTimeout                      = '30'
    RedoCompression                 = 'DISABLE'
    LogShipping                     = 'ON'
    PreferredApplyInstance          = ''
    ApplyInstanceTimeout            = '0'
    ApplyLagThreshold               = '30'
    TransportLagThreshold           = '30'
    TransportDisconnectedThreshold  = '30'
    ApplyParallel                   = 'AUTO'
    ApplyInstances                  = '0'
    StandbyFileManagement           = 'AUTO'
    ArchiveLagTarget                = '0'
    LogArchiveMaxProcesses          = '4'
    LogArchiveMinSucceedDest        = '1'
    DataGuardSyncLatency            = '0'
    DbFileNameConvert               = ''
    LogFileNameConvert              = ''
    FastStartFailoverTarget         = ''
    InconsistentProperties          = '(monitor)'
    InconsistentLogXptProps         = '(monitor)'
    SendQEntries                    = '(monitor)'
    LogXptStatus                    = '(monitor)'
    RecvQEntries                    = '(monitor)'
    PreferredObserverHosts          = ''
    StaticConnectIdentifier         = '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.240.111)(PORT=1521))

                                       (CONNECT_DATA=(SERVICE_NAME=ORA12RF_STB_DGMGRL)(INSTANCE_NAME=ORA12RF)(SERVER=DEDICATED)))'
    StandbyArchiveLocation          = '+FRA1'
    AlternateLocation               = ''
    LogArchiveTrace                 = '0'
    LogArchiveFormat                = '%t_%s_%r.ARC'
    TopWaitEvents                   = '(monitor)'

  Log file locations:
    Alert log               : /u01/app/oracle/diag/rdbms/ora12rf_stb/ORA12RF/trace/alert_ORA12RF.log
    Data Guard Broker log   : /u01/app/oracle/diag/rdbms/ora12rf_stb/ORA12RF/trace/drcORA12RF.log

Database Status:
SUCCESS

 

13-2. Primary Database 모니터링 (전송 상태)

 

--Primary 서버에서 확인 (oracle os user)
--Primary에서는 아카이브 목적지(Standby)로의 전송이 정상적인지, RAC 노드 간 불일치는 없는지 확인
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Sat Dec 6 10:27:51 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

[ol7ora12rf1]<SYS@ORA12RF1>$

SET LINESIZE 200
SET PAGESIZE 1000
SET TRIMSPOOL ON
SET TAB OFF

COLUMN INST_ID      FORMAT 9999       HEADING "Inst"
COLUMN DEST_ID      FORMAT 99         HEADING "ID"
COLUMN STATUS       FORMAT a10        HEADING "Status"
COLUMN ERROR        FORMAT a30        HEADING "Error Message" WORD_WRAPPED
COLUMN TARGET       FORMAT a10        HEADING "Target"
COLUMN LOG_SEQUENCE FORMAT 9999999    HEADING "Log Seq"
COLUMN APPLIED_SCN  FORMAT 9999999999999 HEADING "Applied SCN"

--아카이브 목적지 상태 및 에러 확인
SELECT INST_ID, DEST_ID, STATUS, ERROR, TARGET, LOG_SEQUENCE, APPLIED_SCN
  FROM GV$ARCHIVE_DEST
 WHERE TARGET = 'STANDBY';

 Inst  ID Status     Error Message                  Target      Log Seq    Applied SCN
----- --- ---------- ------------------------------ ---------- -------- --------------
    1   2 VALID      (NULL)                         STANDBY          33       13962540
    2   2 VALID      (NULL)                         STANDBY          27       13962540

2 rows selected.

Elapsed: 00:00:00.02


[ol7ora12rf1]<SYS@ORA12RF1>$

SET LINESIZE 200
SET PAGESIZE 1000
SET TRIMSPOOL ON
SET TAB OFF


COLUMN THREAD#      FORMAT 999   
COLUMN MAX_SEQUENCE FORMAT 9999999
COLUMN APPLIED FORMAT a10     


--최근 아카이브 로그 생성 및 전송 현황
SELECT  THREAD#, APPLIED, MAX(SEQUENCE#) "MAX_SEQUENCE"
  FROM
     (
        SELECT A.*
             , RANK() OVER(ORDER BY RESETLOGS_TIME DESC) AS RNUM
          FROM V$ARCHIVED_LOG A
         WHERE 1=1
           AND A.DEST_ID = 2
     ) A
 WHERE 1=1
   AND RNUM = 1
 GROUP BY THREAD#, APPLIED
 ORDER BY THREAD# DESC, APPLIED;


THREAD# APPLIED    MAX_SEQUENCE
------- ---------- ------------
      2 YES                  26
      1 NO                   32
      1 YES                  31

3 rows selected.

Elapsed: 00:00:00.01

 

13-3. Standby에서 확인

 

접속할 데이터베이스(DB_NAME)를 선택하세요:
1) ORA12SF
2) ORA12RF
3) RESERVED
번호를 입력하세요 (1,2,3): 2
현재 ORACLE_SID: ORA12RF
ORA12RF 환경 설정 적용 중...
환경 설정 완료 : 현재 ORACLE_SID = ORA12RF

 

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Sat Dec 6 10:33:24 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

[ol7ora12sf]<SYS@ORA12RF>$
SET LINESIZE 200
SET PAGESIZE 1000
COLUMN OPEN_MODE FORMAT a25 HEADING "Open Mode"
COLUMN DATABASE_ROLE FORMAT a20 HEADING "DB Role"
COLUMN PROTECTION_MODE FORMAT a25 HEADING "Protection Mode"

SELECT OPEN_MODE, DATABASE_ROLE, PROTECTION_MODE
  FROM V$DATABASE;


Open Mode                 | DB Role              | Protection Mode
------------------------- | -------------------- | -------------------------
READ ONLY WITH APPLY      | PHYSICAL STANDBY     | MAXIMUM PERFORMANCE
--> Standby DB 상태 확인

1 row selected.

Elapsed: 00:00:00.00

 

[ol7ora12sf]<SYS@ORA12RF>$

SET LINESIZE 200
SET PAGESIZE 1000
SET TRIMSPOOL ON
SET TAB OFF
SET COLSEP ' | '

COLUMN PROCESS    FORMAT a10        HEADING "Process"
COLUMN STATUS     FORMAT a15        HEADING "Status"
COLUMN THREAD#    FORMAT 9999       HEADING "Thread"
COLUMN SEQUENCE#  FORMAT 9999999    HEADING "Sequence"
COLUMN BLOCK#     FORMAT 99999999   HEADING "Current Block"
COLUMN BLOCKS     FORMAT 99999999   HEADING "Total Blocks"

SELECT PROCESS, STATUS, THREAD#, SEQUENCE#, BLOCK#, BLOCKS
  FROM V$MANAGED_STANDBY
 WHERE PROCESS LIKE 'MRP%';

Process    | Status          | Thread | Sequence | Current Block | Total Blocks
---------- | --------------- | ------ | -------- | ------------- | ------------
MRP0       | APPLYING_LOG    |      1 |       33 |         50246 |       409600

1 row selected.

Elapsed: 00:00:00.00

--> MRP 프로세스 확인

 

SET LINESIZE 200
SET PAGESIZE 1000
SET TRIMSPOOL ON
SET TAB OFF
SET COLSEP ' | '
COLUMN NAME          FORMAT a20       HEADING "Metric Name"
COLUMN VALUE         FORMAT a20       HEADING "Lag Time"
COLUMN DATUM_TIME    FORMAT a30       HEADING "Datum Time"
COLUMN TIME_COMPUTED FORMAT a30       HEADING "Computed Time"

SELECT NAME, VALUE, DATUM_TIME, TIME_COMPUTED
  FROM V$DATAGUARD_STATS
 WHERE NAME IN ('transport lag', 'apply lag');


Metric Name          | Lag Time             | Datum Time                     | Computed Time
-------------------- | -------------------- | ------------------------------ | ------------------------------
transport lag        | +00 00:00:00         | 12/21/2025 20:05:47            | 12/21/2025 20:05:48
apply lag            | +00 00:00:00         | 12/21/2025 20:05:47            | 12/21/2025 20:05:48

2 rows selected.

Elapsed: 00:00:00.02

--> 지연이 없음을 확인


COLUMN DEST_ID FORMAT 99 HEADING "DEST_ID"
COLUMN STATUS FORMAT a15 HEADING "Status"
COLUMN TYPE FORMAT a15 HEADING "Type"
COLUMN RECOVERY_MODE FORMAT a25 HEADING "Recovery Mode"
COLUMN SYNCHRONIZATION_STATUS FORMAT a20 HEADING "Sync Status"

SELECT DEST_ID, STATUS, TYPE, RECOVERY_MODE, SYNCHRONIZATION_STATUS
  FROM V$ARCHIVE_DEST_STATUS
 WHERE STATUS <> 'INACTIVE';

DEST_ID | Status          | Type            | Recovery Mode             | Sync Status
------- | --------------- | --------------- | ------------------------- | --------------------
      1 | VALID           | LOCAL           | MANAGED REAL TIME APPLY   | STATUS NOT AVAILABLE
     32 | VALID           | UNKNOWN         | IDLE                      | STATUS NOT AVAILABLE

2 rows selected.

Elapsed: 00:00:00.00


14. 재기동 테스트

 

14-1. Shutdown 절차

 

Shutdown(종료) 시에는 Primary를 먼저 내리는 것이 일반적이며, Startup(기동) 시에는 Standby를 먼저 올리는 것이 권장
이유: Primary를 먼저 종료하여 더 이상의 Redo 생성을 막고, Standby가 마지막 로그까지 반영하도록 하기 위함임.
(단, FSFO가 설정된 경우라면 순서가 다름.)

 

--Primary 서버
--oracle os user
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ crsctl stat res ora.ora12rf.db -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.ora12rf.db
      1        ONLINE  ONLINE       ol7ora12rf1              Open,HOME=/u01/app/o
                                                             racle/product/12c/db
                                                             _1,STABLE
      2        ONLINE  ONLINE       ol7ora12rf2              Open,HOME=/u01/app/o
                                                             racle/product/12c/db
                                                             _1,STABLE
--------------------------------------------------------------------------------

 

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ alias dg
alias dg='rlwrap dgmgrl sys/oracle@TNS_ORA12RF_STB'

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ dg
DGMGRL for Linux: Release 12.2.0.1.0 - Production on Sat Dec 6 19:23:56 2025

Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.

Welcome to DGMGRL, type "help" for information.
Connected to "ORA12RF"
Connected as SYSDG.

--구성 상태 확인 (SUCCESS 확인)

DGMGRL> SHOW CONFIGURATION;

Configuration - ORA12RF_DG

  Protection Mode: MaxPerformance
  Members:
  ORA12RF     - Primary database
    ora12rf_stb - Physical standby database

Fast-Start Failover: DISABLED

Configuration Status:
SUCCESS   (status updated 25 seconds ago)

 

--Lag 확인 (Transport Lag, Apply Lag가 0인지 확인)
DGMGRL> SHOW DATABASE 'ora12rf_stb';

Database - ora12rf_stb

  Role:               PHYSICAL STANDBY
  Intended State:     APPLY-ON
  Transport Lag:      0 seconds (computed 0 seconds ago)
  Apply Lag:          0 seconds (computed 0 seconds ago)
  Average Apply Rate: 60.00 KByte/s
  Real Time Query:    ON
  Instance(s):
    ORA12RF

Database Status:
SUCCESS

 

DGMGRL> quit

 

--Primary DB를 내림
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ srvctl stop database -db ora12rf -stopoption immediate

 

--Primary DB 1번 노드 Alert Log
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ alias alog
alias alog='tail -f $ORACLE_BASE/diag/rdbms/$ORACLE_UNQNAME_LOWER/$ORACLE_SID/trace/alert_$ORACLE_SID.log'

 

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ alog
Thread 1 closed at log sequence 33
Successful close of redo thread 1

 

--Primary DB 2번 노드 Alert Log
[ORA12RF2:oracle@ol7ora12rf2][/home/oracle]$ alias alog
alias alog='tail -f $ORACLE_BASE/diag/rdbms/$ORACLE_UNQNAME_LOWER/$ORACLE_SID/trace/alert_$ORACLE_SID.log'

 

[ORA12RF2:oracle@ol7ora12rf2][/home/oracle]$ alog
Thread 2 closed at log sequence 27
Successful close of redo thread 2

 

--Standby DB Alert Log
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ alias alog
alias alog='tail -f $ORACLE_BASE/diag/rdbms/$ORACLE_UNQNAME_LOWER/$ORACLE_SID/trace/alert_$ORACLE_SID.log'

 

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ alog
RFS[5]: Assigned to RFS process (PID:3651)
RFS[5]: Possible network disconnect with primary database
Sun Dec 21 20:10:29 2025
RFS[6]: Assigned to RFS process (PID:3649)
RFS[6]: Possible network disconnect with primary database

 

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ crsctl stat res ora.ora12rf.db -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.ora12rf.db
      1        OFFLINE OFFLINE                               Instance Shutdown,ST
                                                             ABLE
      2        OFFLINE OFFLINE                               Instance Shutdown,ST
                                                             ABLE
--------------------------------------------------------------------------------


--Standby Database 적용 상태 확인 (Standby 서버)
접속할 데이터베이스(DB_NAME)를 선택하세요:
1) ORA12SF
2) ORA12RF
3) RESERVED
번호를 입력하세요 (1,2,3): 2
현재 ORACLE_SID: ORA12RF
ORA12RF 환경 설정 적용 중...
환경 설정 완료 : 현재 ORACLE_SID = ORA12RF

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Sat Dec 6 19:32:16 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

 

[ol7ora12sf]<SYS@ORA12RF>$

SET LINESIZE 200
SET PAGESIZE 1000
SET TRIMSPOOL ON
SET TAB OFF


COLUMN THREAD#      FORMAT 999   
COLUMN MAX_SEQUENCE FORMAT 9999999
COLUMN APPLIED FORMAT a10     
;

 

--최근 아카이브 로그 생성 및 전송 현황
SELECT  THREAD#, APPLIED, MAX(SEQUENCE#) "MAX_SEQUENCE"
  FROM
     (
        SELECT A.*
             , RANK() OVER(ORDER BY RESETLOGS_TIME DESC) AS RNUM
          FROM V$ARCHIVED_LOG A
         WHERE 1=1
           AND A.DEST_ID = 1
     ) A
 WHERE 1=1
   AND RNUM = 1
 GROUP BY THREAD#, APPLIED
 ORDER BY THREAD# DESC, APPLIED;

THREAD# APPLIED    MAX_SEQUENCE
------- ---------- ------------
      2 YES                  26
      1 IN-MEMORY            32
      1 YES                  31
--> IN-MEMORY의 의미: Real-Time Apply 기능이 작동 중임을 나타냄
    --> Standby DB는 아카이브 로그 파일이 디스크에 떨어질 때까지 기다리지 않음
    --> Standby Redo Log(SRL)를 통해 메모리 상에서 로그를 받자마자 바로 적용해버립니다.
    --> 즉, 32번은 디스크에 아카이브 파일로 완전히 정착되기 전에(또는 정착되는 과정 중에) 이미 메모리 레벨에서 적용이 끝났다는 의미로 해석하면됨

3 rows selected.

Elapsed: 00:00:00.00

--> 동기화가 어디까지 된건지 확인

select process, status, thread#, sequence#, block#
from v$managed_standby a
where process like 'MRP%';

PROCESS                     STATUS                               THREAD#  SEQUENCE#     BLOCK#
--------------------------- ------------------------------------ ------- ---------- ----------
MRP0                        APPLYING_LOG                               1         33      57864

1 row selected.

Elapsed: 00:00:00.00

--> Thread 1번의 33 시퀀스를 동기화 중이었음

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ alias dg
alias dg='rlwrap dgmgrl sys/oracle@TNS_ORA12RF_STB'

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ dg
DGMGRL for Linux: Release 12.2.0.1.0 - Production on Sat Dec 6 19:34:09 2025

Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.

Welcome to DGMGRL, type "help" for information.
Connected to "ORA12RF_STB"
Connected as SYSDG.
DGMGRL> show database 'ora12rf_stb';

Database - ora12rf_stb

  Role:               PHYSICAL STANDBY
  Intended State:     APPLY-ON
  Transport Lag:      0 seconds (computed 271 seconds ago)
  Apply Lag:          2 seconds (computed 271 seconds ago)
  Average Apply Rate: 53.00 KByte/s
  Real Time Query:    ON
  Instance(s):
    ORA12RF

  Database Warning(s):
    ORA-16857: member disconnected from redo source for longer than specified threshold

Database Status:
WARNING


DGMGRL> quit

 

--이제 Standby DB도 내림
--oracle os user
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ srvctl stop database -db ORA12RF_STB -stopoption immediate

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ crsctl stat res ora.ora12rf_stb.db -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.ora12rf_stb.db
      1        OFFLINE OFFLINE                               Instance Shutdown,ST
                                                             ABLE
--------------------------------------------------------------------------------

 

14-2. startup 절차

 

기동 순서 (Startup): Standby DB 기동 -> Primary DB 기동
이유: Standby 리스너와 DB가 준비된 상태에서 Primary가 올라와야, Primary가 기동되자마자 에러 없이 아카이브를 전송할 수 있음

 

--Standby 서버 (oracle os user)
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ srvctl config database -db ora12rf_stb
Database unique name: ORA12RF_STB
Database name: ORA12RF
Oracle home: /u01/app/oracle/product/12c/db_1
Oracle user: grid
Spfile: +DATA1/ORA12RF_STB/PARAMETERFILE/spfile.298.1220467273
Password file: +DATA1/ORA12RF_STB/PASSWORD/pwdora12rf_stb.297.1220467105
Domain:
Start options: read only
Stop options: immediate
Database role: PHYSICAL_STANDBY
Management policy: AUTOMATIC
Disk Groups: DATA1,FRA1
Services:
OSDBA group:
OSOPER group:
Database instance: ORA12RF

 

--Standby 서버 (grid os user)
--리스너 상태 확인 및 기동 (이미 떠있겠지만 확인)
[+ASM:grid@ol7ora12sf][/home/grid]$ srvctl status listener -listener LISTENER_ADG
Listener LISTENER_ADG is enabled
Listener LISTENER_ADG is running on node(s): ol7ora12sf

[+ASM:grid@ol7ora12sf][/home/grid]$ lsnrctl status LISTENER_ADG

LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 21-DEC-2025 20:21:44

Copyright (c) 1991, 2016, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_ADG)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER_ADG
Version                   TNSLSNR for Linux: Version 12.2.0.1.0 - Production
Start Date                20-DEC-2025 14:08:05
Uptime                    1 days 6 hr. 13 min. 38 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/12c/grid/network/admin/listener.ora
Listener Log File         /u01/app/oracle/diag/tnslsnr/ol7ora12sf/listener_adg/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_ADG)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.240.111)(PORT=1522)))
Services Summary...
Service "ORA12RF_STB_DGMGRL" has 1 instance(s).
  Instance "ORA12RF", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully


--Standby DB를 올림 (oracle os user)
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ srvctl start database -db ORA12RF_STB

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ crsctl stat res ora.ora12rf_stb.db -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.ora12rf_stb.db
      1        ONLINE  ONLINE       ol7ora12sf               Open,Readonly,HOME=/
                                                             u01/app/oracle/produ
                                                             ct/12c/db_1,STABLE
--------------------------------------------------------------------------------

 

--primary 서버에서 Primary DB를 올림
--oracle os user
--Primary DB 1번 노드
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ srvctl start database -db ORA12RF

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ crsctl stat res ora.ora12rf.db -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.ora12rf.db
      1        ONLINE  ONLINE       ol7ora12rf1              Open,HOME=/u01/app/o
                                                             racle/product/12c/db
                                                             _1,STABLE
      2        ONLINE  ONLINE       ol7ora12rf2              Open,HOME=/u01/app/o
                                                             racle/product/12c/db
                                                             _1,STABLE
--------------------------------------------------------------------------------


--Primary 서버 (oracle os user)
--구동 확인
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ alias dg
alias dg='rlwrap dgmgrl sys/oracle@TNS_ORA12RF'

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ dg
DGMGRL for Linux: Release 12.2.0.1.0 - Production on Sat Dec 6 19:48:00 2025

Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.

Welcome to DGMGRL, type "help" for information.
Connected to "ORA12RF"
Connected as SYSDG.
DGMGRL> SHOW CONFIGURATION;

Configuration - ORA12RF_DG

  Protection Mode: MaxPerformance
  Members:
  ORA12RF     - Primary database
    ora12rf_stb - Physical standby database

Fast-Start Failover: DISABLED

Configuration Status:
SUCCESS   (status updated 42 seconds ago)

DGMGRL> SHOW DATABASE 'ora12rf_stb';

Database - ora12rf_stb

  Role:               PHYSICAL STANDBY
  Intended State:     APPLY-ON
  Transport Lag:      0 seconds (computed 0 seconds ago)
  Apply Lag:          0 seconds (computed 0 seconds ago)
  Average Apply Rate: 174.00 KByte/s
  Real Time Query:    ON
  Instance(s):
    ORA12RF

Database Status:
SUCCESS

 

--Standby DB (oracle os user)
SET LINESIZE 200
SET PAGESIZE 1000
SET TRIMSPOOL ON
SET TAB OFF


COLUMN THREAD#      FORMAT 999   
COLUMN MAX_SEQUENCE FORMAT 9999999
COLUMN APPLIED FORMAT a10     

SELECT  THREAD#, APPLIED, MAX(SEQUENCE#) "MAX_SEQUENCE"
  FROM
     (
        SELECT A.*
             , RANK() OVER(ORDER BY RESETLOGS_TIME DESC) AS RNUM
          FROM V$ARCHIVED_LOG A
         WHERE 1=1
           AND A.DEST_ID = 1
     ) A
 WHERE 1=1
   AND RNUM = 1
 GROUP BY THREAD#, APPLIED
 ORDER BY THREAD# DESC, APPLIED;
 
THREAD# APPLIED    MAX_SEQUENCE
------- ---------- ------------
      2 YES                  29
      1 IN-MEMORY            35
      1 YES                  34

3 rows selected.

Elapsed: 00:00:00.00

 

--primary DB에서 로그 스위치
[ol7ora12rf1]<SYS@ORA12RF1>$ Alter system archive log current;

System altered.

Elapsed: 00:00:00.02

 

--Standby DB (oracle os user)
SET LINESIZE 200
SET PAGESIZE 1000
SET TRIMSPOOL ON
SET TAB OFF


COLUMN THREAD#      FORMAT 999   
COLUMN MAX_SEQUENCE FORMAT 9999999
COLUMN APPLIED FORMAT a10     

SELECT  THREAD#, APPLIED, MAX(SEQUENCE#) "MAX_SEQUENCE"
  FROM
     (
        SELECT A.*
             , RANK() OVER(ORDER BY RESETLOGS_TIME DESC) AS RNUM
          FROM V$ARCHIVED_LOG A
         WHERE 1=1
           AND A.DEST_ID = 1
     ) A
 WHERE 1=1
   AND RNUM = 1
 GROUP BY THREAD#, APPLIED
 ORDER BY THREAD# DESC, APPLIED;

THREAD# APPLIED    MAX_SEQUENCE
------- ---------- ------------
      2 IN-MEMORY            30
      2 YES                  29
      1 YES                  36

3 rows selected.

Elapsed: 00:00:00.00


15. 스위치 오버 테스트

 

15-1. Primary DB에서 Standby DB로 Switch Over 하기

 

--Standby DB (oracle os user)
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ alias dg
alias dg='rlwrap dgmgrl sys/oracle@TNS_ORA12RF_STB'

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ source ~oracle/.bash_profile
접속할 데이터베이스(DB_NAME)를 선택하세요:
1) ORA12SF
2) ORA12RF
3) RESERVED
번호를 입력하세요 (1,2,3): 2
현재 ORACLE_SID: ORA12RF
ORA12RF 환경 설정 적용 중...
환경 설정 완료 : 현재 ORACLE_SID = ORA12RF

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ dg
DGMGRL for Linux: Release 12.2.0.1.0 - Production on Sat Dec 6 11:22:14 2025

Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.

Welcome to DGMGRL, type "help" for information.
Connected to "ORA12RF_STB"
Connected as SYSDG.
DGMGRL> show configuration;

Configuration - ORA12RF_DG

  Protection Mode: MaxPerformance
  Members:
  ORA12RF     - Primary database
    ora12rf_stb - Physical standby database

Fast-Start Failover: DISABLED

Configuration Status:
SUCCESS   (status updated 57 seconds ago)

 

DGMGRL> VALIDATE DATABASE 'ora12rf_stb';

  Database Role:     Physical standby database
  Primary Database:  ORA12RF

  Ready for Switchover:  Yes
  --> "Ready for Switchover: Yes" 가 확인되어야 안전하게 진행 가능
  Ready for Failover:    Yes (Primary Running)

  Flashback Database Status:
    ORA12RF    :  On
    ora12rf_stb:  Off

  Capacity Information:
    Database     Instances        Threads
    ORA12RF      2                2
    ora12rf_stb  1                2
    Warning: the target standby has fewer instances than the
    primary database, this may impact application performance

  Managed by Clusterware:
    ORA12RF    :  YES
    ora12rf_stb:  YES

--Standby DB에서 아래의 명령어 실행 시 ORA12RF(Old Primary)는 Standby로 전환되며 종료 후 재기동되고,
--ora12rf_stb(Old Standby)는 Primary로 전환되어 Open 됨

DGMGRL> SWITCHOVER TO 'ora12rf_stb';
Performing switchover NOW, please wait...
New primary database "ora12rf_stb" is opening...
Oracle Clusterware is restarting database "ORA12RF" ...
Connected to "ORA12RF"
Connected to "ORA12RF"
Switchover succeeded, new primary is "ora12rf_stb"

 

DGMGRL> show configuration;

Configuration - ORA12RF_DG

  Protection Mode: MaxPerformance
  Members:
  ora12rf_stb - Primary database
    ORA12RF     - Physical standby database
      Error: ORA-12514: TNS:listener does not currently know of service requested in connect descriptor
--> Old Primrary(=New Standby가 재기동되는 중임)

Fast-Start Failover: DISABLED

Configuration Status:
ERROR   (status updated 70 seconds ago)

 

DGMGRL> show configuration;

Configuration - ORA12RF_DG

  Protection Mode: MaxPerformance
  Members:
  ora12rf_stb - Primary database
    ORA12RF     - Physical standby database
--> Old Standby(=New Primary)가 Primary가 되고
--> Old Primary(=New Standby)가 Standby가 됨

Fast-Start Failover: DISABLED

Configuration Status:
SUCCESS   (status updated 20 seconds ago)

 

--Old Primary(=새로운 Standby)에서 에서 ADG 관련 파라미터 확인
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ alias cdos
alias cdos='cd /home/oracle/oracle_scripts'

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ cdos
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle/oracle_scripts]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle/oracle_scripts]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Sat Dec 6 11:44:00 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

[ol7ora12rf1]<SYS@ORA12RF1>$ @adg_par

NAME                                               VALUE
-------------------------------------------------- ----------------------------------
db_file_name_convert                               (NULL)
log_file_name_convert                              (NULL)
log_archive_dest_1                                 LOCATION=+FRA1
log_archive_dest_2                                 (NULL)
log_archive_dest_state_1                           enable
log_archive_dest_state_2                           ENABLE
fal_client                                         (NULL)
fal_server                                         tns_ora12rf_stb
log_archive_config                                 dg_config=(ORA12RF,ora12rf_stb)
log_archive_format                                 %t_%s_%r.ARC
log_archive_max_processes                          4
standby_file_management                            AUTO
remote_login_passwordfile                          EXCLUSIVE
db_name                                            ORA12RF
db_unique_name                                     ORA12RF

15 rows selected.

Elapsed: 00:00:00.00

 

[ol7ora12rf1]<SYS@ORA12RF1>$
col name for a10
col open_mode for a20
col database_role for a20
select name, open_mode, database_role from v$database;

NAME       OPEN_MODE            DATABASE_ROLE
---------- -------------------- --------------------
ORA12RF    READ ONLY WITH APPLY PHYSICAL STANDBY

1 row selected.

Elapsed: 00:00:00.01

 

--Old Standby(=새로운 Primary) 에서 ADG 관련 파라미터 확인
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ alias cdos
alias cdos='cd /home/oracle/oracle_scripts'
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ cdos
[ORA12RF:oracle@ol7ora12sf][/home/oracle/oracle_scripts]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'

[ORA12RF:oracle@ol7ora12sf][/home/oracle/oracle_scripts]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Sat Dec 6 11:45:14 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

[ol7ora12sf]<SYS@ORA12RF>$ @adg_par

NAME                                               VALUE
-------------------------------------------------- ------------------------------------------------------------------------------------------
db_file_name_convert                               (NULL)
log_file_name_convert                              (NULL)
log_archive_dest_1                                 LOCATION=+FRA1
log_archive_dest_2                                 service="tns_ora12rf", ASYNC NOAFFIRM delay=0 optional compression=disable max_failure=0 m
                                                   ax_connections=1 reopen=300 db_unique_name="ORA12RF" net_timeout=30, valid_for=(online_log
                                                   file,all_roles)

log_archive_dest_state_1                           enable
log_archive_dest_state_2                           ENABLE
fal_client                                         (NULL)
fal_server                                         (NULL)
log_archive_config                                 dg_config=(ORA12RF_STB,ORA12RF)
log_archive_format                                 %t_%s_%r.ARC
log_archive_max_processes                          4
standby_file_management                            AUTO
remote_login_passwordfile                          EXCLUSIVE
db_name                                            ORA12RF
db_unique_name                                     ORA12RF_STB

15 rows selected.

Elapsed: 00:00:00.01


col name for a10
col open_mode for a20
col database_role for a20
select name, open_mode, database_role from v$database;

NAME       OPEN_MODE            DATABASE_ROLE
---------- -------------------- --------------------
ORA12RF    READ WRITE           PRIMARY

1 row selected.

Elapsed: 00:00:00.00

 

--동기화가 잘 되는지 확인

--Old Standby(=새로운 Primary)에서 트랜잭션 발생
create table adg_test.tb_adg_test_02
(
    adg_test_02_no number(15)
)
;

insert into adg_test.tb_adg_test_02 values (1);

commit;

insert into adg_test.tb_adg_test_02
select (select nvl(max(adg_test_02_no), 0) from adg_test.tb_adg_test_02)+level from dual connect by level <= 1000000
;

commit;

 

--Old Primary(=새로운 Standby) 에서 확인
select count(*) from adg_test.TB_ADG_TEST_02;

COUNT(*)
---------
  1000001

1 rows selected.

 

15-2. 다시 원래대로 Switch over 하기

 

--Old Primary(=New Standby)에서 작업 (oracle os user)

--1번 노드에서 작업
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle/oracle_scripts]$ alias dg

alias dg='rlwrap dgmgrl sys/oracle@TNS_ORA12RF'

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle/oracle_scripts]$ dg
DGMGRL for Linux: Release 12.2.0.1.0 - Production on Wed Dec 17 23:35:51 2025

Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.

Welcome to DGMGRL, type "help" for information.
Connected to "ORA12RF"
Connected as SYSDBA.
DGMGRL> SWITCHOVER TO 'ORA12RF';

Performing switchover NOW, please wait...
New primary database "ORA12RF" is opening...
Oracle Clusterware is restarting database "ora12rf_stb" ...
Connected to "ORA12RF_STB"
Connected to "ORA12RF_STB"
Switchover succeeded, new primary is "ORA12RF"

DGMGRL> show configuration;

Configuration - ORA12RF_DG

  Protection Mode: MaxPerformance
  Members:
  ORA12RF     - Primary database
    ora12rf_stb - Physical standby database

Fast-Start Failover: DISABLED

Configuration Status:
SUCCESS   (status updated 72 seconds ago)

DGMGRL>

 

16. 페일 오버 테스트

 

--Primary DB에서 Flashback database 확인
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Sat Dec 6 20:12:48 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

[ol7ora12rf1]<SYS@ORA12RF1>$

SET LINESIZE 200 PAGESIZE 100
COL INST_ID FOR 99
COL NAME FOR A10
COL DB_UNIQUE_NAME FOR A15
COL OPEN_MODE FOR A20
COL DATABASE_ROLE FOR A20
COL FLASHBACK_ON FOR A15
COL LOG_MODE FOR A15

SELECT INST_ID, NAME, DB_UNIQUE_NAME, OPEN_MODE, DATABASE_ROLE, LOG_MODE, FLASHBACK_ON
  FROM GV$DATABASE
 ORDER BY INST_ID;

INST_ID NAME       DB_UNIQUE_NAME  OPEN_MODE            DATABASE_ROLE        LOG_MODE        FLASHBACK_ON
------- ---------- --------------- -------------------- -------------------- --------------- ---------------
      1 ORA12RF    ORA12RF         READ WRITE           PRIMARY              ARCHIVELOG      YES
      2 ORA12RF    ORA12RF         READ WRITE           PRIMARY              ARCHIVELOG      YES

2 rows selected.

Elapsed: 00:00:00.16


--Primary DB를 Abort로 내림
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ srvctl stop database -db ORA12RF -stopoption abort
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ crsctl stat res ora.ora12rf.db -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.ora12rf.db
      1        OFFLINE OFFLINE                               Instance Shutdown,ST
                                                             ABLE
      2        OFFLINE OFFLINE                               Instance Shutdown,ST
                                                             ABLE
--------------------------------------------------------------------------------

--Standby DB로 Failover 시킴 (지금부터 Standby 가 New Primary가 되는 것임)
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ alias dg
alias dg='rlwrap dgmgrl sys/oracle@TNS_ORA12RF_STB'

 

--Standby DB에서 Flashback Database 확인
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Sun Dec 21 20:34:09 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

[ol7ora12sf]<SYS@ORA12RF>$
SET LINESIZE 200 PAGESIZE 100
COL INST_ID FOR 99
COL NAME FOR A10
COL DB_UNIQUE_NAME FOR A15
COL OPEN_MODE FOR A20
COL DATABASE_ROLE FOR A20
COL FLASHBACK_ON FOR A15
COL LOG_MODE FOR A15

SELECT INST_ID, NAME, DB_UNIQUE_NAME, OPEN_MODE, DATABASE_ROLE, LOG_MODE, FLASHBACK_ON
  FROM GV$DATABASE
 ORDER BY INST_ID;
 
INST_ID NAME       DB_UNIQUE_NAME  OPEN_MODE            DATABASE_ROLE        LOG_MODE        FLASHBACK_ON
------- ---------- --------------- -------------------- -------------------- --------------- ---------------
      1 ORA12RF    ORA12RF_STB     READ ONLY WITH APPLY PHYSICAL STANDBY     ARCHIVELOG      YES

1 row selected.

Elapsed: 00:00:00.01
 
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ dg
DGMGRL for Linux: Release 12.2.0.1.0 - Production on Sat Dec 6 20:15:14 2025

Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.

Welcome to DGMGRL, type "help" for information.
Connected to "ORA12RF_STB"
Connected as SYSDG.
DGMGRL> SHOW CONFIGURATION;

Configuration - ORA12RF_DG

  Protection Mode: MaxPerformance
  Members:
  ORA12RF     - Primary database
    Error: ORA-12514: TNS:listener does not currently know of service requested in connect descriptor

    ora12rf_stb - Physical standby database

Fast-Start Failover: DISABLED

Configuration Status:
ERROR   (status updated 0 seconds ago)

DGMGRL> FAILOVER TO 'ora12rf_stb';
Performing failover NOW, please wait...
Failover succeeded, new primary is "ora12rf_stb"

 

--Old Standby(=새로운 Primary)에서 Failover 시점 확인
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Sat Dec 6 20:27:47 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

[ol7ora12sf]<SYS@ORA12RF>$

--New Primary(ora12rf_stb)에서 Failover가 완료된 시점의 SCN을 확인합니다.
SET LINESIZE 200
COL STANDBY_BECAME_PRIMARY_SCN FOR A30
COL CURRENT_SCN FOR A30
COL FAILOVER_TIME FOR A25

SELECT TO_CHAR(STANDBY_BECAME_PRIMARY_SCN) AS STANDBY_BECAME_PRIMARY_SCN
     , TO_CHAR(CURRENT_SCN) AS CURRENT_SCN
     , TO_CHAR(SCN_TO_TIMESTAMP(STANDBY_BECAME_PRIMARY_SCN), 'YYYY-MM-DD HH24:MI:SS') AS FAILOVER_TIME
  FROM V$DATABASE;

STANDBY_BECAME_PRIMARY_SCN     CURRENT_SCN                    FAILOVER_TIME
------------------------------ ------------------------------ -------------------------
13975066                       13975756                       2025-12-21 20:33:23

1 row selected.

Elapsed: 00:00:00.01

 

--> STANDBY_BECAME_PRIMARY_SCN 에 대한 설명
--> 이 SCN이 바로 "이 시점 이후의 Old Primary 데이터는 버려진다"는 기준점이 됨
--여기서 나온 STANDBY_BECAME_PRIMARY_SCN 값이 복구 기준선임
--Old Primary를 Reinstate 하면, Old Primary의 데이터 중 이 SCN보다 높은 값(미래의 데이터)은 Flashback을 통해 지워지게 됨

--Old Primary(New Standby)의 마지막 상태 확인
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ srvctl start database -db ORA12RF -startoption mount

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Sat Dec 6 20:39:03 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SET LINESIZE 200
SET PAGESIZE 100
SET COLSEP ' | '
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';

COLUMN TABLESPACE_NAME FORMAT a15 HEADING 'TS Name'
COLUMN CHECKPOINT_CHANGE# FORMAT 999999999999999 HEADING 'Checkpoint SCN'
COLUMN CHECKPOINT_TIME FORMAT a20 HEADING 'Checkpoint Time'
COLUMN NAME FORMAT a60 HEADING 'File Name'

SELECT TABLESPACE_NAME,
       CHECKPOINT_CHANGE#,
       CHECKPOINT_TIME,
       NAME
FROM   V$DATAFILE_HEADER;

TS Name         |   Checkpoint SCN | Checkpoint Time      | File Name
--------------- | ---------------- | -------------------- | ---------------------------------------------------
SYSTEM          |         13973884 | 2025-12-21 20:27:18  | +DATA1/ORA12RF/DATAFILE/system.257.1213483305
TUNER_DATA1     |         13973884 | 2025-12-21 20:27:18  | +DATA1/ORA12RF/DATAFILE/tuner_data1.272.1216160599
SYSAUX          |         13973884 | 2025-12-21 20:27:18  | +DATA1/ORA12RF/DATAFILE/sysaux.258.1213483329
UNDOTBS1        |         13973884 | 2025-12-21 20:27:18  | +DATA1/ORA12RF/DATAFILE/undotbs1.259.1213483345
UNDOTBS2        |         13973884 | 2025-12-21 20:27:18  | +DATA1/ORA12RF/DATAFILE/undotbs2.266.1213483407
USERS           |         13973884 | 2025-12-21 20:27:18  | +DATA1/ORA12RF/DATAFILE/users.260.1213483345
TUNER_IDX1      |         13973884 | 2025-12-21 20:27:18  | +DATA1/ORA12RF/DATAFILE/tuner_idx1.273.1216160601

7 rows selected.

Elapsed: 00:00:00.02

 

[ol7ora12rf1]<SYS@ORA12RF1>$ SELECT CURRENT_SCN FROM V$DATABASE;

     CURRENT_SCN
----------------
               0

1 row selected.

Elapsed: 00:00:00.00

 

[ol7ora12rf1]<SYS@ORA12RF1>$
COL OLDEST_FLASHBACK_SCN FOR 999999999999999
COL OLDEST_FLASHBACK_TIME FOR A25

-- Flashback 가능 한계점 확인
SELECT OLDEST_FLASHBACK_SCN,
       TO_CHAR(OLDEST_FLASHBACK_TIME, 'YYYY-MM-DD HH24:MI:SS') AS OLDEST_TIME
  FROM V$FLASHBACK_DATABASE_LOG;

OLDEST_FLASHBACK_SCN | OLDEST_TIME
-------------------- | ---------------------------------------------------------
            13091087 | 2025-12-19 16:57:10

1 row selected.

Elapsed: 00:00:00.25

--> STANDBY_BECAME_PRIMARY_SCN 은 13975756 임
--> Old PRimary의 OLDEST_FLASHBACK_SCN 은 13091087 이므로 충분히 STANDBY_BECAME_PRIMARY_SCN 지점까지 갈수있는 상황
--> 즉 Reinstate가 가능한 상황임

 

--reinstate 작업  (New Primary=기존 Standby 에서 실행)
[[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ alias dg
alias dg='rlwrap dgmgrl sys/oracle@TNS_ORA12RF_STB'
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ dg
DGMGRL for Linux: Release 12.2.0.1.0 - Production on Wed Dec 17 23:44:53 2025

Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.

Welcome to DGMGRL, type "help" for information.
Connected to "ORA12RF_STB"
Connected as SYSDBA.

DGMGRL> REINSTATE DATABASE 'ORA12RF';
Reinstating database "ORA12RF", please wait...
Reinstatement of database "ORA12RF" succeeded
--Broker는 ORA12RF(old Primary)에 접속하여 해당 DB(New Primary)가 Failover된 SCN 시점보다 미래의 Redo를 가지고 있음을 감지하고,
--Flashback Database 기능을 사용하여 그 시점으로 되돌린 후, 새로운 Primary DB(ora12rf_stb)의 Standby DB로 전환함

DGMGRL> show configuration;

Configuration - ORA12RF_DG

  Protection Mode: MaxPerformance
  Members:
  ora12rf_stb - Primary database
    ORA12RF     - Physical standby database

Fast-Start Failover: DISABLED

Configuration Status:
SUCCESS   (status updated 38 seconds ago)

DGMGRL> show database 'ora12rf_stb';

Database - ora12rf_stb

  Role:               PRIMARY
  Intended State:     TRANSPORT-ON
  Instance(s):
    ORA12RF

Database Status:
SUCCESS

DGMGRL> show database 'ORA12RF';

Database - ORA12RF

  Role:               PHYSICAL STANDBY
  Intended State:     APPLY-ON
  Transport Lag:      0 seconds (computed 0 seconds ago)
  Apply Lag:          0 seconds (computed 0 seconds ago)
  Average Apply Rate: 203.00 KByte/s
  Real Time Query:    ON
  Instance(s):
    ORA12RF1 (apply instance)
    ORA12RF2

Database Status:
SUCCESS

--Old Primary(=새로운 Standby) 는 reinstate 후에 read only 모드로 정상 오픈됨
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ crsctl stat res ora.ora12rf.db -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.ora12rf.db
      1        ONLINE  ONLINE       ol7ora12rf1              Open,Readonly,HOME=/
                                                             u01/app/oracle/produ
                                                             ct/12c/db_1,STABLE
      2        ONLINE  ONLINE       ol7ora12rf2              Open,Readonly,HOME=/
                                                             u01/app/oracle/produ
                                                             ct/12c/db_1,STABLE
--------------------------------------------------------------------------------

 

--현재까지 Failover 한 후 Old Primary를 Reinstate해서 Old Primary가 다시 Primary가 될 수 있는 준비를 한 상황임
--지금부터 Old Primary(현재 Standby)를 다시 Primary로 Switchover 할 것임

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Sat Dec 6 20:53:51 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

[ol7ora12rf1]<SYS@ORA12RF1>$

SET LINESIZE 200 PAGESIZE 1000
COL PROCESS FOR A10
COL STATUS FOR A15
COL THREAD# FOR 999
COL SEQUENCE# FOR 999999
COL BLOCK# FOR 99999999
COL BLOCKS FOR 99999999

-- [Query] MRP(Managed Recovery Process) 상태 확인
-- RAC 환경이므로 어떤 인스턴스에서 MRP가 도는지 확인 필요
SELECT INST_ID, PROCESS, STATUS, THREAD#, SEQUENCE#, BLOCK#, BLOCKS
  FROM GV$MANAGED_STANDBY
 WHERE PROCESS LIKE 'MRP%';

   INST_ID PROCESS    STATUS          THREAD# SEQUENCE#    BLOCK#    BLOCKS
---------- ---------- --------------- ------- --------- --------- ---------
         1 MRP0       APPLYING_LOG          1         4       106    409600

1 row selected.

Elapsed: 00:00:00.01


--다시 Switch over하여 원상 복구 (Old Primray=현재 Standby에서 작업)
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ alias dg
alias dg='rlwrap dgmgrl sys/oracle@TNS_ORA12RF'
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ dg
DGMGRL for Linux: Release 12.2.0.1.0 - Production on Wed Dec 17 23:51:06 2025

Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.

Welcome to DGMGRL, type "help" for information.
Connected to "ORA12RF"
Connected as SYSDBA.
DGMGRL> SWITCHOVER TO 'ORA12RF';

Performing switchover NOW, please wait...
New primary database "ORA12RF" is opening...
Oracle Clusterware is restarting database "ora12rf_stb" ...
Connected to "ORA12RF_STB"
Connected to "ORA12RF_STB"
Switchover succeeded, new primary is "ORA12RF"
--> 이제 다시 ORA12RF가 Primary가 됨

 

17. FSFO 테스트

 

17-1. 옵저버 서버 구성 (Oracle Client만 설치)

 

<옵저버 전용 서버 정보>
OS : Oracle Linux Server 7.9 (grep ^PRETTY_NAME= /etc/os-release | cut -d= -f2- | tr -d '"')
OS Kernal : 5.4.17-2102.201.3.el7uek.x86_64 (uname -r)
Hostname : ol7ora12ss (hostname)
Public IP : 192.168.240.112 (getent ahostsv4 `hostname` | awk '{print $1; exit}')

 

--------------------옵저버 서버에서 아래의 작업은 이미 수행되어 있음 BEGIN--------------------
ifconfig 설치 (root os user)
wget, lsof, vim, unzip,traceroute, cronie(crontab, crond) 설치
selinux permissive로 설정
Oracle12cR2 Pre Install을 위한 필수 패키지 설치
Oracle12cR2 Pre Install 설치
rlwrap 라이브러리 설치
oracle os user 생성 및 ORACLE_HOME 디렉토리 생성
transparent_hugepage disable 및 disable 확인
systemd-logind 설정
tuned-adm 서비스 확인 및 설정(throughput-performance)
mask 가 0022인지 확인
java jdk 1.8 설치
--------------------옵저버 서버에서 아래의 작업은 이미 수행되어 있음 END--------------------

 

[ORA12RF1:oracle@ol7ora12ss][/home/oracle]$ cat ~oracle/.bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/.local/bin:$HOME/bin

export PATH
export TMP=/tmp
export TMPDIR=$TMP
export EDITOR=vi
export ORACLE_HOSTNAME=`hostname`
export ORACLE_BASE=/u01/app/oracle
export DB_HOME=$ORACLE_BASE/product/12c/client_1
export ORACLE_HOME=$DB_HOME
export ORACLE_TERM=xterm
export BASE_PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$BASE_PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export NLS_LANG=AMERICAN_KOREA.AL32UTF8
export NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'
export PS1='[\u@\h][$PWD]$ '
alias cdt='cd $ORACLE_HOME/network/admin'
alias cdb='cd $ORACLE_BASE'
alias cdo='cd $ORACLE_HOME'
alias cdod='cd $ORACLE_HOME/dbs'
alias cdos='cd /home/oracle/oracle_scripts'
alias cdoss='cd /home/oracle/os_scripts'
set -o vi
stty erase ^H
stty erase ^?


[root@ol7ora12ss][/root]$ cat ~root/.bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH
set -o vi
stty erase ^H
stty erase ^?
export PS1='[\u@\h][$PWD]$ '
export ORACLE_BASE=/u01/app/oracle
export DB_HOME=$ORACLE_BASE/product/12c/client_1
export BASE_PATH=/usr/sbin:$PATH
export PATH=:$BASE_PATH

 

https://edelivery.oracle.com/osdc/faces/SoftwareDelivery
--> 위 사이트에서 oracle 12cr2 client linux x86.64를 다운로드 함

 

--다운로드 받은 파일을 아래의 위치에 업로드 함 (oracle os user)
[ORA12RF1:oracle@ol7ora12ss][/home/oracle]$ ls -l oracle12cr2_client_linux_x86_64.zip
-rw-r--r--. 1 oracle oinstall 1258314437 Dec 18 00:50 oracle12cr2_client_linux_x86_64.zip


[oracle@ol7ora12ss][/home/oracle]$ mkdir -pv $ORACLE_HOME
mkdir: created directory ‘/u01/app/oracle/product/12c/client_1’

 

[root@ol7ora12ss][/root]$ mkdir -pv $DB_HOME
mkdir: created directory ‘/u01’
mkdir: created directory ‘/u01/app’
mkdir: created directory ‘/u01/app/oracle’
mkdir: created directory ‘/u01/app/oracle/product’
mkdir: created directory ‘/u01/app/oracle/product/12c’
mkdir: created directory ‘/u01/app/oracle/product/12c/client_1’

 

[root@ol7ora12ss][/root]$ chown -R oracle:oinstall /u01
[root@ol7ora12ss][/root]$ chmod -R 775 /u01


[oracle@ol7ora12ss][/home/oracle]$ unzip -q oracle12cr2_client_linux_x86_64.zip -d /u01/app/oracle
[oracle@ol7ora12ss][/home/oracle]$ cd /u01/app/oracle/client
[oracle@ol7ora12ss][/u01/app/oracle/client]$ ./runInstaller

Installation Type: Administrator 선택 (관리 도구 및 라이브러리 포함).
Oracle Base: /u01/app/oracle
Oracle Home: /u01/app/oracle/product/12c/client_1
Inventory Directory: /u01/app/oraInventory
orainventory Group Name  : oinstall
Prerequisite Checks: preinstall 패키지를 설치했다면 대부분 통과함
(Swap 부족 등 경미한 경고는 Ignore All 가능하나, 패키지 누락은 yum으로 해결해야함.)
Install: 설치 진행
/u01/app/oraInventory
Execute Root Scripts: 설치 완료 직전 팝업이 뜨면 Root 권한으로 별도 터미널에서 스크립트를 실행

 

[root@ol7ora12ss][/root]$ /u01/app/oraInventory/orainstRoot.sh
Changing permissions of /u01/app/oraInventory.
Adding read,write permissions for group.
Removing read,write,execute permissions for world.

Changing groupname of /u01/app/oraInventory to oinstall.
The execution of the script is complete.

 

[root@ol7ora12ss][/root]$ /u01/app/oracle/product/12c/client_1/root.sh
Performing root user operation.

The following environment variables are set as:
    ORACLE_OWNER= oracle
    ORACLE_HOME=  /u01/app/oracle/product/12c/client_1

Enter the full pathname of the local bin directory: [/usr/local/bin]:
   Copying dbhome to /usr/local/bin ...
   Copying oraenv to /usr/local/bin ...
   Copying coraenv to /usr/local/bin ...


Creating /etc/oratab file...
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.


[oracle@ol7ora12ss][/home/oracle]$ sqlplus

SQL*Plus: Release 12.2.0.1.0 Production on Thu Dec 18 10:56:40 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

Enter user-name:
--> 클라이언트 설치가 완료됨


[oracle@ol7ora12ss][/home/oracle]$ which opatch
/u01/app/oracle/product/12c/client_1/OPatch/opatch
[oracle@ol7ora12ss][/home/oracle]$ opatch lspatches
There are no Interim patches installed in this Oracle Home "/u01/app/oracle/product/12c/client_1".

OPatch succeeded.


[oracle@ol7ora12ss][/home/oracle]$ mkdir -pv /home/oracle/patch
mkdir: created directory ‘/home/oracle/patch’

[oracle@ol7ora12ss][/home/oracle/patch]$ ll
total 2467460
-rw-r--r--. 1 oracle oinstall 2393137641 Jun  4  2024 p33583921_122010_Linux-x86-64.zip
-rw-r--r--. 1 oracle oinstall  133535622 Jun  4  2024 p6880880_122010_Linux-x86-64.zip

 

[oracle@ol7ora12ss][/home/oracle/patch]$ mv $ORACLE_HOME/OPatch $ORACLE_HOME/OPatch.bak

 

--opatch 를 패치함
[oracle@ol7ora12ss][/home/oracle/patch]$ unzip -q p6880880_122010_Linux-x86-64.zip -d $ORACLE_HOME
[oracle@ol7ora12ss][/home/oracle/patch]$ which opatch
/u01/app/oracle/product/12c/client_1/OPatch/opatch

[oracle@ol7ora12ss][/home/oracle/patch]$ opatch version
OPatch Version: 12.2.0.1.42

OPatch succeeded.

[oracle@ol7ora12ss][/home/oracle/patch]$ unzip -q p33583921_122010_Linux-x86-64.zip

[oracle@ol7ora12ss][/home/oracle/patch]$ cd 33583921
[oracle@ol7ora12ss][/home/oracle/patch/33583921]$

[oracle@ol7ora12ss][/home/oracle/patch/33583921]$ cd 33587128
[oracle@ol7ora12ss][/home/oracle/patch/33583921/33587128]$

 

--패치 충돌 점검
[oracle@ol7ora12ss][/home/oracle/patch/33583921/33587128]$ $ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -ph ./
Oracle Interim Patch Installer version 12.2.0.1.42
Copyright (c) 2025, Oracle Corporation.  All rights reserved.

PREREQ session

Oracle Home       : /u01/app/oracle/product/12c/client_1
Central Inventory : /u01/app/oraInventory
   from           : /u01/app/oracle/product/12c/client_1/oraInst.loc
OPatch version    : 12.2.0.1.42
OUI version       : 12.2.0.1.4
Log file location : /u01/app/oracle/product/12c/client_1/cfgtoollogs/opatch/opatch2025-12-18_11-18-57AM_1.log

Invoking prereq "checkconflictagainstohwithdetail"

Prereq "checkConflictAgainstOHWithDetail" passed.

OPatch succeeded.

 

--패치 적용
[oracle@ol7ora12ss][/home/oracle/patch/33583921/33587128]$ $ORACLE_HOME/OPatch/opatch apply
Oracle Interim Patch Installer version 12.2.0.1.42
Copyright (c) 2025, Oracle Corporation.  All rights reserved.


Oracle Home       : /u01/app/oracle/product/12c/client_1
Central Inventory : /u01/app/oraInventory
   from           : /u01/app/oracle/product/12c/client_1/oraInst.loc
OPatch version    : 12.2.0.1.42
OUI version       : 12.2.0.1.4
Log file location : /u01/app/oracle/product/12c/client_1/cfgtoollogs/opatch/opatch2025-12-18_11-19-09AM_1.log

Verifying environment and performing prerequisite checks...
OPatch continues with these patches:   33587128

Do you want to proceed? [y|n]
y
User Responded with: Y
All checks passed.

Please shutdown Oracle instances running out of this ORACLE_HOME on the local system.
(Oracle Home = '/u01/app/oracle/product/12c/client_1')


Is the local system ready for patching? [y|n]
y
User Responded with: Y
Backing up files...
Applying interim patch '33587128' to OH '/u01/app/oracle/product/12c/client_1'
ApplySession: Optional component(s) [ oracle.rdbms, 12.2.0.1.0 ] , [ oracle.ctx, 12.2.0.1.0 ] , [ oracle.oraolap, 12.2.0.1.0 ] , [ oracle.sdo, 12.2.0.1.0 ] , [ oracle.sdo.locator, 12.2.0.1.0 ] , [ oracle.sdo.locator.jrf, 12.2.0.1.0 ] , [ oracle.swd, 12.2.0.1.0 ] , [ oracle.swd.oui, 12.2.0.1.0 ] , [ oracle.tfa, 12.2.0.1.0 ] , [ oracle.ctx.rsf, 12.2.0.1.0 ] , [ oracle.network.cman, 12.2.0.1.0 ] , [ oracle.network.gsm, 12.2.0.1.0 ] , [ oracle.rdbms.drdaas, 12.2.0.1.0 ] , [ oracle.ons.cclient, 12.2.0.1.0 ] , [ oracle.ons.daemon, 12.2.0.1.0 ] , [ oracle.ons.eons.bwcompat, 12.2.0.1.0 ] , [ oracle.dbtoolslistener, 12.2.0.1.0 ] , [ oracle.rdbms.dv, 12.2.0.1.0 ] , [ oracle.rdbms.lbac, 12.2.0.1.0 ] , [ oracle.assistants.server, 12.2.0.1.0 ] , [ oracle.oid.client, 12.2.0.1.0 ]  not present in the Oracle Home or a higher version is found.

Patching component oracle.rdbms.util, 12.2.0.1.0...

Patching component oracle.network.rsf, 12.2.0.1.0...

Patching component oracle.rdbms.rsf, 12.2.0.1.0...

Patching component oracle.has.common.cvu, 12.2.0.1.0...

Patching component oracle.ldap.owm, 12.2.0.1.0...

Patching component oracle.ldap.rsf, 12.2.0.1.0...

Patching component oracle.nlsrtl.rsf, 12.2.0.1.0...

Patching component oracle.oracore.rsf, 12.2.0.1.0...

Patching component oracle.rdbms.dbscripts, 12.2.0.1.0...

Patching component oracle.rdbms.deconfig, 12.2.0.1.0...

Patching component oracle.rdbms.rsf.ic, 12.2.0.1.0...

Patching component oracle.rdbms.install.plugins, 12.2.0.1.0...

Patching component oracle.rdbms.install.common, 12.2.0.1.0...

Patching component oracle.assistants.deconfig, 12.2.0.1.0...

Patching component oracle.ons.ic, 12.2.0.1.0...

Patching component oracle.rdbms.rman, 12.2.0.1.0...

Patching component oracle.precomp.rsf, 12.2.0.1.0...

Patching component oracle.install.deinstalltool, 12.2.0.1.0...

Patching component oracle.assistants.acf, 12.2.0.1.0...

Patching component oracle.rdbms.oci, 12.2.0.1.0...

Patching component oracle.sqlplus.ic, 12.2.0.1.0...

Patching component oracle.xdk.parser.java, 12.2.0.1.0...

Patching component oracle.ldap.rsf.ic, 12.2.0.1.0...

Patching component oracle.ons, 12.2.0.1.0...

Patching component oracle.ldap.client, 12.2.0.1.0...

Patching component oracle.xdk, 12.2.0.1.0...

Patching component oracle.xdk.rsf, 12.2.0.1.0...

Patching component oracle.sqlplus, 12.2.0.1.0...

Patching component oracle.rdbms.crs, 12.2.0.1.0...

Patching component oracle.precomp.common, 12.2.0.1.0...

Patching component oracle.precomp.lang, 12.2.0.1.0...

Patching component oracle.jdk, 1.8.0.91.0...
Patch 33587128 successfully applied.
Log file location: /u01/app/oracle/product/12c/client_1/cfgtoollogs/opatch/opatch2025-12-18_11-19-09AM_1.log

OPatch succeeded.

 

[oracle@ol7ora12ss][/home/oracle/patch/33583921/33678030]$ opatch lspatches
33587128;Database Jan 2022 Release Update : 12.2.0.1.220118 (33587128)

OPatch succeeded.

 

--여기까지 옵져버 서버에서 oracle client 를 설치하고 패치까지 적용함

 

17-2. 옵저버 서버 wallet 환경 구성

[oracle@ol7ora12ss][/home/oracle]$ vi $ORACLE_HOME/network/admin/tnsnames.ora
[oracle@ol7ora12ss][/home/oracle]$ cat $ORACLE_HOME/network/admin/tnsnames.ora
# Primary Database (RAC)
TNS_ORA12RF =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.240.14)(PORT = 1522))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.240.15)(PORT = 1522))
      (LOAD_BALANCE = OFF)
      (FAILOVER = ON)
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORA12RF)
      (FAILOVER_MODE = (TYPE = SELECT)(METHOD = BASIC))
    )
  )

# Standby Database (Single)
TNS_ORA12RF_STB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.240.111)(PORT = 1522))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORA12RF_STB)
    )
  )

 

--wallet 구성을 위한 sqlnet.ora 수정
[oracle@ol7ora12ss][/home/oracle]$ mkdir -p $ORACLE_HOME/network/admin/wallet
[oracle@ol7ora12ss][/home/oracle]$ vi $ORACLE_HOME/network/admin/sqlnet.ora
[oracle@ol7ora12ss][/home/oracle]$ cat $ORACLE_HOME/network/admin/sqlnet.ora
# sqlnet.ora Network Configuration File: /u01/app/oracle/product/12c/client_1/network/admin/sqlnet.ora
# Generated by Oracle configuration tools.

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
WALLET_LOCATION =
  (SOURCE =
    (METHOD = FILE)
    (METHOD_DATA =
      (DIRECTORY = /u01/app/oracle/product/12c/client_1/network/admin/wallet)
    )
  )

SQLNET.WALLET_OVERRIDE = TRUE
SSL_CLIENT_AUTHENTICATION = FALSE

 

--wallet 생성
[oracle@ol7ora12ss][/home/oracle]$ mkstore -wrl $ORACLE_HOME/network/admin/wallet -create
Oracle Secret Store Tool : Version 12.2.0.1.0
Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved.

Enter password:Password@1
Enter password again:Password@1

 

--wallet 저장 (TNS_ORA12RF 에 해당 wallet으로 비밀번호 없이 접속 가능)
[oracle@ol7ora12ss][/home/oracle]$ mkstore -wrl $ORACLE_HOME/network/admin/wallet -createCredential TNS_ORA12RF SYS "oracle"
Oracle Secret Store Tool : Version 12.2.0.1.0
Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved.

Enter wallet password:Password@1

--wallet 저장 (TNS_ORA12RF_STB 에 해당 wallet으로 비밀번호 없이 접속 가능)

[oracle@ol7ora12ss][/home/oracle]$ mkstore -wrl $ORACLE_HOME/network/admin/wallet -createCredential TNS_ORA12RF_STB SYS "oracle"
Oracle Secret Store Tool : Version 12.2.0.1.0
Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved.

Enter wallet password:Password@1


[oracle@ol7ora12ss][/home/oracle]$ mkstore -wrl $ORACLE_HOME/network/admin/wallet -listCredential
Oracle Secret Store Tool : Version 12.2.0.1.0
Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved.

Enter wallet password:Password@1
List credential (index: connect_string username)
2: TNS_ORA12RF_STB SYS
1: TNS_ORA12RF SYS


[oracle@ol7ora12ss][/home/oracle]$ sqlplus /@TNS_ORA12RF as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on Thu Dec 18 11:43:17 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

 

--> 비밀번호를 묻지 않고 바로 접속됨을 확인
SQL> SELECT DATABASE_ROLE FROM V$DATABASE;

DATABASE_ROLE
------------------------------------------------
PRIMARY


[oracle@ol7ora12ss][/home/oracle]$ sqlplus /@TNS_ORA12RF_STB as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on Thu Dec 18 11:43:43 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

--> 비밀번호를 묻지 않고 바로 접속됨을 확인
SQL> SELECT DATABASE_ROLE FROM V$DATABASE;

DATABASE_ROLE
------------------------------------------------
PHYSICAL STANDBY

 

17-3. FSFO 설정

 

--Primary 서버에서 실행 (oracle os user)
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ alias dg

alias dg='rlwrap dgmgrl sys/oracle@TNS_ORA12RF_STB'

 

DGMGRL> EDIT DATABASE 'ORA12RF' SET PROPERTY FastStartFailoverTarget = 'ora12rf_stb';
Property "faststartfailovertarget" updated

DGMGRL> EDIT DATABASE 'ora12rf_stb' SET PROPERTY FastStartFailoverTarget = 'ORA12RF';
Property "faststartfailovertarget" updated

 

DGMGRL> EDIT CONFIGURATION SET PROPERTY FastStartFailoverThreshold = 30;
Property "faststartfailoverthreshold" updated

DGMGRL> EDIT CONFIGURATION SET PROPERTY FastStartFailoverLagLimit = 30;

Property "FastStartFailoverLagLimit" updated

 

17-4. FSFO 실행 (옵저버 띄우기)

 

[oracle@ol7ora12ss][/home/oracle]$ mkdir -p /home/oracle/os_scripts
[oracle@ol7ora12ss][/home/oracle]$ vi /home/oracle/os_scripts/start_observer.sh
[oracle@ol7ora12ss][/home/oracle]$ cat /home/oracle/os_scripts/start_observer.sh
#!/bin/bash
export ORACLE_HOME=/u01/app/oracle/product/12c/client_1
export PATH=$ORACLE_HOME/bin:$PATH
export TNS_ADMIN=$ORACLE_HOME/network/admin

LOG_DIR=/home/oracle/os_scripts/observer_logs
mkdir -p $LOG_DIR
LOG_FILE=$LOG_DIR/observer_$(date +%Y%m%d).log

nohup dgmgrl /@TNS_ORA12RF "START OBSERVER" >> $LOG_FILE 2>&1 &

 

[oracle@ol7ora12ss][/home/oracle]$ chmod 775 /home/oracle/os_scripts/start_observer.sh

[oracle@ol7ora12ss][/home/oracle]$ /home/oracle/os_scripts/start_observer.sh
[oracle@ol7ora12ss][/home/oracle]$ ps -ef | grep dgmgrl

oracle    8182     1  0 11:57 pts/8    00:00:00 dgmgrl               START OBSERVER
oracle    8342  6638  0 11:57 pts/8    00:00:00 grep --color=auto dgmgrl

 

[oracle@ol7ora12ss][/home/oracle]$ cd /home/oracle/os_scripts/observer_logs
[oracle@ol7ora12ss][/home/oracle/os_scripts/observer_logs]$ ls -alrt
total 4
drwxr-xr-x. 3 oracle oinstall  52 Dec 18 11:57 ..
drwxr-xr-x. 2 oracle oinstall  35 Dec 18 11:57 .
-rw-r--r--. 1 oracle oinstall 416 Dec 18 11:57 observer_20251218.log

 

[oracle@ol7ora12ss][/home/oracle/os_scripts/observer_logs]$ tail -f observer_20251218.log
DGMGRL for Linux: Release 12.2.0.1.0 - Production on Thu Dec 18 11:57:45 2025

Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.

Welcome to DGMGRL, type "help" for information.
Connected to "ORA12RF"
Connected as SYSDBA.

[W000 12/18 11:57:47.76] Observer trace level is set to USER
[W000 12/18 11:57:47.77] Fast-Start Failover is not enabled or can't be checked. Retry after 30 seconds.
[W000 12/18 11:58:17.78] Fast-Start Failover is not enabled or can't be checked. Retry after 30 seconds.


17-5. FSFO 활성화

 

--Primary 및 Standby가 플래시백 데이터베이스 인지 확인

--Primary DB 확인
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ alias ss

alias ss='rlwrap sqlplus "/as sysdba"'

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Thu Dec 18 12:00:57 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

[ol7ora12rf1]<SYS@ORA12RF1>$
col DB_UNIQUE_NAME for a20
col FLASHBACK_ON for a15
SELECT DB_UNIQUE_NAME
     , FLASHBACK_ON
  FROM V$DATABASE;

DB_UNIQUE_NAME       FLASHBACK_ON
-------------------- ---------------
ORA12RF              YES

1 row selected.

Elapsed: 00:00:00.00


--Standby DB 확인
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Thu Dec 18 11:59:26 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

[ol7ora12sf]<SYS@ORA12RF>$

col DB_UNIQUE_NAME for a20
col FLASHBACK_ON for a15
SELECT DB_UNIQUE_NAME
     , FLASHBACK_ON
  FROM V$DATABASE;

DB_UNIQUE_NAME       FLASHBACK_ON
-------------------- ---------------
ORA12RF_STB          YES

1 row selected.

Elapsed: 00:00:00.00

--> 만약 플래시백 데이터베이스가 비활성화 되어 있다면

-------------------------------------------아래의 절차를 통해 flashback database를 활성화 시킴 BEGIN-------------------------------------------
[ol7ora12sf]<SYS@ORA12RF>$ shutdown immediate;
[ol7ora12sf]<
SYS@ORA12RF>$ STARTUP MOUNT;
[ol7ora12sf]<
SYS@ORA12RF>$ show parameter DB_FLASHBACK_RETENTION_TARGET

[ol7ora12sf]<SYS@ORA12RF>$
SELECT PROCESS, STATUS, SEQUENCE#
  FROM V$MANAGED_STANDBY
 WHERE PROCESS LIKE 'MRP%';

PROCESS                     STATUS                                SEQUENCE#
--------------------------- ------------------------------------ ----------
MRP0                        APPLYING_LOG                                 16

[ol7ora12sf]<SYS@ORA12RF>$ ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
[ol7ora12sf]<
SYS@ORA12RF>$ ALTER DATABASE FLASHBACK ON;
[ol7ora12sf]<
SYS@ORA12RF>$ ALTER DATABASE OPEN read only;

[ol7ora12sf]<SYS@ORA12RF>$
col DB_UNIQUE_NAME for a20
col FLASHBACK_ON for a15
SELECT DB_UNIQUE_NAME
     , FLASHBACK_ON
  FROM V$DATABASE;

DB_UNIQUE_NAME       FLASHBACK_ON
-------------------- ---------------
ORA12RF_STB          YES

[ol7ora12sf]<SYS@ORA12RF>$ ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

SELECT PROCESS, STATUS, SEQUENCE#
  FROM V$MANAGED_STANDBY
 WHERE PROCESS LIKE 'MRP%';
-------------------------------------------아래의 절차를 통해 flashback database를 활성화 시킴 END-------------------------------------------

 

--Primary 서버에서 활성화
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ alias dg

alias dg='rlwrap dgmgrl sys/oracle@TNS_ORA12RF_STB'
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ dg
DGMGRL for Linux: Release 12.2.0.1.0 - Production on Thu Dec 18 11:51:07 2025

Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.

Welcome to DGMGRL, type "help" for information.
Connected to "ORA12RF_STB"
Connected as SYSDBA.
DGMGRL> ENABLE FAST_START FAILOVER;

Enabled.
DGMGRL> SHOW CONFIGURATION;

Configuration - ORA12RF_DG

  Protection Mode: MaxPerformance
  Members:
  ORA12RF     - Primary database
    ora12rf_stb - (*) Physical standby database

Fast-Start Failover: ENABLED

Configuration Status:
SUCCESS   (status updated 39 seconds ago)

DGMGRL> SHOW DATABASE 'ora12rf_stb';

Database - ora12rf_stb

  Role:               PHYSICAL STANDBY
  Intended State:     APPLY-ON
  Transport Lag:      0 seconds (computed 1 second ago)
  Apply Lag:          0 seconds (computed 1 second ago)
  Average Apply Rate: 72.00 KByte/s
  Real Time Query:    ON
  Instance(s):
    ORA12RF

Database Status:
SUCCESS

 

17-6. FSFO 동작 테스트

 

--옵져버 서버에서 옵져버가 잘 떠 있는지 확인
[oracle@ol7ora12ss][/home/oracle/os_scripts]$ alias cdoss
alias cdoss='cd /home/oracle/os_scripts'

[oracle@ol7ora12ss][/home/oracle/os_scripts]$ ls
observer_logs  start_observer.sh

[oracle@ol7ora12ss][/home/oracle/os_scripts]$ cd observer_logs/

[oracle@ol7ora12ss][/home/oracle/os_scripts/observer_logs]$ ls
observer_20251218.log

 

[oracle@ol7ora12ss][/home/oracle/os_scripts/observer_logs]$ tail -f observer_20251218.log
[W000 12/18 12:05:47.89] Fast-Start Failover is not enabled or can't be checked. Retry after 30 seconds.
[W000 12/18 12:06:17.90] Fast-Start Failover is not enabled or can't be checked. Retry after 30 seconds.
[W000 12/18 12:06:47.91] Fast-Start Failover is not enabled or can't be checked. Retry after 30 seconds.
[W000 12/18 12:07:19.92] Try to connect to the primary.
[W000 12/18 12:08:12.06] Fast-Start Failover is disabled.
[W000 12/18 12:08:12.07] Fast-Start Failover is not enabled or can't be checked. Retry after 30 seconds.
[W000 12/18 12:08:42.07] Fast-Start Failover is not enabled or can't be checked. Retry after 30 seconds.
[W000 12/18 12:09:12.08] Fast-Start Failover is not enabled or can't be checked. Retry after 30 seconds.
[W000 12/18 12:09:42.09] Fast-Start Failover is not enabled or can't be checked. Retry after 30 seconds.
[W000 12/18 12:10:12.09] Try to connect to the primary.

'

 

--Primary DB 상태 확인
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ crsctl stat res ora.ora12rf.db -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.ora12rf.db
      1        ONLINE  ONLINE       ol7ora12rf1              Open,HOME=/u01/app/o
                                                             racle/product/12c/db
                                                             _1,STABLE
      2        ONLINE  ONLINE       ol7ora12rf2              Open,HOME=/u01/app/o
                                                             racle/product/12c/db
                                                             _1,STABLE
--------------------------------------------------------------------------------

 

--Standby DB 상태 확인
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ crsctl stat res ora.ora12rf_stb.db  -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.ora12rf_stb.db
      1        ONLINE  ONLINE       ol7ora12sf               Open,Readonly,HOME=/
                                                             u01/app/oracle/produ
                                                             ct/12c/db_1,STABLE
--------------------------------------------------------------------------------

 

--Primary DB의 RAC 1번 2번 노드를 동시에 abort로 내림
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ srvctl stop database -db ORA12RF -stopoption abort

 

--옵져버 로그 확인
[W000 12/18 12:21:24.43] Primary database cannot be reached.
[W000 12/18 12:21:24.43] Fast-Start Failover threshold has not exceeded. Retry for the next 3 seconds
[W000 12/18 12:21:25.43] Try to connect to the primary.
Unable to connect to database using tns_ora12rf
ORA-12514: TNS:listener does not currently know of service requested in connect descriptor

[W000 12/18 12:21:25.44] Primary database cannot be reached.
[W000 12/18 12:21:25.44] Fast-Start Failover threshold has not exceeded. Retry for the next 2 seconds
[W000 12/18 12:21:26.44] Try to connect to the primary.
Unable to connect to database using tns_ora12rf
ORA-12514: TNS:listener does not currently know of service requested in connect descriptor

[W000 12/18 12:21:26.44] Primary database cannot be reached.
[W000 12/18 12:21:26.44] Fast-Start Failover threshold has not exceeded. Retry for the next 1 second
[W000 12/18 12:21:27.44] Try to connect to the primary.
Unable to connect to database using tns_ora12rf
ORA-12514: TNS:listener does not currently know of service requested in connect descriptor

[W000 12/18 12:21:27.45] Primary database cannot be reached.
[W000 12/18 12:21:27.45] Fast-Start Failover threshold has expired.
[W000 12/18 12:21:27.45] Try to connect to the standby.
[W000 12/18 12:21:27.45] Making a last connection attempt to primary database before proceeding with Fast-Start Failover.
[W000 12/18 12:21:27.45] Check if the standby is ready for failover.
Unable to connect to database using tns_ora12rf
ORA-12514: TNS:listener does not currently know of service requested in connect descriptor

[S002 12/18 12:21:27.45] Fast-Start Failover started...

12:21:27.45  2025년 12월 18일 thursday
Initiating Fast-Start Failover to database "ora12rf_stb"...
[S002 12/18 12:21:27.45] Initiating Fast-start Failover.
Performing failover NOW, please wait...
Failover succeeded, new primary is "ora12rf_stb"
12:21:32.65  2025년 12월 18일 thursday
[S002 12/18 12:21:32.65] Fast-Start Failover finished...
[W000 12/18 12:21:32.65] Failover succeeded. Restart pinging.
[W000 12/18 12:21:32.65] Primary database has changed to ora12rf_stb.
[W000 12/18 12:21:32.66] Try to connect to the primary.
[W000 12/18 12:21:32.66] Try to connect to the primary tns_ora12rf_stb.
[W000 12/18 12:21:33.90] The standby ORA12RF needs to be reinstated
[W000 12/18 12:21:33.90] Try to connect to the new standby ORA12RF.
Unable to connect to database using tns_ora12rf
ORA-12514: TNS:listener does not currently know of service requested in connect descriptor

[W000 12/18 12:21:39.90] Connection to the primary restored!
[W000 12/18 12:21:41.91] Disconnecting from database tns_ora12rf_stb.


--old Standby가 새로운 Primary가 됨
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ crsctl stat res ora.ora12rf_stb.db  -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.ora12rf_stb.db
      1        ONLINE  ONLINE       ol7ora12sf               Open,HOME=/u01/app/o
                                                             racle/product/12c/db
                                                             _1,STABLE
--------------------------------------------------------------------------------
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$

 

--old Standby(-새로운 Primary)에서 다시 Reinstate
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ alias dg
alias dg='rlwrap dgmgrl sys/oracle@TNS_ORA12RF_STB'

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ dg
DGMGRL for Linux: Release 12.2.0.1.0 - Production on Thu Dec 18 12:23:51 2025

Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.

Welcome to DGMGRL, type "help" for information.
Connected to "ORA12RF_STB"
Connected as SYSDBA.
DGMGRL> SHOW CONFIGURATION;

Configuration - ORA12RF_DG

  Protection Mode: MaxPerformance
  Members:
  ora12rf_stb - Primary database
    Warning: ORA-16824: multiple warnings, including fast-start failover-related warnings, detected for the database

    ORA12RF     - (*) Physical standby database (disabled)
      ORA-16661: the standby database needs to be reinstated

Fast-Start Failover: ENABLED

Configuration Status:
WARNING   (status updated 4 seconds ago)

DGMGRL>


--old Primary 서버(=new Standby)를 mount모드로 기동
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ srvctl start database -db ORA12RF -startoption mount
--> Mount 상태로 시작 (Observer가 감지하여 자동으로 Reinstate 수행함)

 

--옵져버 로그
[W000 12/18 12:29:36.39] Connection to the new standby restored!
[W000 12/18 12:30:07.43] Try to connect to the primary tns_ora12rf_stb.
[W000 12/18 12:30:09.43] Connection to the primary restored!
[W000 12/18 12:30:09.43] Wait for new primary to be ready to reinstate.
[W000 12/18 12:30:10.43] New primary is now ready to reinstate.
[W000 12/18 12:30:11.43] Issuing REINSTATE command.

12:30:11.43  2025년 12월 18일 thursday
Initiating reinstatement for database "ORA12RF"...
Reinstating database "ORA12RF", please wait...
[W000 12/18 12:30:30.45] The standby ORA12RF is ready to be a FSFO target
Reinstatement of database "ORA12RF" succeeded
12:30:33.66  2025년 12월 18일 thursday
[W000 12/18 12:30:34.46] Successfully reinstated database ORA12RF.
[W000 12/18 12:30:36.46] The reinstatement of standby ORA12RF was just done

 

--old Primary 서버(=new Standby) 가 reinstate 되어 read only 모드의 Standby DB가 됨
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ crsctl stat res ora.ora12rf.db -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.ora12rf.db
      1        ONLINE  ONLINE       ol7ora12rf1              Open,Readonly,HOME=/
                                                             u01/app/oracle/produ
                                                             ct/12c/db_1,STABLE
      2        ONLINE  ONLINE       ol7ora12rf2              Open,Readonly,HOME=/
                                                             u01/app/oracle/produ
                                                             ct/12c/db_1,STABLE
--------------------------------------------------------------------------------

 

--다시 old Primary 서버(=new Standby) 를 Primary로 Switch over 시킴
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ alias dg
alias dg='rlwrap dgmgrl sys/oracle@TNS_ORA12RF'
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ dg
DGMGRL for Linux: Release 12.2.0.1.0 - Production on Thu Dec 18 12:34:02 2025

Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.

Welcome to DGMGRL, type "help" for information.
Connected to "ORA12RF"
Connected as SYSDBA.
DGMGRL> show configuration

Configuration - ORA12RF_DG

  Protection Mode: MaxPerformance
  Members:
  ora12rf_stb - Primary database
    ORA12RF     - (*) Physical standby database

Fast-Start Failover: ENABLED

Configuration Status:
SUCCESS   (status updated 25 seconds ago)

 

DGMGRL> SWITCHOVER TO 'ORA12RF';

 

DGMGRL> show configuration

Configuration - ORA12RF_DG

  Protection Mode: MaxPerformance
  Members:
  ORA12RF     - Primary database
    ora12rf_stb - (*) Physical standby database

Fast-Start Failover: ENABLED

Configuration Status:
SUCCESS   (status updated 24 seconds ago)


--옵져버 로그
[W000 12/18 12:34:46.76] Primary database has changed to ORA12RF.
[W000 12/18 12:34:46.76] Try to connect to the primary.
[W000 12/18 12:34:46.76] Try to connect to the primary tns_ora12rf.
[W000 12/18 12:34:48.76] Connection to the primary restored!
[W000 12/18 12:34:50.76] Disconnecting from database tns_ora12rf.
[W000 12/18 12:34:56.10] The standby ora12rf_stb is ready to be a FSFO target


17-7. FSFO 설정 환경에서 ADG 환경 재기동

 

--FSFO(Fast-Start Failover)가 ENABLED 상태인 환경에서 시스템 점검, OS 패치 등을 위해 전체 데이터베이스(Primary, Standby)를 재기동할 때는 순서가 매우 중요
--[절대 주의] Observer가 실행 중인 상태에서 Primary DB를 먼저 종료(SHUTDOWN)하면,
--Observer는 이를 장애로 인식하여 즉시 Standby로 Failover를 시도합니다. 이를 방지하기 위해 반드시 아래 절차를 따라야 함


--옵져버 kill 시키기
[oracle@ol7ora12ss][/home/oracle]$ ps -ef | grep -i dgmgrl
oracle    5385  5067  0 12:44 pts/1    00:00:00 grep --color=auto -i dgmgrl
oracle    8182     1  0 11:57 ?        00:00:02 dgmgrl               START OBSERVER
[oracle@ol7ora12ss][/home/oracle]$ kill -9 8182

 

--Primary DB 종료
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ srvctl stop database -db ORA12RF -stopoption immediate

 

--Standby DB 종료
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ srvctl stop database -db ORA12RF_STB -stopoption immediate

 

--재시작하기
--기동할 때는 Standby -> Primary -> Observer 순서를 권장합니다.
--Standby가 먼저 떠 있어야 Primary가 열릴 때 아카이브 전송 경로 오류 없이 깔끔하게 연결됩니다.
--Standby DB 부터 시작
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ srvctl start database -db ORA12RF_STB

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'


[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Thu Dec 18 12:46:56 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

[ol7ora12sf]<SYS@ORA12RF>$ SELECT OPEN_MODE, DATABASE_ROLE FROM V$DATABASE;

OPEN_MODE                                                    DATABASE_ROLE
------------------------------------------------------------ ------------------------------------------------
READ ONLY WITH APPLY                                         PHYSICAL STANDBY

1 row selected.

Elapsed: 00:00:00.01


--Primary DB 올리기
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ srvctl start database -db ORA12RF

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Thu Dec 18 12:48:22 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

[ol7ora12rf1]<SYS@ORA12RF1>$ SELECT OPEN_MODE, DATABASE_ROLE FROM V$DATABASE;

OPEN_MODE                                                    DATABASE_ROLE
------------------------------------------------------------ ------------------------------------------------
READ WRITE                                                   PRIMARY

1 row selected.

Elapsed: 00:00:00.01

 

--옵져버 기동
[oracle@ol7ora12ss][/home/oracle]$ /home/oracle/os_scripts/start_observer.sh
[oracle@ol7ora12ss][/home/oracle]$ tail -f /home/oracle/os_scripts/observer_logs/observer_*.log
[W000 12/18 12:34:56.10] The standby ora12rf_stb is ready to be a FSFO target
DGMGRL for Linux: Release 12.2.0.1.0 - Production on Thu Dec 18 12:48:44 2025

Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.

Welcome to DGMGRL, type "help" for information.
Connected to "ORA12RF"
Connected as SYSDBA.
[W000 12/18 12:48:48.62] Observer trace level is set to USER
[W000 12/18 12:48:48.62] Try to connect to the primary.

 

18. 스냅샷 스탠바이 테스트

 

--Oracle Data Guard의 Snapshot Standby(스냅샷 스탠바이) 기능은 물리적 스탠바이 데이터베이스(Physical Standby)를
--일시적으로 읽기/쓰기(Read-Write) 모드로 전환하여 테스트, 개발 또는 업그레이드 검증 용도로 활용할 수 있게 해주는 기능임.
--전환된 동안에도 Primary로부터 Redo 데이터를 계속 수신하여 데이터 보호를 유지하며,
--다시 물리적 스탠바이로 전환할 때 Flashback 기술을 사용하여 스냅샷 기간의 변경 사항을 모두 취소함

 

18-1. Standby DB가 Flashbask Databse 설정이 되어 있는지 확인 (oracle os user)

 

[ol7ora12sf]<SYS@ORA12RF>$ col db_unique_name for a20
[ol7ora12sf]<
SYS@ORA12RF>$ col open_mode for a20
[ol7ora12sf]<
SYS@ORA12RF>$ col flashback_on for a20
[ol7ora12sf]<
SYS@ORA12RF>$ select db_unique_name, open_mode, flashback_on from v$database;

DB_UNIQUE_NAME       OPEN_MODE            FLASHBACK_ON
-------------------- -------------------- --------------------
ORA12RF_STB          READ ONLY WITH APPLY YES

1 row selected.

Elapsed: 00:00:00.00

 

18-2. FSFO 비활성화 (oracle os user)

 

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ alias dg
alias dg='rlwrap dgmgrl sys/oracle@TNS_ORA12RF_STB'
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ dg
DGMGRL for Linux: Release 12.2.0.1.0 - Production on Thu Dec 18 15:14:33 2025

Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.

Welcome to DGMGRL, type "help" for information.
Connected to "ORA12RF_STB"
Connected as SYSDBA.
DGMGRL> show configuration;

Configuration - ORA12RF_DG

  Protection Mode: MaxPerformance
  Members:
  ORA12RF     - Primary database
    ora12rf_stb - (*) Physical standby database

Fast-Start Failover: ENABLED

Configuration Status:
SUCCESS   (status updated 46 seconds ago)

DGMGRL> DISABLE FAST_START FAILOVER;
Disabled.

DGMGRL> show configuration;

Configuration - ORA12RF_DG

  Protection Mode: MaxPerformance
  Members:
  ORA12RF     - Primary database
    ora12rf_stb - Physical standby database

Fast-Start Failover: DISABLED

Configuration Status:
SUCCESS   (status updated 7 seconds ago)

 

18-3. Standby DB를 Snapshot Standby로 설정

 

DGMGRL> validate database "ORA12RF";

  Database Role:    Primary database

  Ready for Switchover:  Yes

  Managed by Clusterware:
    ORA12RF:  YES

 

DGMGRL> validate database "ora12rf_stb";

  Database Role:     Physical standby database
  Primary Database:  ORA12RF

  Ready for Switchover:  Yes
  Ready for Failover:    Yes (Primary Running)

  Capacity Information:
    Database     Instances        Threads
    ORA12RF      2                2
    ora12rf_stb  1                2
    Warning: the target standby has fewer instances than the
    primary database, this may impact application performance

  Managed by Clusterware:
    ORA12RF    :  YES
    ora12rf_stb:  YES

 

DGMGRL> CONVERT DATABASE "ora12rf_stb" TO SNAPSHOT STANDBY;
Converting database "ora12rf_stb" to a Snapshot Standby database, please wait...
Database "ora12rf_stb" converted successfully

 

DGMGRL> SHOW DATABASE "ora12rf_stb";

Database - ora12rf_stb

  Role:               SNAPSHOT STANDBY
  Transport Lag:      0 seconds (computed 1 second ago)
  Apply Lag:          26 seconds (computed 1 second ago)
  Instance(s):
    ORA12RF

Database Status:
SUCCESS

 

18-4. Snapshot Standby에서 DML 테스트

 

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Thu Dec 18 15:19:42 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

[ol7ora12sf]<SYS@ORA12RF>$ SELECT DATABASE_ROLE, OPEN_MODE FROM V$DATABASE;

DATABASE_ROLE                                    OPEN_MODE
------------------------------------------------ ------------------------------------------------------------
SNAPSHOT STANDBY                                 READ WRITE

1 row selected.

Elapsed: 00:00:00.01

[ol7ora12sf]<SYS@ORA12RF>$
CREATE TABLE TUNER.TB_SNAPSHOT_STANDBY_TEST_01
(
    SNAPSHOT_STANDBY_TEST_01 NUMBER(15)
)
;

INSERT INTO TUNER.TB_SNAPSHOT_STANDBY_TEST_01
SELECT (SELECT NVL(MAX(SNAPSHOT_STANDBY_TEST_01), 0) FROM TUNER.TB_SNAPSHOT_STANDBY_TEST_01)+LEVEL FROM DUAL CONNECT BY LEVEL <= 1000000
;

COMMIT;

 

18-5. Snapshot Standby를 Physical Standby로 다시 전환

 

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ alias dg
alias dg='rlwrap dgmgrl sys/oracle@TNS_ORA12RF_STB'
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ dg
DGMGRL for Linux: Release 12.2.0.1.0 - Production on Thu Dec 18 15:21:14 2025

Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.

Welcome to DGMGRL, type "help" for information.
Connected to "ORA12RF_STB"
Connected as SYSDBA.

 

DGMGRL> show configuration;

Configuration - ORA12RF_DG

  Protection Mode: MaxPerformance
  Members:
  ORA12RF     - Primary database
    ora12rf_stb - Snapshot standby database

Fast-Start Failover: DISABLED

Configuration Status:
SUCCESS   (status updated 48 seconds ago)

 

DGMGRL> convert database "ora12rf_stb" to physical standby;
Converting database "ora12rf_stb" to a Physical Standby database, please wait...
Operation requires a connection to database "ORA12RF"
Connecting ...
Connected to "ORA12RF"
Connected as SYSDBA.
Oracle Clusterware is restarting database "ora12rf_stb" ...
Connected to "ORA12RF_STB"
Connected to "ORA12RF_STB"
Continuing to convert database "ora12rf_stb" ...
Database "ora12rf_stb" converted successfully

[ol7ora12sf]<SYS@ORA12RF>$ SELECT * FROM TUNER.TB_SNAPSHOT_STANDBY_TEST_01;
SELECT * FROM TUNER.TB_SNAPSHOT_STANDBY_TEST_01
                    *
ERROR at line 1:
ORA-00942: table or view does not exist


Elapsed: 00:00:00.01
--> 테이블 사라짐

 

18-6. FSFO를 다시 활성화

 

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ alias dg
alias dg='rlwrap dgmgrl sys/oracle@TNS_ORA12RF'
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ dg
DGMGRL for Linux: Release 12.2.0.1.0 - Production on Thu Dec 18 23:55:13 2025

Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.

Welcome to DGMGRL, type "help" for information.
Connected to "ORA12RF"
Connected as SYSDBA.
DGMGRL> ENABLE FAST_START FAILOVER;

Enabled.
DGMGRL> SHOW FAST_START FAILOVER;

Fast-Start Failover: ENABLED

  Threshold:          30 seconds
  Target:             ora12rf_stb
  Observer:           ol7ora12ss
  Lag Limit:          30 seconds
  Shutdown Primary:   TRUE
  Auto-reinstate:     TRUE
  Observer Reconnect: (none)
  Observer Override:  FALSE

Configurable Failover Conditions
  Health Conditions:
    Corrupted Controlfile          YES
    Corrupted Dictionary           YES
    Inaccessible Logfile            NO
    Stuck Archiver                  NO
    Datafile Write Errors          YES

  Oracle Error Conditions:
    (none)

 

19. ADG 및 FSFO 구성 해제

 

19-1. FSFO 비활성화 (Primary 서버 - oracle user)

 

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ alias dg
alias dg='rlwrap dgmgrl sys/oracle@TNS_ORA12RF'
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ dg
DGMGRL for Linux: Release 12.2.0.1.0 - Production on Sat Dec 20 00:34:15 2025

Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.

Welcome to DGMGRL, type "help" for information.
Connected to "ORA12RF"
Connected as SYSDBA.

DGMGRL> DISABLE FAST_START FAILOVER;
Disabled.
DGMGRL>
DGMGRL> SHOW CONFIGURATION;

Configuration - ORA12RF_DG

  Protection Mode: MaxPerformance
  Members:
  ORA12RF     - Primary database
    ora12rf_stb - Physical standby database

Fast-Start Failover: DISABLED

Configuration Status:
SUCCESS   (status updated 10 seconds ago)

DGMGRL> REMOVE CONFIGURATION;
Removed configuration

 

19-2. 옵져버 프로세스 중지 (옵져버 서버)

 

[oracle@ol7ora12ss][/home/oracle]$ ps -ef | grep -i observer
oracle    2920     1  0 Dec18 ?        00:01:39 dgmgrl               START OBSERVER
oracle    9545  7071  0 00:36 pts/0    00:00:00 grep --color=auto -i observer
[oracle@ol7ora12ss][/home/oracle]$ kill -9 2920
[oracle@ol7ora12ss][/home/oracle]$ ps -ef | grep -i observer

oracle    9783  7071  0 00:36 pts/0    00:00:00 grep --color=auto -i observer

[oracle@ol7ora12ss][/home/oracle]$ cdoss
[oracle@ol7ora12ss][/home/oracle/os_scripts]$ ll
total 4
drwxr-xr-x. 2 oracle oinstall  35 Dec 18 11:57 observer_logs
-rwxrwxr-x. 1 oracle oinstall 324 Dec 18 11:57 start_observer.sh
[oracle@ol7ora12ss][/home/oracle/os_scripts]$ rm -rf observer_logs

 

--옵져버 서버의 wallet 설정 해제
[oracle@ol7ora12ss][/u01/app/oracle/product/12c/client_1/network/admin]$ vi sqlnet.ora
[oracle@ol7ora12ss][/u01/app/oracle/product/12c/client_1/network/admin]$ cat sqlnet.ora
# sqlnet.ora Network Configuration File: /u01/app/oracle/product/12c/client_1/network/admin/sqlnet.ora
# Generated by Oracle configuration tools.

#NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
#WALLET_LOCATION =
#  (SOURCE =
#    (METHOD = FILE)
#    (METHOD_DATA =
#      (DIRECTORY = /u01/app/oracle/product/12c/client_1/network/admin/wallet)
#    )
#  )

#SQLNET.WALLET_OVERRIDE = TRUE
#SSL_CLIENT_AUTHENTICATION = FALSE

 

[oracle@ol7ora12ss][/u01/app/oracle/product/12c/client_1/network/admin]$ cd wallet
[oracle@ol7ora12ss][/u01/app/oracle/product/12c/client_1/network/admin/wallet]$ ll
total 8
-rw-------. 1 oracle oinstall 957 Dec 18 11:42 cwallet.sso
-rw-------. 1 oracle oinstall   0 Dec 18 11:41 cwallet.sso.lck
-rw-------. 1 oracle oinstall 912 Dec 18 11:42 ewallet.p12
-rw-------. 1 oracle oinstall   0 Dec 18 11:41 ewallet.p12.lck

[oracle@ol7ora12ss][/u01/app/oracle/product/12c/client_1/network/admin/wallet]$ cd ..
[oracle@ol7ora12ss][/u01/app/oracle/product/12c/client_1/network/admin]$ rm -rf wallet

[oracle@ol7ora12ss][/u01/app/oracle/product/12c/client_1/network/admin]$ vi tnsnames.ora
[oracle@ol7ora12ss][/u01/app/oracle/product/12c/client_1/network/admin]$ cat tnsnames.ora

# Primary Database (RAC)
#TNS_ORA12RF =
#  (DESCRIPTION =
#    (ADDRESS_LIST =
#      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.240.14)(PORT = 1522))
#      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.240.15)(PORT = 1522))
#      (LOAD_BALANCE = OFF)
#      (FAILOVER = ON)
#    )
#    (CONNECT_DATA =
#      (SERVER = DEDICATED)
#      (SERVICE_NAME = ORA12RF)
#      (FAILOVER_MODE = (TYPE = SELECT)(METHOD = BASIC))
#    )
#  )

# Standby Database (Single)
#TNS_ORA12RF_STB =
#  (DESCRIPTION =
#    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.240.111)(PORT = 1522))
#    (CONNECT_DATA =
#      (SERVER = DEDICATED)
#      (SERVICE_NAME = ORA12RF_STB)
#    )
#  )

 

19-3. DG Broker 프로세스 중지 (Primary & Standby 양쪽)

 

--primary
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Sat Dec 20 00:37:37 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

 

[ol7ora12rf1]<SYS@ORA12RF1>$ show parameter broker

NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
connection_brokers                   string                            ((TYPE=DEDICATED)(BROKERS=1)),
                                                                        ((TYPE=EMON)(BROKERS=1))
dg_broker_config_file1               string                            +DATA1/ADG/dr1ora12rf.dat
dg_broker_config_file2               string                            +DATA1/ADG/dr2ora12rf.dat
dg_broker_start                      boolean                           TRUE
use_dedicated_broker                 boolean                           FALSE


[ol7ora12rf1]<SYS@ORA12RF1>$ ALTER SYSTEM SET DG_BROKER_START=FALSE SCOPE=BOTH SID='*';

System altered.

Elapsed: 00:00:06.03

 

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle/oracle_scripts]$ cdos
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle/oracle_scripts]$ ls -l adg_par.sql
-rwxr--r--. 1 oracle oinstall 885 Dec  7 20:08 adg_par.sql

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle/oracle_scripts]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle/oracle_scripts]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Sat Dec 20 00:39:14 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

[ol7ora12rf1]<SYS@ORA12RF1>$ @adg_par

NAME                                               VALUE
-------------------------------------------------- ---------------------------------------
db_file_name_convert                               (NULL)
log_file_name_convert                              (NULL)
log_archive_dest_1                                 LOCATION=+FRA1
log_archive_dest_2                                 (NULL)
log_archive_dest_state_1                           enable
log_archive_dest_state_2                           ENABLE
fal_client                                         (NULL)
fal_server                                         (NULL)
log_archive_config                                 nodg_config
log_archive_format                                 %t_%s_%r.ARC
log_archive_max_processes                          4
standby_file_management                            AUTO
remote_login_passwordfile                          EXCLUSIVE
db_name                                            ORA12RF
db_unique_name                                     ORA12RF

15 rows selected.

Elapsed: 00:00:00.00

 

[ol7ora12rf1]<SYS@ORA12RF1>$ ALTER SYSTEM RESET log_archive_config SCOPE=BOTH SID='*';

System altered.

Elapsed: 00:00:00.01

 

[ol7ora12rf1]<SYS@ORA12RF1>$ ALTER SYSTEM RESET log_archive_dest_state_2 SCOPE=BOTH SID='*';

System altered.

Elapsed: 00:00:00.01

 

[ol7ora12rf1]<SYS@ORA12RF1>$ show parameter DG_BROKER

NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
dg_broker_config_file1               string                            +DATA1/ADG/dr1ora12rf.dat
dg_broker_config_file2               string                            +DATA1/ADG/dr2ora12rf.dat
dg_broker_start                      boolean                           FALSE

 

[ol7ora12rf1]<SYS@ORA12RF1>$ ALTER SYSTEM RESET DG_BROKER_CONFIG_FILE1 SCOPE=BOTH SID='*';

System altered.

Elapsed: 00:00:00.02

 

[ol7ora12rf1]<SYS@ORA12RF1>$ ALTER SYSTEM RESET DG_BROKER_CONFIG_FILE2 SCOPE=BOTH SID='*';

System altered.

Elapsed: 00:00:00.01

 

[ol7ora12rf1]<SYS@ORA12RF1>$ ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=MANUAL SCOPE=BOTH SID='*';

System altered.

Elapsed: 00:00:00.01

 

[ol7ora12rf1]<SYS@ORA12RF1>$ @adg_par

NAME                                               VALUE
-------------------------------------------------- ------------------------------------------------------------------------------------------
db_file_name_convert                               (NULL)
log_file_name_convert                              (NULL)
log_archive_dest_1                                 LOCATION=+FRA1
log_archive_dest_2                                 (NULL)
log_archive_dest_state_1                           enable
log_archive_dest_state_2                           enable
fal_client                                         (NULL)
fal_server                                         (NULL)
log_archive_config                                 (NULL)
log_archive_format                                 %t_%s_%r.ARC
log_archive_max_processes                          4
standby_file_management                            MANUAL
remote_login_passwordfile                          EXCLUSIVE
db_name                                            ORA12RF
db_unique_name                                     ORA12RF

15 rows selected.

Elapsed: 00:00:00.00


--!! 중요
--1번 노드 및 2번 노드에서 local_listener 파라미터를 모두 기존 1521 리스너만 바라보도록 수정

--1번 노드

[ol7ora12rf1]<SYS@ORA12RF1>$ alter system set local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.240.14)(PORT=1521))' scope=both sid='ORA12RF1';

System altered.

Elapsed: 00:00:00.01

 

--2번 노드

[ol7ora12rf2]<SYS@ORA12RF2>$ alter system set local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.240.15)(PORT=1521))' scope=both sid='ORA12RF2';
System altered.

Elapsed: 00:00:00.01


--standby
접속할 데이터베이스(DB_NAME)를 선택하세요:
1) ORA12SF
2) ORA12RF
3) RESERVED
번호를 입력하세요 (1,2,3): 2
현재 ORACLE_SID: ORA12RF
ORA12RF 환경 설정 적용 중...
환경 설정 완료 : 현재 ORACLE_SID = ORA12RF

 

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Sat Dec 20 00:38:19 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

 

[ol7ora12sf]<SYS@ORA12RF>$ show parameter broker

NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
connection_brokers                   string                            ((TYPE=DEDICATED)(BROKERS=1)),
                                                                        ((TYPE=EMON)(BROKERS=1))
dg_broker_config_file1               string                            +DATA1/ADG/dr1ora12rf_stb.dat
dg_broker_config_file2               string                            +DATA1/ADG/dr2ora12rf_stb.dat
dg_broker_start                      boolean                           TRUE
use_dedicated_broker                 boolean                           FALSE

 

[ol7ora12sf]<SYS@ORA12RF>$ ALTER SYSTEM SET DG_BROKER_START=FALSE SCOPE=BOTH;

System altered.

Elapsed: 00:00:03.11

 

[ol7ora12sf]<SYS@ORA12RF>$ alter system reset dg_broker_config_file1 SCOPE=BOTH;

System altered.

Elapsed: 00:00:00.00
[ol7ora12sf]<SYS@ORA12RF>$ alter system reset dg_broker_config_file2 SCOPE=BOTH;

System altered.

Elapsed: 00:00:00.01

 

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ cdos
[ORA12RF:oracle@ol7ora12sf][/home/oracle/oracle_scripts]$ ls -l adg_par.sql
-rw-r--r--. 1 oracle oinstall 885 Dec 13 13:29 adg_par.sql

[ORA12RF:oracle@ol7ora12sf][/home/oracle/oracle_scripts]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'
[ORA12RF:oracle@ol7ora12sf][/home/oracle/oracle_scripts]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Sat Dec 20 00:40:01 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

[ol7ora12sf]<SYS@ORA12RF>$ @adg_par

NAME                                               VALUE
-------------------------------------------------- ------------------------------------------------------------------------------------------
db_file_name_convert                               (NULL)
log_file_name_convert                              (NULL)
log_archive_dest_1                                 LOCATION=+FRA1
log_archive_dest_2                                 (NULL)
log_archive_dest_state_1                           enable
log_archive_dest_state_2                           ENABLE
fal_client                                         (NULL)
fal_server                                         (NULL)
log_archive_config                                 nodg_config
log_archive_format                                 %t_%s_%r.ARC
log_archive_max_processes                          4
standby_file_management                            AUTO
remote_login_passwordfile                          EXCLUSIVE
db_name                                            ORA12RF
db_unique_name                                     ORA12RF_STB

15 rows selected.

Elapsed: 00:00:00.01

 

[ol7ora12sf]<SYS@ORA12RF>$ alter system reset log_archive_config scope=both;

System altered.

Elapsed: 00:00:00.04

 

[ol7ora12sf]<SYS@ORA12RF>$ @adg_par

NAME                                               VALUE
-------------------------------------------------- ------------------------------------------------------------------------------------------
db_file_name_convert                               (NULL)
log_file_name_convert                              (NULL)
log_archive_dest_1                                 LOCATION=+FRA1
log_archive_dest_2                                 (NULL)
log_archive_dest_state_1                           enable
log_archive_dest_state_2                           ENABLE
fal_client                                         (NULL)
fal_server                                         (NULL)
log_archive_config                                 (NULL)
log_archive_format                                 %t_%s_%r.ARC
log_archive_max_processes                          4
standby_file_management                            AUTO
remote_login_passwordfile                          EXCLUSIVE
db_name                                            ORA12RF
db_unique_name                                     ORA12RF_STB

15 rows selected.

Elapsed: 00:00:00.01


 

--Primary 서버에서 백업 파일 제거
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ rm -rf /home/oracle/BACKUP_FOR_ADG

 

--Standby 서버에서 백업 파일 제거

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ rm -rf /home/oracle/BACKUP_FOR_ADG

 

--rman 백업 설정
#CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY; #For ADG
--> 이걸 주석 처리해도됨

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle/os_scripts]$ cat /home/oracle/os_scripts/rman_init.sh | grep -i standby
#CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY; #For ADG


19-4. Standby Database 제거

 

--Standby (oracle os user)
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ srvctl config database -db ora12rf_stb

Database unique name: ORA12RF_STB
Database name: ORA12RF
Oracle home: /u01/app/oracle/product/12c/db_1
Oracle user: grid
Spfile: +DATA1/ORA12RF_STB/PARAMETERFILE/spfile.298.1220467273
Password file: +DATA1/ORA12RF_STB/PASSWORD/pwdora12rf_stb.297.1220467105
Domain:
Start options: read only
Stop options: immediate
Database role: PHYSICAL_STANDBY
Management policy: AUTOMATIC
Disk Groups: DATA1,FRA1
Services:
OSDBA group:
OSOPER group:
Database instance: ORA12RF

 

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ srvctl stop database -db ORA12RF_STB -stopoption immediate

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ crsctl stat res ora.ora12rf_stb.db  -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.ora12rf_stb.db
      1        OFFLINE OFFLINE                               Instance Shutdown,ST
                                                             ABLE
--------------------------------------------------------------------------------

 

[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ srvctl remove database -db ORA12RF_STB
Remove the database ORA12RF_STB? (y/[n]) y
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ crsctl stat res ora.ora12rf_stb.db  -t
CRS-2613: Could not find resource 'ora.ora12rf_stb.db'.

 

--grid os user

[+ASM:grid@ol7ora12sf][/home/grid]$ asmcmd rm -rf +DATA1/ORA12RF_STB/
[+ASM:grid@ol7ora12sf][/home/grid]$ asmcmd rm -rf +DATA1/ADG/
[+ASM:grid@ol7ora12sf][/home/grid]$ asmcmd rm -rf +FRA1/ORA12RF_STB/

 

--Standby 서버 (oracle os user)
[ORA12RF:oracle@ol7ora12sf][/u01/app/oracle]$ rm -rf /u01/app/oracle/diag/rdbms/ora12rf_stb
[ORA12RF:oracle@ol7ora12sf][/u01/app/oracle]$ rm -rf /u01/app/oracle/product/12c/db_1/admin/ORA12RF_STB

[ORA12RF:oracle@ol7ora12sf][/u01/app/oracle]$ rm -rf /u01/app/oracle/admin/ORA12RF_STB
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ rm -rf /u01/app/oracle/audit/ORA12RF
--> 그 외 아래와 같은 방식으로 끝까지 추적해서 다 지울수도 있음

[ORA12RF:oracle@ol7ora12sf][/u01/app/oracle]$ find . | grep -i ora12rf

19-5. Primary DB의 Standby redo log 제거

 

--1번 노드(oracle os user)

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ cdos
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle/oracle_scripts]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle/oracle_scripts]$ ls -l stb*.sql
-rwxr--r--. 1 oracle oinstall 453 Dec  7 20:13 stb_rdl.sql

 

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle/oracle_scripts]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Sat Dec 20 00:47:54 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

 

[ol7ora12rf1]<SYS@ORA12RF1>$
ALTER DATABASE DROP STANDBY LOGFILE GROUP 7;
ALTER DATABASE DROP STANDBY LOGFILE GROUP 8;
ALTER DATABASE DROP STANDBY LOGFILE GROUP 9;
ALTER DATABASE DROP STANDBY LOGFILE GROUP 10;
ALTER DATABASE DROP STANDBY LOGFILE GROUP 11;
ALTER DATABASE DROP STANDBY LOGFILE GROUP 12;
ALTER DATABASE DROP STANDBY LOGFILE GROUP 13;
ALTER DATABASE DROP STANDBY LOGFILE GROUP 14;

[ol7ora12rf1]<SYS@ORA12RF1>$ @stb_rdl

no rows selected

Elapsed: 00:00:00.02

 

[ol7ora12rf1]<SYS@ORA12RF1>$

 

19-5. Listener 및 TNS 정리 (Primary & Standby 서버)

 

--Primary 서버 1번 노드 (grid os user)
[+ASM1:grid@ol7ora12rf1][/home/grid]$ cdt
[+ASM1:grid@ol7ora12rf1][/u01/app/12c/grid/network/admin]$ vi listener.ora
[+ASM1:grid@ol7ora12rf1][/u01/app/12c/grid/network/admin]$ cat listener.ora
LISTENER_ADG=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_ADG))))            # line added by Agent
MGMTLSNR=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=MGMTLSNR))))            # line added by Agent
# listener.ora Network Configuration File: /u01/app/12c/grid/network/admin/listener.ora
# Generated by Oracle configuration tools.

ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN3 = ON

ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN2 = ON

ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1 = ON

VALID_NODE_CHECKING_REGISTRATION_LISTENER_SCAN3 = OFF

VALID_NODE_CHECKING_REGISTRATION_LISTENER_SCAN2 = OFF

VALID_NODE_CHECKING_REGISTRATION_LISTENER_SCAN1 = OFF

VALID_NODE_CHECKING_REGISTRATION_ASMNET1LSNR_ASM = SUBNET

ASMNET1LSNR_ASM =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = ASMNET1LSNR_ASM))
    )
  )

VALID_NODE_CHECKING_REGISTRATION_LISTENER = SUBNET

LISTENER =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = LISTENER))
    )
  )

ENABLE_GLOBAL_DYNAMIC_ENDPOINT_ASMNET1LSNR_ASM = ON

ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER = ON

LISTENER_SCAN3 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = LISTENER_SCAN3))
    )
  )

LISTENER_SCAN2 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = LISTENER_SCAN2))
    )
  )

LISTENER_SCAN1 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = LISTENER_SCAN1))
    )
  )

ENABLE_GLOBAL_DYNAMIC_ENDPOINT_MGMTLSNR=ON              # line added by Agent
VALID_NODE_CHECKING_REGISTRATION_MGMTLSNR=SUBNET                # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_ADG=ON          # line added by Agent
VALID_NODE_CHECKING_REGISTRATION_LISTENER_ADG=SUBNET            # line added by Agent

#SID_LIST_LISTENER_ADG =
#  (SID_LIST =
#    (SID_DESC =
#      (GLOBAL_DBNAME = ORA12RF_DGMGRL)
#      (ORACLE_HOME = /u01/app/oracle/product/12c/db_1)
#      (SID_NAME = ORA12RF1)
#    )
#  )

--> 주석 처리

 

--Primary 서버 1번 노드 (oracle os user)
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ cdt
[ORA12RF1:oracle@ol7ora12rf1][/u01/app/oracle/product/12c/db_1/network/admin]$ vi tnsnames.ora
[ORA12RF1:oracle@ol7ora12rf1][/u01/app/oracle/product/12c/db_1/network/admin]$ cat tnsnames.ora

# tnsnames.ora Network Configuration File: /u01/app/oracle/product/12c/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

ORA12RF =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = ol7ora12rf-scan)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORA12RF)
    )
  )

#Primary
#TNS_ORA12RF =
#  (DESCRIPTION =
#    (ADDRESS_LIST =
#      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.240.14)(PORT = 1522))
#      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.240.15)(PORT = 1522))
#          (LOAD_BALANCE = OFF)
#          (FAILOVER = ON)
#    )
#    (CONNECT_DATA =
#      (SERVER = DEDICATED)
#      (SERVICE_NAME = ORA12RF)
#      (FAILOVER_MODE = (TYPE = SELECT)(METHOD = BASIC))
#    )
#)

#Standby
#TNS_ORA12RF_STB =
#  (DESCRIPTION =
#    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.240.111)(PORT = 1522))
#    (CONNECT_DATA =
#      (SERVER = DEDICATED)
#      (SERVICE_NAME = ORA12RF_STB)
#    )
#  )

--> 주석 처리

 

--Primary 서버 2번 노드 (grid os user)
[+ASM2:grid@ol7ora12rf2][/home/grid]$ cdt
[+ASM2:grid@ol7ora12rf2][/u01/app/12c/grid/network/admin]$ ls -l listener.ora
-rw-r--r--. 1 grid oinstall 1778 Dec 20 00:58 listener.ora

[+ASM2:grid@ol7ora12rf2][/u01/app/12c/grid/network/admin]$ vi listener.ora
[+ASM2:grid@ol7ora12rf2][/u01/app/12c/grid/network/admin]$ cat listener.ora
LISTENER_SCAN3=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN3))))                # line added by Agent
MGMTLSNR=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=MGMTLSNR))))            # line added by Agent
LISTENER_SCAN2=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN2))))                # line added by Agent
LISTENER=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER))))            # line added by Agent
LISTENER_SCAN1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1))))                # line added by Agent
ASMNET1LSNR_ASM=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=ASMNET1LSNR_ASM))))              # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_ASMNET1LSNR_ASM=ON               # line added by Agent
VALID_NODE_CHECKING_REGISTRATION_ASMNET1LSNR_ASM=SUBNET         # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1=ON                # line added by Agent
VALID_NODE_CHECKING_REGISTRATION_LISTENER_SCAN1=OFF             # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON              # line added by Agent
VALID_NODE_CHECKING_REGISTRATION_LISTENER=SUBNET                # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN2=ON                # line added by Agent
VALID_NODE_CHECKING_REGISTRATION_LISTENER_SCAN2=OFF             # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_MGMTLSNR=ON              # line added by Agent
VALID_NODE_CHECKING_REGISTRATION_MGMTLSNR=SUBNET                # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN3=ON                # line added by Agent
VALID_NODE_CHECKING_REGISTRATION_LISTENER_SCAN3=OFF             # line added by Agent

#SID_LIST_LISTENER_ADG =
#  (SID_LIST =
#    (SID_DESC =
#      (GLOBAL_DBNAME = ORA12RF_DGMGRL)
#      (ORACLE_HOME = /u01/app/oracle/product/12c/db_1)
#      (SID_NAME = ORA12RF2)
#    )
#  )

--> 주석 처리

 

--Primary 서버 2번 노드 (oracle os user)
[ORA12RF2:oracle@ol7ora12rf2][/home/oracle]$ cdt
[ORA12RF2:oracle@ol7ora12rf2][/u01/app/oracle/product/12c/db_1/network/admin]$ vi tnsnames.ora
[ORA12RF2:oracle@ol7ora12rf2][/u01/app/oracle/product/12c/db_1/network/admin]$ cat tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/12c/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

ORA12RF =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = ol7ora12rf-scan)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORA12RF)
    )
  )

#Primary
#TNS_ORA12RF =
#  (DESCRIPTION =
#    (ADDRESS_LIST =
#      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.240.14)(PORT = 1522))
#      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.240.15)(PORT = 1522))
#          (LOAD_BALANCE = OFF)
#          (FAILOVER = ON)
#    )
#    (CONNECT_DATA =
#      (SERVER = DEDICATED)
#      (SERVICE_NAME = ORA12RF)
#      (FAILOVER_MODE = (TYPE = SELECT)(METHOD = BASIC))
#    )
#)

#Standby
#TNS_ORA12RF_STB =
#  (DESCRIPTION =
#    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.240.111)(PORT = 1522))
#    (CONNECT_DATA =
#      (SERVER = DEDICATED)
#      (SERVICE_NAME = ORA12RF_STB)
#    )
#  )

--> 주석 처리

 

--Primary 서버 1번 노드 (grid os user)
[+ASM1:grid@ol7ora12rf1][/u01/app/12c/grid/network/admin]$ srvctl stop listener -listener LISTENER_ADG
[+ASM1:grid@ol7ora12rf1][/u01/app/12c/grid/network/admin]$ srvctl remove listener -listener LISTENER_ADG

[+ASM1:grid@ol7ora12rf1][/home/grid]$ crsctl stat res ora.LISTENER_ADG.lsnr -t
CRS-2613: Could not find resource 'ora.LISTENER_ADG.lsnr'.


--Standby 서버 (grid os user)
[+ASM:grid@ol7ora12sf][/home/grid]$ cdt
[+ASM:grid@ol7ora12sf][/u01/app/12c/grid/network/admin]$ ls -l
total 16
-rw-r--r--. 1 grid oinstall 1283 Dec 13 12:20 listener.ora
-rw-r--r--. 1 grid oinstall  548 Dec  7 16:55 listener.ora.bak.ol7ora12sf
drwxr-xr-x. 2 grid oinstall   64 Jan 27  2017 samples
-rw-r--r--. 1 grid oinstall 1441 Aug 28  2015 shrept.lst
-rw-r--r--. 1 grid oinstall  249 Nov 16 23:35 sqlnet.ora
[+ASM:grid@ol7ora12sf][/u01/app/12c/grid/network/admin]$ vi listener.ora
[+ASM:grid@ol7ora12sf][/u01/app/12c/grid/network/admin]$ cat listener.ora
#Backup file is  /u01/app/12c/grid/network/admin/listener.ora.bak.ol7ora12sf line added by Agent
LISTENER_ADG=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_ADG))))            # line added by Agent
# listener.ora Network Configuration File: /u01/app/12c/grid/network/admin/listener.ora
# Generated by Oracle configuration tools.

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = ol7ora12sf)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON              # line added by Agent
VALID_NODE_CHECKING_REGISTRATION_LISTENER=SUBNET                # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_ADG=ON          # line added by Agent
VALID_NODE_CHECKING_REGISTRATION_LISTENER_ADG=SUBNET            # line added by Agent

#SID_LIST_LISTENER_ADG =
#  (SID_LIST =
#    (SID_DESC =
#      (GLOBAL_DBNAME = ORA12RF_STB_DGMGRL)
#      (ORACLE_HOME = /u01/app/oracle/product/12c/db_1)
#      (SID_NAME = ORA12RF)
#    )
#  )

--> 주석 처리

 

[+ASM:grid@ol7ora12sf][/u01/app/12c/grid/network/admin]$ srvctl stop listener -listener LISTENER_ADG
[+ASM:grid@ol7ora12sf][/u01/app/12c/grid/network/admin]$ srvctl remove listener -listener LISTENER_ADG

[+ASM:grid@ol7ora12sf][/home/grid]$ alias csrt
alias csrt='crsctl stat res -t'

[+ASM:grid@ol7ora12sf][/home/grid]$ csrt
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.DATA1.dg
               ONLINE  ONLINE       ol7ora12sf               STABLE
ora.FRA1.dg
               ONLINE  ONLINE       ol7ora12sf               STABLE
ora.LISTENER.lsnr
               ONLINE  ONLINE       ol7ora12sf               STABLE
ora.asm
               ONLINE  ONLINE       ol7ora12sf               Started,STABLE
ora.ons
               OFFLINE OFFLINE      ol7ora12sf               STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.cssd
      1        ONLINE  ONLINE       ol7ora12sf               STABLE
ora.diskmon
      1        OFFLINE OFFLINE                               STABLE
ora.evmd
      1        ONLINE  ONLINE       ol7ora12sf               STABLE
ora.ora12sf.db
      1        OFFLINE OFFLINE                               STABLE
--------------------------------------------------------------------------------

 

--Standby 서버 (oracle os user)
[ORA12RF:oracle@ol7ora12sf][/home/oracle]$ cdt
[ORA12RF:oracle@ol7ora12sf][/u01/app/oracle/product/12c/db_1/network/admin]$ ll
total 8
drwxr-xr-x. 2 oracle oinstall   64 Nov 16 19:13 samples
-rw-r--r--. 1 oracle oinstall 1441 Aug 28  2015 shrept.lst
-rw-r-----. 1 oracle oinstall 1025 Dec  7 17:49 tnsnames.ora

 

[ORA12RF:oracle@ol7ora12sf][/u01/app/oracle/product/12c/db_1/network/admin]$ vi tnsnames.ora
[ORA12RF:oracle@ol7ora12sf][/u01/app/oracle/product/12c/db_1/network/admin]$ cat tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/12c/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

ORA12SF =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = ol7ora12sf)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORA12SF)
    )
  )

LISTENER_ORA12SF =
  (ADDRESS = (PROTOCOL = TCP)(HOST = ol7ora12sf)(PORT = 1521))

#Primary
#TNS_ORA12RF =
#  (DESCRIPTION =
#    (ADDRESS_LIST =
#      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.240.14)(PORT = 1522))
#      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.240.15)(PORT = 1522))
#          (LOAD_BALANCE = OFF)
#          (FAILOVER = ON)
#    )
#    (CONNECT_DATA =
#      (SERVER = DEDICATED)
#      (SERVICE_NAME = ORA12RF)
#      (FAILOVER_MODE = (TYPE = SELECT)(METHOD = BASIC))
#    )
#)

#Standby
#TNS_ORA12RF_STB =
#  (DESCRIPTION =
#    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.240.111)(PORT = 1522))
#    (CONNECT_DATA =
#      (SERVER = DEDICATED)
#      (SERVICE_NAME = ORA12RF_STB)
#    )
#  )

--> 주석 처리

 

19-5. /etc/hosts 설정 제거

 

--Primary 서버 1번 노드 (root os user)
[root@ol7ora12rf1][/root]$ vi /etc/hosts

[root@ol7ora12rf1][/root]$ cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
### Public IP
192.168.240.11  ol7ora12rf1
192.168.240.12  ol7ora12rf2

### Private IP
10.0.1.11       ol7ora12rf1-priv
10.0.1.12       ol7ora12rf2-priv

### Virtual IP
192.168.240.14  ol7ora12rf1-vip
192.168.240.15  ol7ora12rf2-vip

### DNS
192.168.240.17  ol7ora12rf-scan
192.168.240.18  ol7ora12rf-scan
192.168.240.19  ol7ora12rf-scan

## Standby
#192.168.240.111 ol7ora12sf

--> 주석 처리

 

--Primary 서버 2번 노드 (root os user)
[root@ol7ora12rf2][/root]$ vi /etc/hosts
[root@ol7ora12rf2][/root]$ cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
### Public IP
192.168.240.11  ol7ora12rf1
192.168.240.12  ol7ora12rf2

### Private IP
10.0.1.11       ol7ora12rf1-priv
10.0.1.12       ol7ora12rf2-priv

### Virtual IP
192.168.240.14  ol7ora12rf1-vip
192.168.240.15  ol7ora12rf2-vip

### DNS
192.168.240.17  ol7ora12rf-scan
192.168.240.18  ol7ora12rf-scan
192.168.240.19  ol7ora12rf-scan

#192.168.240.111 ol7ora12sf

--> 주석 처리

 

--Standby 서버 (root os user)
[root@ol7ora12sf][/root]$ vi /etc/hosts

[root@ol7ora12sf][/root]$ cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
### Public IP
192.168.240.111 ol7ora12sf

## Primary
#192.168.240.11  ol7ora12rf1
#192.168.240.12  ol7ora12rf2

--> 주석 처리

 

19-6. 기타 작업

 

--Primary 서버 1번 노드 (oracle os user)

[ORA12RF:oracle@ol7ora12sf][/tmp]$ rm -rf /tmp/orapwORA12RF


--Standby 서버 (oracle os user)

[ORA12RF:oracle@ol7ora12sf][/tmp]$ rm -f /tmp/orapwORA12RF

 

--Standby 서버 (oracle os user)
rm -rf /u01/app/oracle/diag/rdbms/ora12rf_stb

 

 

19-7. Primary DB의 flashback database off로 설정 (필요시)

 

--Primary 서버 1번 노드 (oracle os user)

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Sun Dec 21 20:55:25 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

 

[ol7ora12rf1]<SYS@ORA12RF1>$ select inst_id, flashback_on from gv$database;

   INST_ID FLASHBACK_ON
---------- ------------------------------------------------------
         1 YES
         2 YES

2 rows selected.

Elapsed: 00:00:00.15

 

[ol7ora12rf1]<SYS@ORA12RF1>$ quit

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ srvctl stop database -db ora12rf
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ srvctl start database -db ORA12RF -startoption mount

 

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Tue Dec 23 00:12:39 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

[ol7ora12rf1]<SYS@ORA12RF1>$


[ol7ora12rf1]<SYS@ORA12RF1>$ alter database flashback off;

[ol7ora12rf1]<SYS@ORA12RF1>$ select inst_id, flashback_on from gv$database;

   INST_ID FLASHBACK_ON
---------- ------------------------------------------------------
         1 NO
         2 NO

2 rows selected.

Elapsed: 00:00:00.18


[ol7ora12rf1]<SYS@ORA12RF1>$ show parameter recovery

NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
db_recovery_file_dest                string                            +FRA1
db_recovery_file_dest_size           big integer                       32G
recovery_parallelism                 integer                           0
remote_recovery_file_dest            string                            (NULL)

 

[ol7ora12rf1]<SYS@ORA12RF1>$ alter system reset db_recovery_file_dest scope=both sid='*';

System altered.

Elapsed: 00:00:00.01

 

[ol7ora12rf1]<SYS@ORA12RF1>$ alter system reset db_recovery_file_dest_size scope=spfile sid='*';

System altered.

Elapsed: 00:00:00.01

 

[ol7ora12rf1]<SYS@ORA12RF1>$ show parameter flashback

NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
db_flashback_retention_target        integer   
                        2880

 

[ol7ora12rf1]<SYS@ORA12RF1>$ alter system reset db_flashback_retention_target scope=spfile sid='*';

System altered.

Elapsed: 00:00:00.01


[ol7ora12rf1]<SYS@ORA12RF1>$ quit
Disconnected from Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

 

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ srvctl stop database -db ora12rf
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ srvctl start database -db ORA12RF -startoption open

 

19-8. no force logging 설정

 

--Primary 서버 1번 노드 (oracle os user)

[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'
[ORA12RF1:oracle@ol7ora12rf1][/home/oracle]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Tue Dec 23 00:17:05 2025

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

[ol7ora12rf1]<SYS@ORA12RF1>$

[ol7ora12rf1]<SYS@ORA12RF1>$ alter database no force logging;

Database altered.

Elapsed: 00:00:00.01

 

[ol7ora12rf1]<SYS@ORA12RF1>$

col force_logging for a20
col inst_id for 999
select inst_id, force_logging from gv$database;

INST_ID FORCE_LOGGING
------- --------------------
      1 NO
      2 NO

2 rows selected.

Elapsed: 00:00:00.02

 

[ol7ora12rf1]<SYS@ORA12RF1>$ quit
Disconnected from Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

 

반응형

+ Recent posts