OS 환경 : Oracle Linux 8.4 (64bit)
DB 환경 : Oracle Database 23.4.0.24.05 ai Free
방법 : 오라클 23ai 뉴피처 tns 에러 메세지 개선
오라클 23ai 부터 tns 관련 에러 메세지들이 조금 더 개선됨
오류 의미 링크, 오류 원인 및 문제 해결을 위한 조치사항 등 추가 정보를 제공하기 때문에 TNS 오류 메시지를 분석하기 용이해짐
어떻게 좋아졌는지 테스트를 통해 알아봄
테스트
1. tnsnames.ora 파일에 alias가 존재하지 않는 경우
2. tnsnames.ora 파일의 hostname이 잘못된 경우
3. 리스너가 기동중이지 않은 경우
4. 리스너가 기동중이지만 서비스 중이지 않은 경우
5. tnsnames.ora 파일의 SERVICE_NAME이 잘못된 경우
6. 유저이름이나 패스워드가 틀린 경우
테스트
1. tnsnames.ora 파일에 alias가 존재하지 않는 경우
tnsnames.ora 파일 확인(19c)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
$ cat tnsnames.ora
# tnsnames.ora Network Configuration File: /ORA19/app/oracle/product/19.0.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
LISTENER_ORACLE19 =
(ADDRESS = (PROTOCOL = TCP)(HOST = ora19)(PORT = 1521))
ora19a =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ora19)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = oracle19)
)
)
|
현재 ora19a 라는 alias로 정상 접속 가능한 상황임
잘못된 tns alias로 tns 접속 시도(19c)
(ora19a가 아닌 존재하지 않는 ora19b로 접속 시도함)
1
2
3
4
5
6
7
8
9
10
11
12
|
$ sqlplus system/oracle@ora19b
SQL*Plus: Release 19.0.0.0.0 - Production on Sat May 4 17:04:03 2024
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
ERROR:
ORA-12154: TNS:could not resolve the connect identifier specified
Enter user-name:
|
ORA-12154 에러만 발생함
tnsnames.ora 파일 확인(23ai)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
$ cat tnsnames.ora
# tnsnames.ora Network Configuration File: /opt/oracle/product/23ai/dbhomeFree/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
FREE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ora23)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = FREE)
)
)
LISTENER_FREE =
(ADDRESS = (PROTOCOL = TCP)(HOST = ora23)(PORT = 1521))
|
현재 FREE 라는 alias로 정상 접속 가능한 상황임
잘못된 tns alias로 tns 접속 시도(23ai)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
$ sqlplus system/oracle@FREE1
SQL*Plus: Release 23.0.0.0.0 - Production on Sat May 4 17:05:03 2024
Version 23.4.0.24.05
Copyright (c) 1982, 2023, Oracle. All rights reserved.
ERROR:
ORA-12154: Cannot connect to database. Could not find alias FREE1 in
/opt/oracle/product/23ai/dbhomeFree/network/admin/tnsnames.ora.
Help: https://docs.oracle.com/error-help/db/ora-12154/
Enter user-name:
|
ORA-12154 에러와 함께 FREE1이라는 alias를 tnsnames.ora 파일에서 찾을수 없다고 까지 알려줌
그리고 에러 메세지 설명 링크까지 제공됨
2. tnsnames.ora 파일의 hostname이 잘못된 경우
tnsnames.ora 파일 수정(19c)
현재 19c db 서버의 hostname은 ora19임, tnsnames.ora 파일의 host를 ora199로 변경
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
$ cat tnsnames.ora
# tnsnames.ora Network Configuration File: /ORA19/app/oracle/product/19.0.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
LISTENER_ORACLE19 =
(ADDRESS = (PROTOCOL = TCP)(HOST = ora19)(PORT = 1521))
ora19a =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ora199)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = oracle19)
)
)
|
ora19a 라는 tns alias의 HOST를 ora199로 변경함
잘못된 hostname 이 등록된 alias 로 tns 접속 시도(19c)
1
2
3
4
5
6
7
8
9
10
11
12
|
$ sqlplus system/oracle@ora19a
SQL*Plus: Release 19.0.0.0.0 - Production on Sat May 4 17:10:58 2024
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
ERROR:
ORA-12545: Connect failed because target host or object does not exist
Enter user-name:
|
ORA-12545 에러만 발생함
tnsnames.ora 파일 수정(23ai)
현재 23ai db 서버의 hostname은 ora23임, tnsnames.ora 파일의 host를 ora233로 변경
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
$ cat tnsnames.ora
# tnsnames.ora Network Configuration File: /opt/oracle/product/23ai/dbhomeFree/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
FREE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ora233)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = FREE)
)
)
LISTENER_FREE =
(ADDRESS = (PROTOCOL = TCP)(HOST = ora23)(PORT = 1521))
|
FREE 라는 tns alias의 HOST를 ora233로 변경함
잘못된 hostname 이 등록된 alias 로 tns 접속 시도(23ai)
1
2
3
4
5
6
7
8
9
10
11
12
13
|
$ sqlplus system/oracle@FREE
SQL*Plus: Release 23.0.0.0.0 - Production on Sat May 4 17:11:58 2024
Version 23.4.0.24.05
Copyright (c) 1982, 2023, Oracle. All rights reserved.
ERROR:
ORA-12545: Connect failed because target host or object does not exist
Help: https://docs.oracle.com/error-help/db/ora-12545/
Enter user-name:
|
ORA-12545 에러와 함께 에러 메세지 설명 링크가 제공됨
이 링크를 따라 들어가서 보면 에러 코드 원인이 "지정된 주소가 유효하지 않거나 연결하려는 프로그램이 존재하지 않음" 이라고 나옴
Action 부분에도 ADDRESS 매개변수가 올바르게 입력되었는지 확인한뒤,
프로토콜이 TCP/IP인 경우 TNSNAMES.ORA 파일을 편집하여 호스트 이름을 숫자 IP 주소로 변경하고 다시 시도하라고 나옴
3. 리스너가 기동중이지 않은 경우
리스너 종료(19c)
1
2
3
4
5
6
7
8
|
$ lsnrctl stop
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 04-MAY-2024 17:16:50
Copyright (c) 1991, 2019, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=ora19)(PORT=1521)))
The command completed successfully
|
정상적으로 종료됨
tns 접속 시도(19c)
1
2
3
4
5
6
7
8
9
10
11
12
|
$ sqlplus system/oracle@ora19
SQL*Plus: Release 19.0.0.0.0 - Production on Sat May 4 17:17:47 2024
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
ERROR:
ORA-12541: TNS:no listener
Enter user-name:
|
ORA-12541 에러만 발생함
리스너 종료(23ai)
1
2
3
4
5
6
7
8
|
$ lsnrctl stop
LSNRCTL for Linux: Version 23.0.0.0.0 - Production on 04-MAY-2024 17:18:47
Copyright (c) 1991, 2023, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=ora23)(PORT=1521)))
The command completed successfully
|
정상적으로 종료됨
tns 접속 시도(23ai)
1
2
3
4
5
6
7
8
9
10
11
12
13
|
$ sqlplus system/oracle@FREE
SQL*Plus: Release 23.0.0.0.0 - Production on Sat May 4 17:19:47 2024
Version 23.4.0.24.05
Copyright (c) 1982, 2023, Oracle. All rights reserved.
ERROR:
ORA-12541: Cannot connect. No listener at host 192.168.137.23 port 1521.
Help: https://docs.oracle.com/error-help/db/ora-12541/
Enter user-name:
|
ORA-12541 에러가 발생하고 현재 접속하려는 ip(host)에 리스너가 없다고 나옴
그리고 에러 메세지 설명 링크까지 제공됨
4. 리스너가 기동중이지만 서비스 중이지 않은 경우
리스너 기동(19c)
리스너 기동 후 바로 접속 시도(리스너에 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
|
$ lsnrctl start
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 04-MAY-2024 17:20:12
Copyright (c) 1991, 2019, Oracle. All rights reserved.
Starting /ORA19/app/oracle/product/19.0.0/db_1/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 19.0.0.0.0 - Production
System parameter file is /ORA19/app/oracle/product/19.0.0/db_1/network/admin/listener.ora
Log messages written to /ORA19/app/oracle/diag/tnslsnr/ora19/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ora19)(PORT=1521)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=ora19)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date 04-MAY-2024 17:20:12
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /ORA19/app/oracle/product/19.0.0/db_1/network/admin/listener.ora
Listener Log File /ORA19/app/oracle/diag/tnslsnr/ora19/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ora19)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
The listener supports no services
The command completed successfully
|
리스너가 기동만 되고 아직 서비스가 붙지 않은 상태임
바로 접속 시도(19c)
1
2
3
4
5
6
7
8
9
10
11
12
|
$ sqlplus system/oracle@ora19
SQL*Plus: Release 19.0.0.0.0 - Production on Sat May 4 17:20:14 2024
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
ERROR:
ORA-12541: TNS:no listener
Enter user-name: ^C
|
ORA-12541 에러만 발생함
리스너 기동(23ai)
리스너 기동 후 바로 접속 시도(리스너에 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
|
$ lsnrctl start
LSNRCTL for Linux: Version 23.0.0.0.0 - Production on 04-MAY-2024 17:21:14
Copyright (c) 1991, 2023, Oracle. All rights reserved.
Starting /opt/oracle/product/23ai/dbhomeFree//bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 23.0.0.0.0 - Production
System parameter file is /opt/oracle/product/23ai/dbhomeFree/network/admin/listener.ora
Log messages written to /opt/oracle/diag/tnslsnr/ora23/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ora23)(PORT=1521)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=ora23)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 23.0.0.0.0 - Production
Start Date 04-MAY-2024 17:21:14
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Default Service FREE
Listener Parameter File /opt/oracle/product/23ai/dbhomeFree/network/admin/listener.ora
Listener Log File /opt/oracle/diag/tnslsnr/ora23/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ora23)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
The listener supports no services
The command completed successfully
|
리스너가 기동만 되고 아직 서비스가 붙지 않은 상태임
바로 접속 시도(23ai)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
$ sqlplus system/oracle@FREE
SQL*Plus: Release 23.0.0.0.0 - Production on Sat May 4 17:22:14 2024
Version 23.4.0.24.05
Copyright (c) 1982, 2023, Oracle. All rights reserved.
ERROR:
ORA-12514: Cannot connect to database. Service FREE is not registered with the
listener at host 192.168.137.23 port 1521.
(CONNECTION_ID=F3zP+2ZF8DTgYxeJqMCuLg==)
Help: https://docs.oracle.com/error-help/db/ora-12514/
Enter user-name: ^C
|
ORA-12541가 아닌 ORA-12514 에러가 발생하며 FREE service가 등록되지 않았다고 알려줌
리스너와 포트까지 알려주고 추가로 에러 메세지 설명 링크까지 제공됨
5. tnsnames.ora 파일의 SERVICE_NAME이 잘못된 경우
tnsnames.ora 파일 확인(19c)
기존 oracle19 라는 SERVICE_NAME을 oracle199로 변경
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
$ cat tnsnames.ora
# tnsnames.ora Network Configuration File: /ORA19/app/oracle/product/19.0.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
LISTENER_ORACLE19 =
(ADDRESS = (PROTOCOL = TCP)(HOST = ora19)(PORT = 1521))
ora19a =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ora19)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = oracle199)
)
)
|
잘못된 SERVICE_NAME을 가진 tns 접속 시도(19c)
1
2
3
4
5
6
7
8
9
10
11
12
13
|
$ sqlplus system/oracle@ora19a
SQL*Plus: Release 19.0.0.0.0 - Production on Sat May 4 17:28:54 2024
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:
|
ORA-12514 에러만 발생함
tnsnames.ora 파일 확인(23ai)
기존 FREE 라는 SERVICE_NAME을 FREE9로 변경
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
$ cat tnsnames.ora
# tnsnames.ora Network Configuration File: /opt/oracle/product/23ai/dbhomeFree/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
FREE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ora23)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = FREE9)
)
)
LISTENER_FREE =
(ADDRESS = (PROTOCOL = TCP)(HOST = ora23)(PORT = 1521))
|
잘못된 SERVICE_NAME을 가진 tns 접속 시도(23ai)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
$ sqlplus system/oracle@FREE
SQL*Plus: Release 23.0.0.0.0 - Production on Sat May 4 17:29:54 2024
Version 23.4.0.24.05
Copyright (c) 1982, 2023, Oracle. All rights reserved.
ERROR:
ORA-12514: Cannot connect to database. Service FREE9 is not registered with the
listener at host 192.168.137.23 port 1521.
(CONNECTION_ID=F3z0sHhZ8OzgYxeJqMBd0Q==)
Help: https://docs.oracle.com/error-help/db/ora-12514/
Enter user-name:
|
ORA-12514 에러가 발생하며 FREE9 service가 등록되지 않았다고 알려줌
리스너와 포트까지 알려주고 추가로 에러 메세지 설명 링크까지 제공됨
6. 유저이름이나 패스워드가 틀린 경우
다른 패스워드로 로그인 시도(19c)
기존 패스워드는 oracle인데 oracle1로 로그인 시도함
1
2
3
4
5
6
7
8
9
10
11
12
|
$ sqlplus system/oracle1@ora19a
SQL*Plus: Release 19.0.0.0.0 - Production on Sat May 4 17:36:22 2024
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
ERROR:
ORA-01017: invalid username/password; logon denied
Enter user-name:
|
ORA-01017 에러만 발생함
다른 패스워드로 로그인 시도(23ai)
기존 패스워드는 oracle인데 oracle1로 로그인 시도함
1
2
3
4
5
6
7
8
9
10
11
12
13
|
$ sqlplus system/oracle1@FREE
SQL*Plus: Release 23.0.0.0.0 - Production on Sat May 4 17:37:22 2024
Version 23.4.0.24.05
Copyright (c) 1982, 2023, Oracle. All rights reserved.
ERROR:
ORA-01017: invalid credential or not authorized; logon denied
Help: https://docs.oracle.com/error-help/db/ora-01017/
Enter user-name:
|
ORA-01017 에러 메세지가 약간 바뀌었고 에러 메세지 설명 링크까지 제공됨
결론 : tns 에러 메세지가 좀더 명확해지고 힌트 및 에러코드 설명 링크까지 나오기 때문에 tns 접속 관련 문제 발생시 트러블 슈팅을 더 쉽게 할 수 있음
참조 :
https://apex.oracle.com/pls/apex/features/r/dbfeatures/features?feature_id=1718
https://docs.oracle.com/en/database/oracle/oracle-database/23/netag/troubleshooting-oracle-net-services.html#GUID-F521AB0A-B67C-432B-B899-8F856EB51CAE
https://docs.oracle.com/en/error-help/db/ora-12154/?r=23ai
https://docs.oracle.com/en/error-help/db/ora-12545/?r=23ai
https://docs.oracle.com/en/error-help/db/ora-12541/?r=23ai
https://docs.oracle.com/en/error-help/db/ora-12514/?r=23ai
https://docs.oracle.com/en/error-help/db/ora-01017/?r=23ai
'ORACLE > Admin' 카테고리의 다른 글
오라클 23ai 신기능 하이브리드 read-only pdb (0) | 2024.05.10 |
---|---|
오라클 23ai 신기능 from 절 없는 select 문 (0) | 2024.05.09 |
오라클 23ai 신기능 group by 시 alias 및 position 사용 (0) | 2024.05.07 |
오라클 23ai 신기능 if [not] exists 구문 (0) | 2024.05.05 |
오라클 23ai 신기능 update, delete 시 direct join (0) | 2024.05.04 |