프린트 하기

내맘대로긍정이 알려주는

Oracle 23ai 신기능
무료 세미나 발표자료

다운로드 trending_flat

OS환경 : Cent OS 7.9, Oracle Linux 7.6 (64bit)

 

DB 환경 : Oracle Database 19.3.0.0, Oracle Client 11gR2, 12cR2, 19c

 

방법 : 오라클 19c 클라이언트 서버의 /etc/resolv.conf 의 잘못된 dns 주소로 인한 sqlplus tns 연결 지연 테스트

오라클 클라이언트 서버의 /etc/resolv.conf 의 잘못된 dns 주소로 인한

sqlplus tns 연결 지연 현상을 확인한 뒤 테스트 해봄

 

 

클라이언트 서버 정보 : CentOS 7 / 192.168.137.7 / 11gR2 클라이언트, 12cR2 클라이언트, 19c 클라이언트
DB 서버 정보 : Oracle Linux 7 / 192.168.137.19 / 19.3 DB / sid:oracle19
클라이언트에 등록된 TNS 정보

1
2
3
4
5
6
7
8
9
$ cat $ORACLE_HOME/network/admin/tnsnames.ora
TEST =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.137.19)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = oracle19)
    )
  )

 

 

ifconfig로 현재 ip 확인

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
# ifconfig
ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.137.7  netmask 255.255.255.0  broadcast 192.168.137.255
        inet6 fe80::20c:29ff:fe2b:d1a3  prefixlen 64  scopeid 0x20
 
        ether 00:0c:29:2b:d1:a3  txqueuelen 1000  (Ethernet)
        RX packets 1890955  bytes 2713533627 (2.5 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 157977  bytes 37274559 (35.5 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 56  bytes 4626 (4.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 56  bytes 4626 (4.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 
virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:26:41:8a  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

 

ens32 인터페이스의 정보 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# cat /etc/sysconfig/network-scripts/ifcfg-ens32
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="no"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens32"
UUID="0a7b4b10-10f8-4d75-95dc-e6886b9fcbcd"
DEVICE="ens32"
ONBOOT="yes"
IPADDR="192.168.137.7"
PREFIX="24"
GATEWAY="192.168.137.2"
DNS1="168.126.63.1"

 

 

기존 /etc/resolv.conf의 dns 정보 확인

1
2
3
# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 168.126.63.1

정상적인 dns 주소를 가지고 있음

 

 

tnsping 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
$ tnsping test
 
TNS Ping Utility for Linux: Version 11.2.0.4.0 - Production on 18-JAN-2024 14:23:44
 
Copyright (c) 1997, 2013, Oracle.  All rights reserved.
 
Used parameter files:
/home/oracle/app/oracle/product/11.2.0/network/admin/sqlnet.ora
 
 
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.137.19)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = oracle19)))
OK (0 msec)

tnsping 지연 없음

 

 

sqlplus 접속 확인

1
2
3
date
sqlplus system/oracle@test
select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') dt from dual;

위 커맨드 복사해서 모두 붙여넣기

 

 

결과

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ date
Thu Jan 18 14:24:17 KST 2024
 
$ sqlplus system/oracle@test
 
SQL*Plus: Release 11.2.0.4.0 Production on Thu Jan 18 14:24:17 2024
 
Copyright (c) 1982, 2013, Oracle.  All rights reserved.
 
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
 
SQL>
TO_CHAR(SYSDATE,'YY
-------------------
2024-01-18 14:24:17

정상적으로 1초 이내로 sqlplus 연결됨

 

 

ifcfg_ens32 인터페이스의 DNS 부분 주석 처리

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# vi /etc/sysconfig/network-scripts/ifcfg-ens32
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="no"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens32"
UUID="0a7b4b10-10f8-4d75-95dc-e6886b9fcbcd"
DEVICE="ens32"
ONBOOT="yes"
IPADDR="192.168.137.7"
PREFIX="24"
GATEWAY="192.168.137.2"
#DNS1="168.126.63.1"

 

 

네트워크 restart

1
2
# systemctl restart NetworkManager.service
# systemctl restart network

 

 

/etc/resolv.conf의 dns 값 이상한 숫자로 변경

1
2
# cat /etc/resolv.conf
nameserver 111.222.111.222

 

 

tnsping 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
$ tnsping test
 
TNS Ping Utility for Linux: Version 11.2.0.4.0 - Production on 18-JAN-2024 14:28:02
 
Copyright (c) 1997, 2013, Oracle.  All rights reserved.
 
Used parameter files:
/home/oracle/app/oracle/product/11.2.0/network/admin/sqlnet.ora
 
 
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.137.19)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = oracle19)))
OK (0 msec)

tnsping 지연 없다고 나옴

 

 

sqlplus 접속 확인

