프린트 하기

OS 환경 : Oracle Linux 6.8 (64bit)

 

DB 환경 : Oracle Database 11.2.0.4

 

방법 : 오라클 11gR2 RAC 노드 장애 유형별 VIP Failover 동작 분석

11gR2 RAC 환경에서 각각 정상 상태, DB 종료 상태, GRID 종료 상태, OS 종료 상태일때
Public IP와 VIP, SCAN IP로 접속시 어떻게 동작하는지 테스트해봄

 

 

서버 정보
클라이언트 : 19.3
RAC : 11.2.0.4
1번 노드 Public IP : 192.168.137.10
1번 노드 Virtual IP : 192.168.137.100
2번 노드 Public IP : 192.168.137.20
2번 노드 Virtual IP : 192.168.137.200
SCAN IP : 192.168.137.150

 

 

테스트
구성 정보 확인
테스트1. 정상 상태에서 확인
테스트2. DB 종료 상태에서 확인
테스트3. GRID 종료 상태에서 확인
테스트4. OS 종료 상태에서 확인
결론

 

 

테스트
구성 정보 확인
현재 rac 상태 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
$ crsctl stat res -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.LISTENER.lsnr
               ONLINE  ONLINE       oel11db1
               ONLINE  ONLINE       oel11db2
ora.gsd
               OFFLINE OFFLINE      oel11db1
               OFFLINE OFFLINE      oel11db2
ora.net1.network
               ONLINE  ONLINE       oel11db1
               ONLINE  ONLINE       oel11db2
ora.ons
               ONLINE  ONLINE       oel11db1
               ONLINE  ONLINE       oel11db2
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
      1        ONLINE  ONLINE       oel11db2
ora.cvu
      1        ONLINE  ONLINE       oel11db2
ora.oc4j
      1        ONLINE  ONLINE       oel11db2
ora.oel11db1.vip
      1        ONLINE  ONLINE       oel11db1
ora.oel11db2.vip
      1        ONLINE  ONLINE       oel11db2
ora.oradb.db
      1        ONLINE  ONLINE       oel11db1                 Open
      2        ONLINE  ONLINE       oel11db2                 Open
ora.scan1.vip
      1        ONLINE  ONLINE       oel11db2

모두 정상

 

 

리스너 상태 확인
1번 노드 리스너

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$ lsnrctl status
 
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 07-JUN-2025 18:42:26
 
Copyright (c) 1991, 2013, Oracle.  All rights reserved.
 
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                07-JUN-2025 18:04:49
Uptime                    0 days 0 hr. 37 min. 36 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /app/grid/11g/network/admin/listener.ora
Listener Log File         /app/oracle/diag/tnslsnr/oel11db1/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.137.10)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.137.100)(PORT=1521)))
Services Summary...
Service "ORADB" has 1 instance(s).
  Instance "ORADB1", status READY, has 1 handler(s) for this service...
The command completed successfully

 

 

2번 노드 리스너

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$ lsnrctl status
 
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 07-JUN-2025 18:42:38
 
Copyright (c) 1991, 2013, Oracle.  All rights reserved.
 
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                07-JUN-2025 18:04:34
Uptime                    0 days 0 hr. 38 min. 3 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /app/grid/11g/network/admin/listener.ora
Listener Log File         /app/oracle/diag/tnslsnr/oel11db2/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.137.20)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.137.200)(PORT=1521)))
Services Summary...
Service "ORADB" has 1 instance(s).
  Instance "ORADB2", status READY, has 1 handler(s) for this service...
The command completed successfully

 

 

scan 리스너

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$ export TNS_ADMIN=$GRID_HOME/network/admin
$ lsnrctl status LISTENER_SCAN1
 
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 07-JUN-2025 21:37:54
 
Copyright (c) 1991, 2013, Oracle.  All rights reserved.
 
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER_SCAN1
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                07-JUN-2025 18:04:33
Uptime                    0 days 3 hr. 33 min. 20 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /app/grid/11g/network/admin/listener.ora
Listener Log File         /app/grid/11g/log/diag/tnslsnr/oel11db2/listener_scan1/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_SCAN1)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.137.150)(PORT=1521)))
Services Summary...
Service "ORADB" has 1 instance(s).
  Instance "ORADB2", status READY, has 1 handler(s) for this service...
