내용으로 건너뛰기

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

6분 분량
0

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

이 오류는 데이터베이스에 연결된 세션이 너무 많음을 나타냅니다. 이 오류를 해결하려면 다음을 수행하십시오.

  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 중 적은 값으로 계산됩니다.

    파라미터 그룹 수정에 대한 자세한 내용은 Amazon RDS의 파라미터 그룹을 참조하십시오.

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

관련 정보

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

댓글 없음

관련 콘텐츠