이전 포스트 : [Oracle] DBMS_JOB & DBMS_SCHEDULER
다음 포스트 : [Oracle] FLASHBACK
Routing Protocol
입니다. A 네트워크의 Router는 B 네트워크의 Router에게 F 호스트의 IP 주소를 넘겨줍니다.사용자가 SQL 문장을 수행하면 User Process라는 Process가 생성되어서 사용자가 작성한 SQL 문장을 서버 쪽으로 전달해 줍니다. User Process는 SQL 문장을 작성하는 프로그램을 의미하고 대표적으로 SQL*PLUS
, SQL Developer
, Toad
, Orange
가 있습니다. 이때 User Process는 어떻게 자신이 전달해야 할 목적지를 알 수 있을까요?
답은 tnsnames.ora
파일입니다. Client 쪽에 Oracle Client Software를 설치하고 적절한 설정을 하게 되면 (netca 등을 사용해서) $ORACLE_HOME/network/admin/tnsnames.ora
파일이 생성됩니다. 이 파일에는 User Process가 찾아가야 할 Oracle Server의 SID
, IP
, Port
정보가 자세하게 기록되어 있습니다. User Process는 tnsnames.ora 파일을 참고해서 Server를 찾아갑니다.
만약 사용자가 최초로 SQL 문장을 실행하는 것이라면 User Process가 Oracle Server를 찾아 갔을 때 Listener를 먼저 만나게 됩니다(1
). Listener가 listener.ora
파일을 참고해서 해당 요청에 문제가 없는지 검사한 후 Database Instance에 호출을 넣어서 실제 처리할 실무 담당자인 Server Process를 불러오게 됩니다(2
).
최초 실행이 아닌 두 번째로 수행하는 SQL부터는 Listener를 거치는 과정을 생략하고 바로 Server Process를 찾아가게 됩니다(3
).
Oracle Server에 접속하려는 모든 컴퓨터나 서버는 Client입니다.
Oracle Server에 접속하려면 Oracle Client 프로그램을 설치하고 적절한 설정을 해야만 합니다.
Windows 기반으로 Client 프로그램이 설치되었다고 가정하고 아래 과정을 소개하겠습니다.
작업표시줄의 윈도우 버튼을 누르고 Net Configuration Assistant를 실행합니다.
새로 접속할 서버의 정보를 등록하기 위해 로컬 네트 서비스 이름 구성을 선택합니다.
접속하고자 하는 DB의 SID를 작성합니다
접속할 서버의 IP 주소와 Port를 작성합니다.
설정이 잘 되었는지 테스트를 진행합니다.
Oracle Server의 계정 정보를 입력합니다.
테스트 성공!
에러 메시지(ORA-XXXXX) 발생
ORA-12541
: 만약 Server 쪽에 Listener가 기동하고 있지 않다면ORA-12541
에러 메시지가 나타납니다. 이럴 경우 Server에서lsnrctl start <Listener 이름>
명령을 통해 리스너를 실행시켜주면 됩니다.ORA-01017
: 해당 메시지는 유효하지 않은사용자/비밀번호
를 입력했을 때 발생하는 에러 메시지입니다. Server 쪽에 유효한 사용자를 따로 생성해 주고 그 사용자를 통해 접속해 보도록 합니다.
네트 서비스 이름(Client에서 Server로 접속할 때 사용하는 별명)을 입력합니다.
모든 구성이 완료되었다면 C:\app\client\user\product\19.0.0\client_1\network\admin
에 tnsnames.ora
파일이 아래와 같은 내용을 가지고 생성되어 있습니다.
# tnsnames.ora Network Configuration File: C:\app\client\user\product\19.0.0\client_1\NETWORK\ADMIN\tnsnames.ora
# Generated by Oracle configuration tools.
ORACLE19 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.137.50)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = oracle19)
)
)
설정을 모두 마친 후 Client에서 Server의 listener가 정상인지 확인하기 위해 cmd 창을 열고 tnsping <Net Service 이름>
을 실행할 수 있습니다.
Server 쪽 명령창에서 netca
를 입력해 실행합니다.
그럼 $ORACLE_HOME/network/admin
경로에 listener.ora
파일이 생성되어 있습니다.
$ cd $ORACLE_HOME/network/admin
$ vi listener.ora
# listener.ora Network Configuration File: /ORA19/app/oracle/product/19.0.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
리스너는 Client로부터 신규 접속 요청이 있을 경우 해당 DB와 연결해주는 역할을 합니다. 그래서 리스너는 자신이 관리하는 DB의 SID를 모두 알고 있어야 하며 이 정보들은 모두 listener.ora
파일에 기록되어 있어야 합니다.
client가 자신의 tnsnames.ora
파일을 보고 특정 SID에 접속 요청을 하면 해당 server의 리스너는 자신의 listener.ora
파일을 보고 해당 SID가 존재하는지 확인한 후 연결을 성립시켜 줍니다. 이때 당연히 리스너는 실행되고 있어야 하며, 실행 명령어는 아래와 같습니다.
$ lsnrctl start <리스너 이름>
lsnrctl
리스너와 관련된 모든 명령어는 이 명령어로 시작합니다.
reload
listener.ora
파일의 내용이 변경되면 해당 리스너를 재시작해서 변경된 내용을 적용시켜야 합니다. reload <리스너 이름>
명령어를 사용하면 파일의 내용이 수정되어도 재시작 없이 환경파일만 다시 읽어서 적용시킬 수 있습니다.
$ lsnrctl reload <리스너 이름>
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 25-NOV-2022 13:41:08
Copyright (c) 1991, 2019, Oracle. All rights reserved.
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
The command completed successfully
save_config
리스너의 환경이 변경될 경우 그 내용을 listener.ora
파일에 저장하는 명령어입니다. 주로 운영 중에 set 등의 명령어로 리스너의 환경을 변경한 후에 그 내용을 저장할 때 이용합니다.
$ lsnrctl save_config <리스너 이름>
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 25-NOV-2022 13:41:20
Copyright (c) 1991, 2019, Oracle. All rights reserved.
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
No changes to save for LISTENER.
The command completed successfully
services
현재 리스너가 서비스 중인 목록을 확인하는 명령어입니다.
$ lsnrctl services
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 25-NOV-2022 13:43:05
Copyright (c) 1991, 2019, Oracle. All rights reserved.
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
Services Summary...
Service "oracle19" has 1 instance(s).
Instance "oracle19", status READY, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:0 refused:0 state:ready
LOCAL SERVER
Service "oracle19XDB" has 1 instance(s).
Instance "oracle19", status READY, has 1 handler(s) for this service...
Handler(s):
"D000" established:0 refused:0 current:0 max:1022 state:ready
DISPATCHER <machine: khyup, pid: 6334>
(ADDRESS=(PROTOCOL=tcp)(HOST=khyup)(PORT=20839))
The command completed successfully
set
리스너의 환경 설정을 변경하는 명령어입니다. 설정을 변경한 후 save_config
명령어를 통해 설정 값을 저장할 수 있습니다.
$ lsnrctl set inbound_connect_timeut 10
version
리스너의 버전 정보를 보여줍니다.
$ lsnrctl version
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 25-NOV-2022 13:52:52
Copyright (c) 1991, 2019, Oracle. All rights reserved.
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
TNSLSNR for Linux: Version 19.0.0.0.0 - Production
TNS for Linux: Version 19.0.0.0.0 - Production
Unix Domain Socket IPC NT Protocol Adaptor for Linux: Version 19.0.0.0.0 - Production
Oracle Bequeath NT Protocol Adapter for Linux: Version 19.0.0.0.0 - Production
TCP/IP NT Protocol Adapter for Linux: Version 19.0.0.0.0 - Production,,
The command completed successfully
show
현재 설정되어 있는 내용을 보여줍니다.
]$ lsnrctl show
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 25-NOV-2022 13:54:03
Copyright (c) 1991, 2019, Oracle. All rights reserved.
The following operations are available after show
An asterisk (*) denotes a modifier or extended command:
rawmode displaymode
rules trc_file
trc_directory trc_level
log_file log_directory
log_status current_listener
inbound_connect_timeout startup_waittime
snmp_visible save_config_on_stop
dynamic_registration enable_global_dynamic_endpoint
oracle_home pid
connection_rate_limit valid_node_checking_registration
registration_invited_nodes registration_excluded_nodes
remote_registration_address
start/status/stop
$ lsnrctl start/stat/stop <리스너 이름>
trace
리스너를 trace 하는 명령어입니다. 해당 명령어를 수행하면 특정 경로에 .trc
파일이 생성됩니다.
off
: trace 정보가 없음user
: 사용자 레벨의 trace 정보 표시admin
: 관리자 레벨의 trace 정보 표시support
: Oracle Support Services 레벨의 trace 정보 표시$ lsnrctl trace admin listener
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 25-NOV-2022 14:03:23
Copyright (c) 1991, 2019, Oracle. All rights reserved.
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
Opened trace file: /ORA19/app/oracle/diag/tnslsnr/khyup/listener/trace/ora_7328_139706525494336.trc
The command completed successfully
.trc
파일이 생성된 경로로 접근해서 내용을 살펴보면 아래와 같습니다.
$ cd /ORA19/app/oracle/diag/tnslsnr/khyup/listener/trace/
$ ls -al
total 24
drwxr-xr-x. 2 oracle dba 98 Nov 25 14:03 .
drwxr-xr-x. 14 oracle dba 4096 Nov 25 12:06 ..
-rw-r-----. 1 oracle dba 10006 Nov 25 14:03 listener.log
-rw-r-----. 1 oracle dba 2370 Nov 25 14:03 ora_7328_139706525494336.trc
-rw-r-----. 1 oracle dba 1432 Nov 25 14:03 ora_7328_139706525494336.trm
$ vi ora_7328_139706525494336.trc
Trace file /ORA19/app/oracle/diag/tnslsnr/khyup/listener/trace/ora_7328_139706525494336.trc
2022-11-25 14:03:23.215 : nsglrespond:entry
2022-11-25 14:03:23.216 : nsdo:cid=5, opcode=67, *bl=141, *what=1, uflgs=0x0, cflgs=0x3
2022-11-25 14:03:23.217 : nsdo:rank=64, nsctxrnk=0
2022-11-25 14:03:23.217 : nsdo:nsctx: state=8, flg=0x2100400c, mvd=0
2022-11-25 14:03:23.217 : nsdo:gtn=223, gtc=223, ptn=10, ptc=8111
2022-11-25 14:03:23.217 : nsdo:141 bytes to NS buffer
2022-11-25 14:03:23.217 : nsdo:nsctxrnk=0
2022-11-25 14:03:23.217 : nsglrespond:exit
2022-11-25 14:03:23.217 : nsgldissolve:entry
2022-11-25 14:03:23.217 : nsvntx_dei:entry
2022-11-25 14:03:23.217 : nsvntx_dei:exit
2022-11-25 14:03:23.217 : nstimarmed:no timer allocated
2022-11-25 14:03:23.217 : nsfull_cls:cid=5, opcode=65, *bl=0, *what=0, uflgs=0x0, cflgs=0x0
2022-11-25 14:03:23.217 : nsfull_cls:nsctx: state=8, flg=0x21004008, mvd=141
2022-11-25 14:03:23.217 : nsevunreg:cid=5, sgt=0, rdm=0
2022-11-25 14:03:23.217 : nsevunreg:3 registered connection(s)
2022-11-25 14:03:23.217 : nsdo:cid=5, opcode=67, *bl=0, *what=1, uflgs=0x0, cflgs=0x1
2022-11-25 14:03:23.217 : nsdo:nsctx: state=8, flg=0x1004008, mvd=141
2022-11-25 14:03:23.217 : nsdo:gtn=223, gtc=223, ptn=151, ptc=8111
2022-11-25 14:03:23.217 : nsdofls:DATA flags: 0x40
2022-11-25 14:03:23.217 : nsdofls:sending NSPTDA packet
2022-11-25 14:03:23.217 : nspsend:plen=151, type=6
2022-11-25 14:03:23.217 : ntuswrte:entry
2022-11-25 14:03:23.217 : ntuswrte:Wrote on 15 bytes 151
2022-11-25 14:03:23.217 : ntuswrte:exit
2022-11-25 14:03:23.217 : nspsend:151 bytes to transport
2022-11-25 14:03:23.217 : nsclose:closing transport
2022-11-25 14:03:23.217 : ntusdisc:entry
2022-11-25 14:03:23.217 : ntusdisc:Closed socket 15
2022-11-25 14:03:23.217 : ntusdisc:exit
2022-11-25 14:03:23.217 : nsclose:global context check-out (from slot 5) complete
2022-11-25 14:03:23.217 : nsvntx_dei:entry
2022-11-25 14:03:23.217 : nsvntx_dei:exit
2022-11-25 14:03:23.217 : nsmfr:3368 bytes at 0x25b1cc0
2022-11-25 14:03:23.217 : nsmfr:1952 bytes at 0x25b8670
2022-11-25 14:03:23.217 : nsgldissolve:Deallocating cxd 0x25f2da0.
2022-11-25 14:03:23.217 : nsgldissolve:exit
2022-11-25 14:03:23.217 : nsevwait:3 registered connection(s)
2022-11-25 14:03:23.217 : nsevwait:0 pre-posted event(s)
2022-11-25 14:03:23.218 : nsevwait:waiting for transport event (1 thru 4)...
Oracle Net Service 관련 파일은 tnsnames.ora
, sqlnet.ora
, listener.ora
파일이 대표적입니다. 이 파일들의 내용들이 어떤 의미가 있고 어떻게 설정해서 사용하면 되는지를 자세하게 살펴보겠습니다.
파일의 파라미터들의 작성 형식은 parameter=(keyword=value)
형태로 key-value 형식입니다.
만약 keyword 안에 key-value가 존재할 경우 아래와 같이 작성합니다.
(keyword=
(keyword=value)
(keyword=value))
예를 들어서 실제로 아래와 같이 작성할 수 있습니다.
(ADDRESS=
(PROTOCOL=tcp)
(HOST=localhost)
(PORT=1521))
주의사항
"
나 '
로 감싸야 합니다.#
기호를 붙이면 됩니다.위에서 살펴본 파일들에 값을 설정할 때 값에 사용될 수 있는 문자는 아래와 같습니다.
A-Z, a-z, 0-9, ( ) < > / \
, . : ; ' " = - _
$ + * # & ! % ? @
이 중에서 ( ) = \ " ' #
문자들은 오라클이 미리 사용처를 예약해두었기 때문에 문자로 쓰고 싶다면 이스케이프 문자인 \
를 앞에 붙이고 사용해야 합니다.
Listener 이름에 사용될 수 잇는 문자는 아래 문자 뿐입니다.
(Listener 이름이 위 문자 외의 문자가 들어갈 경우 에러가 발생합니다)
[a - z] [A - Z] [0 - 9]
아래는 Client 쪽의 tnsnames.ora 파일의 내용입니다.
TESTDB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.192.129)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = testdb)
)
)
위 화면에서도 볼 수 있듯이 Protocol Address는 Address와 Address_list로 구성이 되어 있습니다.
만약 Listener가 여러 IP의 서버를 연결해 주는 역할을 한다면 아래의 예와 같이 입력합니다.
(ADDRESS_LIST=
(ADDRESS=
(PROTOCOL=tcp)
(HOST=server100)
(PORT=1521)
)
(ADDRESS=
(PROTOCOL=tcp)
(HOST=server101)
(PORT=1521)
)
)
HOST
부분에는 접속하고자 하는 서버의 IP 주소를 적어도 되고, /etc/hosts
파일에 명시된 서버 이름이 적힐 수도 있습니다.
만약 tnsnames.ora
와 listener.ora
파일의 port 번호가 다른 상황(1521 - 1522)에서 Client -> Server로 접속을 시도할 경우 에러가 발생하면서 접속이 되지 않습니다. 에러가 발생하는 이유는 Client 쪽의 User Process가 tnsnames.ora 파일을 보고 Server의 1521번 Port로 찾아 가서 접속을 요청했지만 Listener는 1522번 Port 앞에서 접속을 기다리고 있었던 것입니다.
Client 쪽의 User Process가 Server를 찾아가기 위한 정보를 담고 있는 설정 파일입니다. 기본 경로는 $ORACLE_HOME/network/admin
으로 설정되어 있습니다.
DESCRIPTION
, DESCRIPTION_LIST
파라미터는 접속하고자 하는 대상 서버에 대한 정보를 상세하게 지정해주는 역할을 합니다. 서비스 명이 여러 개일 경우 DESCRIPTION_LIST
를 사용합니다.
testdb=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=rac1)(PORT=1521))
(CONNECT_DATA=(SERVICE_NAME=testdb)))
testdb=
(DESCRIPTION_LIST=
(DESCRIPTION=
(ADDRESS=...)
(CONNECT_DATA=(SERVICE_NAME=testdb1)))
(DESCRIPTION=
(ADDRESS=...)
(CONNECT_DATA=(SERVICE_NAME=testdb2))))
RAC 등과 같이 같은 서비스 명으로 여러 IP가 있다면 아래와 같이 작성하면 됩니다.
rac=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=rac1)(PORT=1521))
(ADDRESS=(PROTOCOL=tcp)(HOST=rac2)(PORT=1521)))
(CONNECT_DATA=(SERVICE_NAME=racdb)))
listener가 작동하기 위해 필요한 설정들이 저장되어 있는 파일입니다. 기본 경로는 $ORACLE_HOME/network/admin/listener.ora
로 설정되어 있으며 OS 편집기로 수정할 수 있습니다.
sqlnet.ora
파일은 client와 server 쪽 모두 존재하며, client의 접근 제어 profile 역할을 하는 파일입니다. 이 파일이 존재하지 않을 경우에는 netca 명령어로 설정을 해 주면 됩니다.
tnsping
은 client에서 tnsnames.ora 파일에 적혀 있는 Net Service Name을 보고 서버 쪽의 Listener로 접속을 시도하는 명령어입니다.
C:\Users\khyup>tnsping testdb
만약 Server 쪽 Listener가 중단된 상태거나 네트워크로 접속이 안되는 장애 상황일 경우에는 아래와 같은 메시지가 나옵니다.
C:\Users\khyup>tnsping testdb
TNS-12541: TNS:no listener
위와 같은 에러 메시지가 나올 경우 OS에서 ping 명령어로 서버 자체가 켜져 있는지 확인하고,
ping이 정상 작동한다면 listener가 정상적으로 작동하는지를 lsnrctl
명령어로 확인해야 합니다.
trcroute
명령어는 Client에서 Listener를 찾아가면서 tnsping
보다 더 자세한 내역을 보여줍니다.
$ trcroute testdb
ADR이란 DB 서버에서 발생하는 모든 에러나 장애 로그 파일들을 특정 디렉토리에 자동으로 저장하고 관리하기 위한 방법입니다.
기본 경로는 $ORACLE_BASE/diag/product_type/product_id/instance_id
로 설정됩니다.
ADR은 모든 로그 파일이나 trace 관련 파일을 중앙집중적으로 관리합니다.
product_type
에는 asm
, rdbms
, tnslsnr
, clients
, crs
등이 있습니다.
각 product_type
으로 들어가면 아래에는 대략 이런 형식으로 디렉토리가 구성되어 있습니다.
예를 들어, listener 관련 로그는 $ORACLE_BASE/diag/tnslsnr/<SERVER명>/listener/trace
디렉토리에서 관리합니다. 해당 디렉토리를 조회하면 확장자가 .trc
인 파일들이 보이는데 그 중에서 원하는 파일들을 vi 편집기 같은 것들로 열어서 살펴보면 됩니다.
oracle에서 ADR Command Interpreter(adrci)라는 별도의 ADR 명령어를 제공해줍니다.
$ adrci
adrci> show tracefile
특정 파일의 내용을 조회하려면 show trace <file name>
으로 명령을 수행합니다. 하지만 이 방법보다는 OS 편집기로 해당 trace 파일을 확인하는 방법이 더 많이 사용되는 것 같습니다.
Oracle에서는 에러의 내용을 쉽게 확인하기 위해 oerr
이라는 유틸리티를 제공합니다.
아래와 같이 조회하면 에러의 내용을 보다 자세하게 확인할 수 있습니다.
$ oerr ora 12533
$ oerr tns 12500
주요 에러 메시지
ORA-03113: TNS: end-of-file on communication channel
이 에러 메시지는 DB와의 접속이 강제로 끊어진 경우에 발생합니다. DB의 비정상 종료 등의 원인으로 연결이 강제로 끊어진 경우이니 해당 DB의 Alert Log 파일을 살펴보고 원인을 찾아야 합니다.
ORA-12154: TNS: could not resolve the connect identifier specified
client에서 Net Service Name을 찾지 못하는 경우, 즉 접속할 대상을 찾지 못했을 경우 발생하는 것입니다. 주로 tnsnames.ora
파일의 설정이 틀리거나 sqlnet.ora
파일에서 names.directory_path
의 경로값에 tnsnames
값이 설정되어 있는지 확인해야 합니다.
ORA-12170: TNS: Connect timeout occurred
sqlnet.ora
파일에서 SQLNET.INBOUND_CONNECT_TIMEOUT
이 설정되어 있을 경우 해당 시간 동안 요청이 없을 때 서버 쪽에서 강제로 접속을 끊어서 발생하는 에러 메시지입니다. 네트워크가 불안정하거나 접속이 잘 안되는 경우에도 발생할 수 있으니 네트워크 상태를 점검해보기를 권장합니다. 그리고 sqlnet.ora
파일에 설정된 SQLNET.INBOUND_CONNECT_TIMEOUT
, SQLNET.SEND_TIMEOUT
, SQLNET.RECV_TIMEOUT
파라미터 값을 현재 값보다 더 크게 설정할 것을 권장합니다.
TNS-12500/ORA-12500: TNS: listener failed to start a dedicated server process
여러 가지 이유((1)1명의 사용자가 수행할 수 있는 PROCESS의 개수를 넘었을 때, (2)listener 프로그램에 oracle 사용자의 실행권한이 없을 경우, (3)Windows 운영체제에서 service가 시작되지 않았을 경우)로 listener가 시작되지 않았을 경우 발생합니다. 위의 경우 다음과 같은 메시지도 함께 발생합니다. TNS-12549/ORA-12549
, TNS-00519
, TNS-12540/ORA-12540
, TNS-00510
, TNS-12560/ORA-12560
. 에러 메시지를 해결하는 방법은 파라미터 파일에서 PROCESS의 개수를 증가시키거나 실행권한을 주면 됩니다.
ORA-12514: TNS: listener does not currently know of service requested in connect descriptor
client가 listener에게 접속 요청한 service name을 listener.ora 파일에서 찾을 수 없어서 발생합니다. tnsnames.ora
, listener.ora
파일의 SID와 SERVICE_NAME이 일치하는지 확인한 후 동일하게 설정하면 됩니다.
ORA-12521: TNS: listener does not currently know of instance requested in connect descriptor
client가 요청한 Instance name을 listener가 알지 못할 때 발생합니다. 해결 방법은 tnsnames.ora
와 listener.ora
파일의 SERVICE_NAME
을 동일하게 설정하면 됩니다.
ORA-12525: TNS: listener has not received client's request in time allowed
sqlnet.ora 파일의 INBOUND_CONNECT_TIMEOUT_listener_name
파라미터에 설정된 시간 값 동안 client의 요청을 받지 못해서 server 쪽의 listener가 발생하는 에러 메시지 입니다. 해당 값을 현재 설정 값보다 크게 하거나 네트워크 상태를 점검해서 해결해야 합니다.
ORA-12533: TNS: illegal ADDRESS parameters
tnsnames.ora
파일이나 listener.ora
파일에 PROTOCOL ADDRESS
쪽에 잘못된 항목이나 오타가 있을 경우 발생하는 에러 메시지 입니다.
TNS-12540/ORA-12540: TNS: internal limit restriction exceeded and TNS-00510: Internal limit restriction exceeded
이 에러 메시지는 내부적인 한계를 초과한 경우 발생하는 에러입니다. (1)Oracle Net Service에 접속할 수 있는 process의 개수 초과, (2)사용 가능한 메모리 버퍼 개수의 초과, (3)데이터베이스 전체에서 사용할 수 있는 process 개수의 초과인 경우 발생합니다. 이런 경우 대부분 파라미터 파일에서 process의 개수를 현재보다 많이 지정하면 해결됩니다. 메모리 버퍼 수 초과의 경우 메모리 용량을 변경해주어야 하고, 각 사항은 alert log를 참고해 적절한 조치를 취해야 합니다.
TNS-12541/ORA-12541: TNS: no listener
client가 server 쪽의 listener를 찾지 못해 발생하는 에러입니다. tnsnames.ora
, listener.ora
파일의 IP, Port 정보가 동일한지 확인하거나 listener가 동작하고 있는지 확인합니다.
TNS-12560/ORA-12560: TNS: protocol adapter error occurred
windows에서만 발생하는 에러이며, ADDRESS 파라미터의 값이 잘못 지정될 경우 발생하는 경우가 많습니다. 또는 windows가 시작될 때 Oracle Service가 정상적으로 시작이 안될 경우 많이 발생합니다. OracleService<SID>
서비스를 enable
해 준 후 재시작하면 됩니다.
참고