The command completed successfully

 

 

oracle이 설치된 서버나 클라이언트가 설치된 서버에서 tnsnames.ora 수정(클라이언트에서 수행)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
$ cd $ORACLE_HOME/network/admin
$ vi tnsnames.ora
ORADB1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.137.10)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORADB)
    )
  )
 
ORADB1-VIP =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.137.100)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORADB)
    )
  )
 
ORADB2 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.137.20)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORADB)
    )
  )
 
ORADB2-VIP =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.137.200)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORADB)
    )
  )
 
ORADB-ALL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.137.10)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.137.20)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORADB)
    )
  )
 
ORADB-VIPALL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.137.100)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.137.200)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORADB)
    )
  )
 
ORADB-SCAN =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.137.150)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORADB)
    )
  )

 

 

테스트1. 정상 상태에서 확인
tnsping 테스트(클라이언트에서 수행)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ tnsping oradb1
(결과생략 : 정상)
$ tnsping oradb1-vip
(결과생략 : 정상)
$ tnsping oradb2
(결과생략 : 정상)
$ tnsping oradb2-vip
(결과생략 : 정상)
$ tnsping oradb-all
(결과생략 : 정상)
$ tnsping oradb-vipall
(결과생략 : 정상)
$ tnsping oradb-scan
(결과생략 : 정상)

tnsping 정상

 

 

sqlplus로 db 접속 테스트(클라이언트에서 수행)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ sqlplus system/oracle@oradb1
(결과생략 : 정상)
$ sqlplus system/oracle@oradb1-vip
(결과생략 : 정상)
$ sqlplus system/oracle@oradb2
(결과생략 : 정상)
$ sqlplus system/oracle@oradb2-vip
(결과생략 : 정상)
$ sqlplus system/oracle@oradb-all
(결과생략 : 정상)
$ sqlplus system/oracle@oradb-vipall
(결과생략 : 정상)
$ sqlplus system/oracle@oradb-scan
(결과생략 : 정상)

모두 정상 접속됨

 

 

ping 테스트

1
2
3
4
5
6
7
8
9
10
$ ping 192.168.137.10
(결과생략 : 정상)
$ ping 192.168.137.100
(결과생략 : 정상)
$ ping 192.168.137.20
(결과생략 : 정상)
$ ping 192.168.137.200
(결과생략 : 정상)
$ ping 192.168.137.150
(결과생략 : 정상)

ping은 모두 정상임모두 정상

 

 

테스트1 결과 : 모두 정상 접속됨

 

 

테스트2. DB 종료 상태에서 확인
1번 노드 인스턴스 종료 후 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
$ srvctl stop instance -d ORADB -i ORADB1
$ crsctl stat res -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.LISTENER.lsnr
               ONLINE  ONLINE       oel11db1
               ONLINE  ONLINE       oel11db2
ora.gsd
               OFFLINE OFFLINE      oel11db1
               OFFLINE OFFLINE      oel11db2
ora.net1.network
               ONLINE  ONLINE       oel11db1
               ONLINE  ONLINE       oel11db2
ora.ons
               ONLINE  ONLINE       oel11db1
               ONLINE  ONLINE       oel11db2
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
      1        ONLINE  ONLINE       oel11db2
ora.cvu
      1        ONLINE  ONLINE       oel11db2
ora.oc4j
      1        ONLINE  ONLINE       oel11db2
ora.oel11db1.vip
      1        ONLINE  ONLINE       oel11db1
ora.oel11db2.vip
      1        ONLINE  ONLINE       oel11db2
ora.oradb.db
      1        OFFLINE OFFLINE                               Instance Shutdown
      2        ONLINE  ONLINE       oel11db2                 Open
ora.scan1.vip
      1        ONLINE  ONLINE       oel11db2

종료됨

 

 