1
2
3
date
sqlplus system/oracle@test
select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') dt from dual;

위 커맨드 복사해서 모두 동시에 붙여넣기

 

 

결과

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ date
Thu Jan 18 14:28:23 KST 2024
 
$ sqlplus system/oracle@test
 
SQL*Plus: Release 11.2.0.4.0 Production on Thu Jan 18 14:28:23 2024
 
Copyright (c) 1982, 2013, Oracle.  All rights reserved.  <------- 이까지만 나오고 10초간 대기함
 
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
 
SQL>
DT
-------------------
2024-01-18 14:28:33

2024-01-18 14:28:23초에 sqlplus를 실행하고 sqlplus 자체는 바로 실행된 뒤
SQL 입력창은 10초 뒤인 14:28:33에 나옴, 쿼리도 직후 바로 수행됨

 

 

sqlplus ezconnect 방법으로 연결 시도

1
$ sqlplus system/oracle@192.168.137.19:1521/oracle19

동일하게 느림

 

 

sqlplus 접속 이후 conn 명령으로 다른 유저로 접속하는것은 빠름

1
2
3
4
SQL> conn imsi/imsi@test
Connected.
SQL> conn system/oracle@test
Connected.

(지연없이 연결됨)

 

 

클라이언트 버전을 11gR2가 아닌 12cR2나 19c로 변경했을때는 증상이 각각 달랐음
12cR2 클라이언트
tnsping 확인

1
2
3
4
5
6
7
8
9
10
$ tnsping test
 
TNS Ping Utility for Linux: Version 12.2.0.1.0 - Production on 18-JAN-2024 14:34:52
 
Copyright (c) 1997, 2016, Oracle.  All rights reserved.
 
Used parameter files:
/home/oracle/app12/oracle/product/12cr2/network/admin/sqlnet.ora
 
TNS-03505: Failed to resolve name

TNS-03505: Failed to resolve name 가 발생함

 

 

sqlplus 접속 확인

1
2
3
4
5
6
7
8
9
10
11
$ sqlplus system/oracle@test
 
SQL*Plus: Release 12.2.0.1.0 Production on Thu Jan 18 14:35:59 2024
 
Copyright (c) 1982, 2016, Oracle.  All rights reserved.
 
ERROR:
ORA-12154: TNS:could not resolve the connect identifier specified
 
 
Enter user-name:

ORA-12154: TNS:could not resolve the connect identifier specified 가 나오며 연결되지 않음

 

 

19c 클라이언트
tnsping 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
$ tnsping test
 
TNS Ping Utility for Linux: Version 19.0.0.0.0 - Production on 18-JAN-2024 14:38:42
 
Copyright (c) 1997, 2019, Oracle.  All rights reserved.
 
Used parameter files:
/home/oracle/app19/oracle/product/19c/network/admin/sqlnet.ora
 
 
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.137.19)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = oracle19)))
OK (10020 msec)

tnsping이 성공은 하지만 10020 msec만에 붙음

 

 

sqlplus 접속 확인

1
2
3
date
sqlplus system/oracle@test
select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') dt from dual;

위 커맨드 복사해서 모두 동시에 붙여넣기

 

 

결과

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ date
Thu Jan 18 14:40:22 KST 2024
 
$ sqlplus system/oracle@test
 
SQL*Plus: Release 19.0.0.0.0 - Production on Thu Jan 18 14:40:22 2024
Version 19.3.0.0.0
 
Copyright (c) 1982, 2019, Oracle.  All rights reserved.  <------- 이까지만 나오고 10초간 대기함
 
Last Successful login time: Thu Jan 18 2024 14:39:53 +09:00
 
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
 
SQL>
DT
-------------------
2024-01-18 14:40:42

19c 클라이언트에서 sqlplus tns 연결 시도시 20초 지연 후 연결됨

 

 

마찬가지로 sqlplus 접속 이후 conn 명령으로 다른 유저로 접속하는것은 빠름

1
2
3
4
SQL> conn imsi/imsi@test
Connected.
SQL> conn system/oracle@test
Connected.

(지연없이 연결됨)

 

 

sqlplus 를 통한 tns 접속시 dns를 먼저 체크하는 기능이 있어 이런 현상이 발생하는듯함
sqlplus 를 통한 tns 접속시 지연이 발생한다면 /etc/resolv.conf 확인도 필요함

 

 

참조 : https://positivemh.tistory.com/473

 

외부에서 오라클 db가 접속 안될 때 확인사항

OS환경 : Oracle Linux 6.8 (64bit) DB 환경 : Oracle Database 11.2.0.4 방법 : 외부에서 오라클 db가 접속 안될 때 확인사항 상황 설명 : 기존에 DB서버(192.168.0.30)에 오라클db가 구성되어 있고 AP서버(192.168.0.20)에

positivemh.tistory.com