Get Hands-on with Amazon EKS - Workshop Event Series
Whether you're taking your first steps with Kubernetes or you're an experienced practitioner looking to sharpen your skills, our Amazon EKS workshop series delivers practical, real-world experience that moves you forward. Learn directly from AWS solutions architects and EKS specialists through hands-on sessions designed to build your confidence with Kubernetes. Register now and start building with Amazon EKS!
Oracle용 Amazon RDS 인스턴스의 일반적인 연결 오류 문제를 해결하려면 어떻게 해야 합니까?
Amazon Relational Database Service(RDS) for Oracle 인스턴스에 연결할 수 없습니다.
간략한 설명
연결 오류를 해결하기 전에 다음을 수행하십시오.
- Amazon RDS for Oracle DB 인스턴스의 상태를 확인합니다. 인스턴스가 사용 가능, 스토리지 최적화 또는 백업 중 이외의 상태인 경우 인스턴스에 연결할 수 없습니다.
- 데이터베이스 포트를 통해 데이터베이스 인스턴스에 연결할 수 있는지 확인합니다. 기본적으로 Oracle은 포트 1521을 사용합니다.
telnet example-endpoint 1521
텔넷을 사용하여 연결할 수 없는 경우 Amazon RDS DB 인스턴스에 연결할 때 발생하는 문제를 해결하려면 어떻게 해야 합니까?에 제공된 설명에 따라 문제를 해결하십시오.
해결 방법
연결 상태 확인하기
연결 문자열이 정확한지 확인하십시오. 일반적인 접속 설명자는 다음과 비슷합니다.
sqlplus admin/xxxx@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=myexampledb.xxxx.us-east-1.rds.amazonaws.com)(PORT=1521))(CONNECT_DATA=(SID=ORCL)))
간편 연결을 사용하면 연결 문자열이 다음과 비슷하게 보입니다.
sqlplus 'admin@myexampledb.xxxx.us-east-1.rds.amazonaws.com:1521/ORCL'
표시되는 다음과 같은 오류 메시지에 따라 다음의 문제 해결 옵션을 사용하십시오.
ORA-01017: invalid username/password; logon denied
연결 문자열에 제공된 사용자 자격 증명을 확인합니다. 이러한 자격 증명이 정확한지 확인하십시오.
ORA-12545: Connect failed because target host or object does not exist
다음 NLSLOOKUP 명령을 사용하여 호스트 이름(RDS 엔드포인트)이 정확한지 확인하십시오.
nslookup example-database.xxxx.us-east-1.rds.amazonaws.com Server: xx.xx.xx.xx Address: xx.xx.xx.xx#53
ORA-12170: TNS:Connect timeout occurred
-또는-
ERROR: Connection reset by peer
이러한 오류의 가장 일반적인 원인은 다음과 같습니다.
- 네트워크, 연결 설정 또는 방화벽에 문제가 있습니다.
- 할당된 시간 간격 내에 클라이언트와의 통신을 완료하지 못했습니다.
- 데이터베이스가 다운되었습니다.
- sqlnet.ora 파라미터가 유효하지 않습니다.
클라이언트측에서 TNSPING 명령을 실행하여 연결 문자열의 구문을 확인합니다.
tnsping example-connection-string
연결 문자열의 구문이 정확하면 다음과 비슷한 결과가 출력됩니다.
$ cat $ORACLE_HOME/network/admin/tnsnames.ora Output : ORCL=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST= example-database.xxxx.us-east-1.rds.amazonaws.com)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL))) $ tnsping ORCL TNS Ping Utility for Linux: Version 12.1.0.2.0 - Production on 16-NOV-2021 09:16:04 Copyright (c) 1997, 2014, Oracle. All rights reserved. Used parameter files: Used TNSNAMES adapter to resolve the alias Attempting to contact (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=example-database.xxxx.us-east-1.rds.amazonaws.com)(PORT=1521)) CONNECT_DATA=(SERVICE_NAME=ORCL))) OK (20 msec)
구문에 오류가 있는 경우 다음과 같이 출력됩니다.
tnsping ORCL TNS Ping Utility for Linux: Version 12.1.0.2.0 - Production on 16-NOV-2021 09:23:47 Copyright (c) 1997, 2014, Oracle. All rights reserved. Used parameter files: TNS-03505: Failed to resolve name
TRCROUTE 명령을 실행하여 연결 문자열의 구문을 확인할 수도 있습니다.
trcroute example-connection-string
연결 문자열의 구문이 정확하면 다음과 비슷한 결과가 출력됩니다.
Trace Route Utility for Linux: Version 12.1.0.2.0 - Production on 16-NOV-2021 09:16:25 Copyright (c) 1995, 2014, Oracle. All rights reserved. Route of TrcRoute: ------------------ Node: Client Time and address of entry into node: ------------------------------------------------------------- 16-NOV-2021 09:16:25 ADDRESS= PROTOCOL=TCP HOST=example-database.xxxx.us-east-1.rds.amazonaws.com PORT=1521 Node: Server Time and address of entry into node: ------------------------------------------------------------- 16-NOV-2021 14:16:25 ADDRESS= PROTOCOL=TCP HOST=example-database.xxxx.us-east-1.rds.amazonaws.com PORT=1521
구문에 오류가 있는 경우 다음과 같이 출력됩니다.
trcroute ORCL Trace Route Utility for Linux: Version 12.1.0.2.0 - Production on 16-NOV-2021 09:25:06 Copyright (c) 1995, 2014, Oracle. All rights reserved. TNS-03505: Failed to resolve name
이러한 오류를 추가로 해결하려면 다음과 같이 하십시오.
-
RDS DB 인스턴스의 보안 그룹이 데이터베이스로 들어오는 트래픽을 적절하게 허용하는지 확인합니다.
-
애플리케이션이 온프레미스 네트워크에서 연결하는 경우 방화벽 규칙이 인스턴스와의 연결을 허용하는지 확인하십시오.
-
JDBC Thin 드라이버 연결은 Oracle Net 계층을 거치지 않습니다. 따라서 Oracle JDBC Thin 드라이버를 사용하는 경우, Oracle JDBC Thin 드라이버로 SQL*Net Client Tracing과 같은 작업을 수행하십시오. 자세한 내용을 보려면 Oracle 웹 사이트에서 11.2 이전 Oracle JDBC Thin 드라이버 릴리스(문서 ID 793415.1)로 SQL*Net Client Tracing에 해당하는 작업을 수행하는 방법을 참조하십시오.
-
JDBC Thick 또는 OCI 클라이언트를 사용하는 경우 서버 측에서 sqlnet 추적을 설정하십시오. 서버 측에서 추적을 켜려면 인스턴스에 연결된 사용자 지정 파라미터 그룹을 수정하십시오. 이 경우에는 재부팅할 필요가 없습니다. 기본 파라미터 그룹을 사용하는 경우 사용자 지정 파라미터 그룹을 생성하고 다음 파라미터를 수정하십시오. 그런 다음 새로 생성된 파라미터 그룹을 사용하도록 인스턴스를 수정합니다. 이 경우 재부팅이 필요합니다.
sqlnetora.trace_level_server=16
sqlnetora.diag_adr_enabled=ON
중요: 서버 수준 추적을 활성화하면 많은 수의 추적 파일을 빠르게 생성할 수 있습니다. 드문 경우이긴 하지만 문제 해결이 완료된 후 추적을 중지하기 위해 리스너 또는 데이터베이스를 다시 시작해야 할 수도 있습니다. 이 프로세스에는 면밀한 모니터링도 필요합니다. 사용량이 많지 않은 업무 시간이나 데이터베이스에 연결하는 다른 사용자가 없는 격리된 조건에서 추적 기능을 켜는 것이 가장 좋습니다. 또한 서버에 사용 가능한 디스크 공간이 충분한지 확인하십시오. 이 문서에서 설명하는 파라미터 값은 예제입니다. 사용 사례에 따라 이러한 값을 수정할 수 있습니다. 자세한 내용을 알아보려면 RDS for Oracle DB에 연결하기를 참조하십시오.
-
클라이언트 측에서 sqlnet 추적을 활성화합니다. 그런 다음 오류를 재현하고 추적 파일에 세부 정보를 캡처합니다. sqlnet.ora 파일의 백업을 생성한 후 파일에서 다음 파라미터를 수정합니다.
TRACE_LEVEL_CLIENT = 16
TRACE_FILE_CLIENT = client.trc
TRACE_DIRECTORY_CLIENT = /var/log/sqlnet
TRACE_TIMESTAMP_CLIENT = ON
TRACE_UNIQUE_CLIENT = ON
DIAG_ADR_ENABLED= OFF
추적을 끄려면 sqlnet.ora 파일에서 추적 파라미터를 제거합니다. 서버 측에서 이미 연결된 세션에 대한 추적은 클라이언트 세션이 닫힌 후에만 중지됩니다.
-
네트워크 속도가 느려 오류가 발생하는 경우 클라이언트측과 서버측에서 다음 파라미터를 구성하십시오. 이렇게 하면 연결을 설정하는 데 더 많은 시간을 할애할 수 있습니다.
클라이언트 측:
SQLNET.INBOUND_CONNECT_TIMEOUT
SQLNET.SEND_TIMEOUT
SQLNET.RECV_TIMEOUT
서버 측:
sqlnetora.sqlnet.inbound_connect_timeout
sqlnetora.sqlnet.send_timeout
sqlnetora.sqlnet.recv_timeout
예를 들어 모든 파라미터에 값 600을 사용하면 연결 시간이 10분으로 설정됩니다.
ORA-12505: TNS:listener does not currently know of SID given in connect descriptor
연결 문자열에 제공된 SID가 Amazon RDS 콘솔**의 **구성 탭 아래에 있는 DBNAME의 값과 일치하는지 확인합니다. 기본적으로 Oracle용 RDS 인스턴스의 SID 및 DBNAME은 ORCL입니다.
ORA-12504: TNS:listener was not given the SERVICE_NAME in CONNECT_DATA
연결 문자열의 CONNECT_DATA 섹션에서 SID 또는 SERVICE_NAME 절을 사용해야 합니다. 연결 문자열에 제공된 SERVICE_NAME 값은 Amazon RDS 콘솔의 구성 탭 아래에 있는 DBNAME 값과 동일합니다. 기본적으로 RDS for Oracle 인스턴스의 SERVICE_NAME 값은 ORCL입니다.
ORA-12538: TNS:no such protocol adapter
연결 설명자의 PROTOCOL 섹션이 정확한지 확인하십시오. 기본적으로 프로토콜의 값은 TCP입니다.
ORA-12560: TNS:protocol adaptor error
이 오류는 잘못된 SID에 연결되었거나 활성 상태가 아닌 데이터베이스를 나타냅니다. RDS DB 인스턴스의 상태를 확인합니다. tnsping 명령을 실행하여 연결 문자열의 구문과 연결을 테스트합니다.
tnsping example-connection-string
ORA-00018: maximum number of sessions exceeded
이 오류는 데이터베이스에 연결된 세션이 너무 많음을 나타냅니다. 이 오류를 해결하려면 다음을 수행하십시오.
-
데이터베이스에 연결된 경우 다음 쿼리를 실행하여 연결된 세션 수를 확인합니다.
SELECT COUNT(*) TOTAL FROM v$session;다음 쿼리를 실행하여 RDS 인스턴스의 세션 및 프로세스 파라미터에 대해 현재 사용률, 최대 사용률, 구성된 제한을 확인합니다.
SELECT RESOURCE_NAME, CURRENT_UTILIZATION, MAX_UTILIZATION, LIMIT_VALUE FROM V$RESOURCE_LIMIT WHERE RESOURCE_NAME IN ( 'sessions', 'processes'); -
다른 세션이 데이터베이스에 접속할 수 있도록 원하지 않는 세션을 종료합니다.
다음 쿼리를 실행하여 중지할 개별 세션의 SID 및 일련번호를 확인합니다.
col username format a15 col osuser format a15 col program format a40 col machine format a40 SELECT s.osuser, s.sid, s.serial#, p.spid "RDS OS PID", s.program, s.machine, s.process "CLIENT OS PID", s.STATUS, s.SQL_ID, s.CURRENT_QUEUE_DURATION FROM v$session s, v$process p WHERE s.paddr = p.addr AND s.machine LIKE '%<client machine>%' AND s.STATUS='ACTIVE';참고: 사용 사례에 따라 WHERE 절을 수정하십시오.
다음 명령을 실행하여 RDS for Oracle 인스턴스에서 원하지 않는 세션을 종료합니다.
begin rdsadmin.rdsadmin_util.disconnect( sid => example-sid, serial => example-serial_number); end; -
세션 및 프로세스 파라미터의 값을 늘리려면 사용자 지정 파라미터 그룹을 편집하고 파라미터를 수정하십시오. 세션 파라미터는 파라미터 그룹에 정의되어 있지 않으며 엔진의 기본값을 사용합니다.
Oracle 19c의 기본 세션 수는 다음과 같이 계산됩니다.
세션 수 = (1.5 * 프로세스 수) + 22.
프로세스 파라미터의 기본값은 **LEAST({DBInstanceClassMemory/9868951}, 20000)**로 정의됩니다. 프로세스 수는 호스트의 총 메모리(MB)/10 또는 20,000 중 적은 값으로 계산됩니다.
파라미터 그룹 수정에 대한 자세한 내용은 Amazon RDS의 파라미터 그룹을 참조하십시오.
이러한 파라미터는 정적이므로 파라미터를 업데이트한 후 인스턴스를 재부팅해야 합니다.
관련 정보
관련 콘텐츠
- 질문됨 일 년 전