tnsping 테스트(클라이언트에서 수행)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ tnsping oradb1
(결과생략 : 정상)
$ tnsping oradb1-vip
(결과생략 : 정상)
$ tnsping oradb2
(결과생략 : 정상)
$ tnsping oradb2-vip
(결과생략 : 정상)
$ tnsping oradb-all
(결과생략 : 정상)
$ tnsping oradb-vipall
(결과생략 : 정상)
$ tnsping oradb-scan
(결과생략 : 정상)

tnsping 정상

 

 

sqlplus로 db 접속 테스트(클라이언트에서 수행)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
$ sqlplus system/oracle@oradb1
 
SQL*Plus: Release 19.0.0.0.0 - Production on Sat Jun 7 21:43:47 2025
Version 19.3.0.0.0
 
Copyright (c) 1982, 2019, Oracle.  All rights reserved.
 
ERROR:
ORA-12514: TNS:listener does not currently know of service requested in connect
descriptor
 
 
Enter user-name: ^C
 
$ sqlplus system/oracle@oradb1-vip
 
SQL*Plus: Release 19.0.0.0.0 - Production on Sat Jun 7 21:43:52 2025
Version 19.3.0.0.0
 
Copyright (c) 1982, 2019, Oracle.  All rights reserved.
 
ERROR:
ORA-12514: TNS:listener does not currently know of service requested in connect
descriptor
 
 
Enter user-name: ^C
 
$ sqlplus system/oracle@oradb2
(결과생략 : 정상)
$ sqlplus system/oracle@oradb2-vip
(결과생략 : 정상)
$ sqlplus system/oracle@oradb-all
(결과생략 : 정상)
$ sqlplus system/oracle@oradb-vipall
(결과생략 : 정상)
$ sqlplus system/oracle@oradb-scan
(결과생략 : 정상)

oradb1, oradb1-vip 접속시 1번 인스턴스만 죽고 grid는 살아있기때문에 ORA-12514 에러가 발생되면서 접속되지 않음
oradb2, oradb2-vip, 2번 노드 ip나 vip, ip를 2개 넣어둔 oradb-all, oradb-vipall, oradb-scan은 정상접속됨

 

 

ping 테스트

1
2
3
4
5
6
7
8
9
10
$ ping 192.168.137.10
(결과생략 : 정상)
$ ping 192.168.137.100
(결과생략 : 정상)
$ ping 192.168.137.20
(결과생략 : 정상)
$ ping 192.168.137.200
(결과생략 : 정상)
$ ping 192.168.137.150
(결과생략 : 정상)

ping은 모두 정상임

 

 

vip 상태 확인

1
2
3
4
5
6
7
8
$ crsctl stat res -t | grep -A1 -i vip
ora.oel11db1.vip
      1        ONLINE  ONLINE       oel11db1
ora.oel11db2.vip
      1        ONLINE  ONLINE       oel11db2
--
ora.scan1.vip
      1        ONLINE  ONLINE       oel11db2

각각의 노드에서 vip가 동작중임

 

 

테스트2 결과 :
tnsping은 모두 성공했고, sqlplus를 통한 db 접속만 oradb1, oradb1-vip에서 ORA-12514 에러가 발생하며 실패함
oradb2, oradb2-vip, oradb-all, oradb-vipall, oradb-scan은 정상접속됨
ping은 모두 정상이었음

 

 

테스트3. GRID 종료 상태에서 확인
1번 노드 grid 종료 후 확인

1
2
3
4
# crsctl stop crs
# crsctl stat res -t
CRS-4535: Cannot communicate with Cluster Ready Services
CRS-4000: Command Status failed, or completed with errors.

정상 종료됨

 

 

tnsping 테스트(클라이언트에서 수행)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
$ tnsping oradb1
 
TNS Ping Utility for Linux: Version 19.0.0.0.0 - Production on 07-JUN-2025 21:51:25
 
Copyright (c) 1997, 2019, Oracle.  All rights reserved.
 
Used parameter files:
/ORA19/app/oracle/product/19.0.0/db_1/network/admin/sqlnet.ora
 
 
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.137.10)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORADB)))
TNS-12541: TNS:no listener
$ tnsping oradb1-vip
 
