Amazon RDS for Oracle 인스턴스의 일반적인 연결 오류를 해결하려면 어떻게 해야 합니까?

6분 분량
0

Amazon Relational Database Service(Amazon 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: 사용자 이름/암호가 잘못되었습니다. 로그인이 거부되었습니다.

연결 문자열에 제공된 사용자 자격 증명을 확인합니다. 이 자격 증명이 정확한지 확인하십시오.

ORA-12545: 대상 호스트 또는 개체가 존재하지 않아 연결에 실패했습니다.

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:연결 시간 초과가 발생했습니다.

-또는-

오류: 피어에 의한 연결 재설정

이러한 오류의 일반적인 원인은 다음과 같습니다.

  • 네트워크, 연결 설정 또는 방화벽에 문제가 있습니다.
  • 할당된 시간 간격 내에 클라이언트와의 통신을 완료하지 못했습니다.
  • 데이터베이스가 중단되었습니다.
  • 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 인스턴스의 보안 그룹에서 데이터베이스로 들어오는 트래픽을 적절히 허용하는지 확인합니다.
  • 애플리케이션이 온프레미스 네트워크에서 연결하는 경우 RDS 인스턴스와의 연결을 허용하도록 방화벽 규칙이 업데이트되었는지 확인합니다.
  • JDBC 씬 드라이버 연결은 Oracle Net 계층을 통과하지 않습니다. 따라서 Oracle JDBC 씬 드라이버를 사용하는 경우 Oracle JDBC 씬 드라이버를 사용하여 SQL*Net 클라이언트 추적과 동일한 작업을 수행합니다. 자세한 내용은 Doc ID 793415.1에 대한 Oracle 설명서를 참조하세요.
  • JDBC 씩 또는 OCI 클라이언트를 사용하는 경우 서버 측에서 SQLNET 추적을 켭니다. 서버 측에서 추적을 켜려면 인스턴스에 연결된 사용자 정의 파라미터 그룹을 수정합니다. 이 경우 재부팅할 필요가 없습니다. 기본 파라미터 그룹을 사용하는 경우 사용자 정의 파라미터 그룹을 생성하고, 다음 파라미터를 수정한 후 새로 생성된 파라미터 그룹을 사용하도록 인스턴스를 수정합니다. 이 경우 재부팅이 필요합니다.
    sqlnetora.trace_level_server=16
    sqlnetora.diag_adr_enabled=OFF
    중요: 서버 수준 추적을 켜면 몇 가지 잠재적인 영향을 미칠 수 있습니다. 많은 수의 추적 파일이 빠르게 생성될 수 있습니다. 드문 경우지만 문제 해결이 완료된 후 추적을 중지하기 위해 리스너 또는 데이터베이스를 다시 시작해야 할 수도 있습니다. 또한 프로세스를 면밀히 모니터링해야 합니다. 따라서 사용량이 많지 않은 업무 시간 또는 다른 사용자가 데이터베이스에 연결하지 않는 격리된 조건에서 추적을 켜는 것이 모범 사례입니다. 또한 서버에 사용 가능한 디스크 공간이 충분한지 확인하십시오. 이 문서에서 언급한 파라미터 값은 예제입니다. 사용 사례에 따라 이러한 값을 수정할 수 있습니다. 자세한 내용은 sqlnet.ora 파라미터를 사용하여 연결 속성 수정 단원을 참조하십시오.
  • 클라이언트 측에서 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:리스너는 현재 연결 설명자에 지정된 SID를 알지 못합니다.

연결 문자열에 제공된 SID가 Amazon RDS 콘솔구성 탭 아래에 있는 DBNAME 값과 일치하는지 확인합니다. 기본적으로 RDS for Oracle 인스턴스의 SID 및 DBNAME은 ORCL입니다.

ORA-12504: TNS:리스너에 CONNECT_DATA의 SERVICE_NAME이 지정되지 않았습니다

반드시 연결 문자열의 CONNECT_DATA 섹션 아래에 있는 SID 또는 SERVICE_NAME 절을 사용해야 합니다. 연결 문자열에 제공된 SERVICE_NAME의 값은 Amazon RDS 콘솔의 구성 탭 아래에 있는 DBNAME 값과 동일합니다. 기본적으로 RDS for Oracle 인스턴스에 대한 SERVICE_NAME 값은 ORCL입니다.

ORA-12538: TNS:이러한 프로토콜 어댑터가 없습니다.

연결 설명자의 프로토콜 섹션이 정확한지 확인하십시오. 기본적으로 프로토콜의 값은 TCP입니다.

ORA-12560: TNS:프로토콜 어댑터 오류

이 오류는 잘못된 SID 또는 실행되고 있지 않은 데이터베이스에 연결하려고 시도했음을 나타냅니다. RDS DB 인스턴스의 상태를 확인합니다. tnsping 명령을 실행하여 연결 문자열의 구문과 연결을 테스트합니다.

$ tnsping example-connection-string

ORA-00018: 최대 세션 수를 초과함

이 오류는 너무 많은 세션이 데이터베이스에 연결되어 있음을 나타냅니다. 이 오류를 해결하려면 다음을 수행합니다.

1.    데이터베이스에 연결되어 있는 경우 다음 쿼리를 실행하여 연결된 세션 수를 찾습니다.

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');

2.    다른 세션에서 데이터베이스에 연결할 수 있도록 원치 않는 세션을 종료합니다.

다음 쿼리를 실행하여 종료할 개별 세션의 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;

자세한 내용은 세션 종료를 참조하십시오.

3.    세션프로세스 파라미터의 값을 늘리려면 사용자 지정 파라미터 그룹을 편집하고 이러한 파라미터를 수정합니다. 세션 파라미터는 파라미터 그룹에 정의되어 있지 않으며 엔진의 기본값을 사용합니다.

Oracle 19c의 기본 세션 수는 다음과 같이 계산됩니다.

세션 수 = (1.5* 프로세스 수) + 22.

프로세스 파라미터의 기본값은 **LEAST({DBInstanceClassMemory/9868951}, 20000)**로 정의됩니다. 프로세스 수는 호스트의 총 메모리(MB)/10 또는 20,000 중 적은 수로 계산됩니다.

파라미터 그룹 수정에 대한 자세한 내용은 DB 파라미터 그룹의 파라미터 수정 단원을 참조하세요.

이러한 파라미터는 정적이므로, 이러한 파라미터를 업데이트한 후 인스턴스를 재부팅해야 합니다.


관련 정보

Amazon RDS for Oracle Database 인스턴스에 연결할 수 없는 이유는 무엇입니까?