TNS Ping Utility for Linux: Version 19.0.0.0.0 - Production on 07-JUN-2025 21:51:27
 
Copyright (c) 1997, 2019, Oracle.  All rights reserved.
 
Used parameter files:
/ORA19/app/oracle/product/19.0.0/db_1/network/admin/sqlnet.ora
 
 
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.137.100)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORADB)))
TNS-12541: TNS:no listener
 
$ tnsping oradb2
(결과생략 : 정상)
$ tnsping oradb2-vip
(결과생략 : 정상)
$ tnsping oradb-all
(결과생략 : 정상)
$ tnsping oradb-vipall
(결과생략 : 정상)
$ tnsping oradb-scan
(결과생략 : 정상)

oradb1, oradb1-vip 접속시 grid도 죽었기때문에 ORA-12541 에러가 발생하면서 접속되지 않음
oradb2, oradb2-vip, 2번 노드 ip나 vip, ip를 2개 넣어둔 oradb-all, oradb-vipall, oradb-scan은 정상적으로 tnsping 성공함

 

 

sqlplus로 db 접속 테스트(클라이언트에서 수행)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
$ sqlplus system/oracle@oradb1
 
SQL*Plus: Release 19.0.0.0.0 - Production on Sat Jun 7 21:54:59 2025
Version 19.3.0.0.0
 
Copyright (c) 1982, 2019, Oracle.  All rights reserved.
 
ERROR:
ORA-12541: TNS:no listener
 
 
Enter user-name: 
 
$ sqlplus system/oracle@oradb1-vip
 
SQL*Plus: Release 19.0.0.0.0 - Production on Sat Jun 7 21:55:11 2025
Version 19.3.0.0.0
 
Copyright (c) 1982, 2019, Oracle.  All rights reserved.
 
ERROR:
ORA-12541: TNS:no listener
 
 
Enter user-name: 
 
$ sqlplus system/oracle@oradb2
(결과생략 : 정상)
$ sqlplus system/oracle@oradb2-vip
(결과생략 : 정상)
$ sqlplus system/oracle@oradb-all
(결과생략 : 정상)
$ sqlplus system/oracle@oradb-vipall
(결과생략 : 정상)
$ sqlplus system/oracle@oradb-scan
(결과생략 : 정상)

oradb1, oradb1-vip 접속시 grid도 죽었기때문에 ORA-12541 에러가 발생하면서 접속되지 않음
oradb2, oradb2-vip, 2번 노드 ip나 vip, ip를 2개 넣어둔 oradb-all, oradb-vipall, oradb-scan은 정상접속됨

 

 

ping 테스트

1
2
3
4
5
6
7
8
9
10
$ ping 192.168.137.10
(결과생략 : 정상)
$ ping 192.168.137.100
(결과생략 : 정상)
$ ping 192.168.137.20
(결과생략 : 정상)
$ ping 192.168.137.200
(결과생략 : 정상)
$ ping 192.168.137.150
(결과생략 : 정상)

ping은 모두 정상임

 

 

vip 상태 확인(2번 노드에서 확인)

1
2
3
4
5
6
7
8
$ crsctl stat res -t | grep -A1 -i vip
ora.oel11db1.vip
      1        ONLINE  INTERMEDIATE oel11db2                 FAILED OVER
ora.oel11db2.vip
      1        ONLINE  ONLINE       oel11db2
--
ora.scan1.vip
      1        ONLINE  ONLINE       oel11db2

1번 노드의 vip가 2번 노드로 넘어감(FAILED OVER됨)

 

 

테스트3 결과 :
tnsping은 oradb1, oradb1-vip에서 TNS-12541 에러가 발생하며 실패함
oradb2, oradb2-vip, oradb-all, oradb-vipall, oradb-scan은 tnsping 성공함
sqlplus를 통한 db 접속은 oradb1, oradb1-vip에서 ORA-12541 에러가 발생하며 실패함
oradb2, oradb2-vip, oradb-all, oradb-vipall, oradb-scan은 정상접속됨
ping은 모두 정상이었음

 

 

테스트4. OS 종료 상태에서 확인
OS 종료

1
# poweroff

 

 

tnsping 테스트(클라이언트에서 수행)
시간 측정을 위해 time 명령어도 같이 사용함

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
$ time tnsping oradb1
 
TNS Ping Utility for Linux: Version 19.0.0.0.0 - Production on 07-JUN-2025 22:03:15
 
Copyright (c) 1997, 2019, Oracle.  All rights reserved.
 
Used parameter files:
/ORA19/app/oracle/product/19.0.0/db_1/network/admin/sqlnet.ora
 
 
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.137.10)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORADB)))
TNS-12543: TNS:destination host unreachable
 
real    0m3.083s
user    0m0.001s
sys     0m0.007s
 
$ time tnsping oradb1-vip
 
TNS Ping Utility for Linux: Version 19.0.0.0.0 - Production on 07-JUN-2025 22:03:50
 
Copyright (c) 1997, 2019, Oracle.  All rights reserved.
 
Used parameter files:
/ORA19/app/oracle/product/19.0.0/db_1/network/admin/sqlnet.ora
 
 
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.137.100)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORADB)))
TNS-12541: TNS:no listener
 
real    0m0.007s
user    0m0.002s
sys     0m0.005s
 
$ time tnsping oradb2
 
TNS Ping Utility for Linux: Version 19.0.0.0.0 - Production on 07-JUN-2025 22:04:39
 
Copyright (c) 1997, 2019, Oracle.  All rights reserved.
 
Used parameter files:
/ORA19/app/oracle/product/19.0.0/db_1/network/admin/sqlnet.ora
 
 
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.137.20)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORADB)))
OK (0 msec)
 
real    0m0.008s
user    0m0.003s
sys     0m0.004s
$ time tnsping oradb2-vip
 
TNS Ping Utility for Linux: Version 19.0.0.0.0 - Production on 07-JUN-2025 22:04:41
 
Copyright (c) 1997, 2019, Oracle.  All rights reserved.
 
Used parameter files:
/ORA19/app/oracle/product/19.0.0/db_1/network/admin/sqlnet.ora
 
 
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.137.200)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORADB)))
OK (0 msec)
 
real    0m0.008s
user    0m0.003s
sys     0m0.004s
 
$ time tnsping oradb-all
 
TNS Ping Utility for Linux: Version 19.0.0.0.0 - Production on 07-JUN-2025 22:05:04
 
Copyright (c) 1997, 2019, Oracle.  All rights reserved.
 
Used parameter files:
/ORA19/app/oracle/product/19.0.0/db_1/network/admin/sqlnet.ora
 
 
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.137.10)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.137.20)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORADB)))
OK (3080 msec)
 
real    0m3.086s
user    0m0.005s
sys     0m0.003s
 
$ time tnsping oradb-vipall
 
TNS Ping Utility for Linux: Version 19.0.0.0.0 - Production on 07-JUN-2025 22:05:17
 
Copyright (c) 1997, 2019, Oracle.  All rights reserved.
 
Used parameter files:
/ORA19/app/oracle/product/19.0.0/db_1/network/admin/sqlnet.ora
 
 
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.137.100)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.137.200)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORADB)))
OK (0 msec)
 
real    0m0.008s
user    0m0.003s
sys     0m0.004s
$ time tnsping oradb-scan
 
TNS Ping Utility for Linux: Version 19.0.0.0.0 - Production on 07-JUN-2025 22:05:20
 
Copyright (c) 1997, 2019, Oracle.  All rights reserved.
 
Used parameter files:
/ORA19/app/oracle/product/19.0.0/db_1/network/admin/sqlnet.ora
 
 
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.137.150)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORADB)))
OK (0 msec)
 
real    0m0.008s
user    0m0.003s
sys     0m0.005s

oradb1은 3초 대기 후 TNS-12543 에러가 발생함, oradb1-vip는 바로 TNS-12541 에러가 발생함
oradb-all는 3초 대기 후 tnsping 성공함
oradb2, oradb2-vip, oradb-vipall, oradb-scan은 빠르게 tnsping 성공함

 

 

sqlplus로 db 접속 테스트(클라이언트에서 수행)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ sqlplus system/oracle@oradb1
 
SQL*Plus: Release 19.0.0.0.0 - Production on Sat Jun 7 22:09:30 2025
Version 19.3.0.0.0
 
Copyright (c) 1982, 2019, Oracle.  All rights reserved.
 
ERROR:
ORA-12543: TNS:destination host unreachable
 
$ sqlplus system/oracle@oradb1-vip
 
SQL*Plus: Release 19.0.0.0.0 - Production on Sat Jun 7 22:10:39 2025
Version 19.3.0.0.0
 
Copyright (c) 1982, 2019, Oracle.  All rights reserved.
 
ERROR:
ORA-12541: TNS:no listener

oradb1는 3초 대기 후 ORA-12543 에러가 발생함, oradb1-vip는 바로 ORA-12541 에러가 발생함
oradb-all는 3초 대기 후 접속 성공함
oradb2, oradb2-vip, oradb-vipall, oradb-scan은 빠르게 접속 성공함

 

 

ping 테스트

1
2
3
4
5
6
7
8
9
10
11
12
13
$ ping 192.168.137.10
PING 192.168.137.10 (192.168.137.10) 56(84) bytes of data.
^C
--- 192.168.137.10 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1039ms
$ ping 192.168.137.100
(결과생략 : 정상)
$ ping 192.168.137.20
(결과생략 : 정상)
$ ping 192.168.137.200
(결과생략 : 정상)
$ ping 192.168.137.150
(결과생략 : 정상)

1번 노드 Public IP만 ping이 안가고 나머지는 모두 정상 적으로 ping이 감

 

 

테스트4 결과 :
tnsping은 oradb1는 3초 대기 후 TNS-12543 에러가 발생함, oradb1-vip는 바로 TNS-12541 에러가 발생함
oradb-all은 3초 대기 후 tnsping 성공함
oradb2, oradb2-vip, oradb-vipall, oradb-scan은 빠르게 tnsping 성공함
sqlplus를 통한 db 접속은 oradb1은 3초 대기 후 ORA-12543 에러가 발생함, oradb1-vip는 바로 ORA-12541 에러가 발생함
oradb-all는 3초 대기 후 접속 성공함
oradb2, oradb2-vip, oradb-vipall, oradb-scan은 빠르게 접속 성공함
ping은 1번 노드 Public IP만 ping이 안가고 나머지는 모두 정상 적으로 ping이 감

 

 

테스트 결과 정리
테스트1 결과 : 모두 정상 접속됨

 

테스트2 결과 :
tnsping은 모두 성공했고, sqlplus를 통한 db 접속만 oradb1, oradb1-vip에서 ORA-12514 에러가 발생하며 실패함
oradb2, oradb2-vip, oradb-all, oradb-vipall, oradb-scan은 정상접속됨
ping은 모두 정상이었음
=> 1번 노드의 인스턴스를 종료한 경우, 해당 노드의 vip는 이동하지 않고 유지됨. 리스너는 살아 있으나 서비스 정보가 없어, 해당 vip를 통한 접속 시 ORA-12514 에러가 발생함
하지만 oradb2나 scan, 다중 노드 접속 구성에서는 자동으로 우회되어 정상적으로 접속됨
인스턴스만 죽은 경우 vip는 이동하지 않으며, 단일 vip 접속 시 오류 발생 가능함, scan 또는 다중 노드 구성을 통해 우회 접속이 가능함

 

테스트3 결과 :
tnsping은 oradb1, oradb1-vip에서 TNS-12541 에러가 발생하며 실패함
oradb2, oradb2-vip, oradb-all, oradb-vipall, oradb-scan은 tnsping 성공함
sqlplus를 통한 db 접속은 oradb1, oradb1-vip에서 ORA-12541 에러가 발생하며 실패함
oradb2, oradb2-vip, oradb-all, oradb-vipall, oradb-scan은 정상접속됨
ping은 모두 정상이었음
=> 1번 노드의 grid 종료 시 해당 노드의 vip는 2번 노드로 failover됨. 이로 인해서 oradb1, oradb1-vip는 listener가 존재하지 않아 ORA-12541 오류가 발생함, oradb2, scan 등은 정상적으로 접속됨.
grid가 종료되면 vip가 정상 노드로 이동(failover)되고, 리스너가 없는 vip는 접속이 불가함. scan 또는 다중 노드 구성을 통해 우회 접속이 가능함

 

테스트4 결과 :
tnsping은 oradb1는 3초 대기 후 TNS-12543 에러가 발생함, oradb1-vip는 바로 TNS-12541 에러가 발생함
oradb-all은 3초 대기 후 tnsping 성공함
oradb2, oradb2-vip, oradb-vipall, oradb-scan은 빠르게 tnsping 성공함
sqlplus를 통한 db 접속은 oradb1은 3초 대기 후 ORA-12543 에러가 발생함, oradb1-vip는 바로 ORA-12541 에러가 발생함
oradb-all는 3초 대기 후 접속 성공함
oradb2, oradb2-vip, oradb-vipall, oradb-scan은 빠르게 접속 성공함
ping은 1번 노드 Public IP만 ping이 안가고 나머지는 모두 정상 적으로 ping이 감
=> 1번 노드의 os 종료 시 해당 노드의 Public IP는 ping이 되지 않고, vip는 2번 노드로 failover됨. oradb1은 3초 대기 후 ORA-12543, oradb1-vip는 바로 ORA-12541 오류가 발생함.
oradb-all은 3초 대기 후 접속되며, oradb2, scan 등은 바로 접속됨.
노드 전체가 다운될 경우 vip가 정상 노드로 이동(failover)되고, 단일 접속 구성은 오류 발생 가능성이 있음. 다중 주소 또는 scan 구성으로 접속을 유지할 수 있음.

 

참고. oracle docs에 설명된 vip 내용
If a node fails, then the VIP address fails over to another node on which the VIP address can accept TCP connections, but it does not accept connections to the Oracle database.
Clients that attempt to connect to a VIP address not residing on its home node receive a rapid connection refused error instead of waiting for TCP connect timeout messages.
When the network on which the VIP is configured comes back online, Oracle Clusterware fails back the VIP to its home node, where connections are accepted. Generally, VIP addresses fail over when:
- The node on which a VIP address runs fails
- All interfaces for the VIP address fail
- All interfaces for the VIP address are disconnected from the network
노드에 장애가 발생하면 VIP 주소는 TCP 연결을 허용할 수 있는 다른 노드로 페일오버되지만, Oracle 데이터베이스 연결은 허용하지 않습니다.
홈 노드에 없는 VIP 주소에 연결을 시도하는 클라이언트는 TCP 연결 시간 초과 메시지를 기다리는 대신 "빠른 연결 거부" 오류를 수신합니다.
VIP가 구성된 네트워크가 다시 온라인 상태가 되면 Oracle Clusterware는 VIP를 홈 노드로 페일백하여 연결이 허용됩니다. 일반적으로 VIP 주소는 다음과 같은 경우 페일오버됩니다.
- VIP 주소가 실행되는 노드에 장애가 발생한 경우
- VIP 주소의 모든 인터페이스에 장애가 발생한 경우
- VIP 주소의 모든 인터페이스가 네트워크에서 연결이 끊어진 경우
참고 : https://docs.oracle.com/en/database/oracle/oracle-database/19/racad/introduction-to-oracle-rac.html#GUID-6C72F02D-BB43-4C56-9F46-244C8D6BB670

 

 

결론 : 노드 장애(grid, os down)시 vip가 정상노드로 넘어가는 이유는 vip를 통해 연결된 클라이언트에게 장애 발생 사실을 신속하게 알리기 위임

 

 

참조 : 

https://docs.oracle.com/en/database/oracle/oracle-database/19/rilin/understanding-scans.html
https://docs.oracle.com/en/database/oracle/oracle-database/19/rilin/connection-failover-for-oracle-rac-databases.html
https://docs.oracle.com/en/database/oracle/oracle-database/19/racad/introduction-to-oracle-rac.html#GUID-6C72F02D-BB43-4C56-9F46-244C8D6BB670