Come posso risolvere gli errori di connessione più comuni per la mia istanza Amazon RDS per Oracle?

8 minuti di lettura
0

Non riesco a connettermi alla mia istanza database di Amazon Relational Database Service (Amazon RDS).

Breve descrizione

Prima di risolvere l'errore di connessione, procedi come segue:

  • Verifica lo stato dell’istanza Amazon RDS per Oracle DB. Se l'istanza è in uno stato diverso da disponibilità, ottimizzazione dello storage o backup, non puoi connetterti ad essa.
  • Verifica di poterti connettere all'istanza database tramite la porta del database. Per impostazione predefinita, Oracle utilizza la porta 1521.
telnet example-endpoint 1521

Se non riesci a stabilire una connessione tramite telnet, risolvi il problema in base alle istruzioni fornite in Come posso risolvere i problemi che si presentano durante la connessione all'istanza database di Amazon RDS?

Risoluzione

Controlla la tua connessione

Verifica che la stringa di connessione sia accurata. Un tipico descrittore di connessione è simile al seguente:

sqlplus admin/xxxx@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=myexampledb.xxxx.us-east-1.rds.amazonaws.com)(PORT=1521))(CONNECT_DATA=(SID=ORCL)))

Con Easy Connect, la stringa di connessione è simile alla seguente:

sqlplus 'admin@myexampledb.xxxx.us-east-1.rds.amazonaws.com:1521/ORCL'

Utilizza le seguenti opzioni di risoluzione dei problemi in base al messaggio di errore che ricevi:

ORA-01017: invalid username/password; logon denied

Verifica le credenziali utente fornite nella stringa di connessione. Assicurati che queste credenziali siano accurate.

ORA-12545: Connect failed because target host or object does not exist

Utilizza il seguente comando NLSLOOKUP per verificare che il nome host (endpoint RDS) sia accurato:

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

-oppure-

ERROR: Connection reset by peer

I motivi più comuni di questi errori sono i seguenti:

  • Ci sono problemi con la rete, il firewall o nello stabilire la connessione.
  • La comunicazione con il client non è stata completata entro l'intervallo di tempo assegnato.
  • Il database è inattivo.
  • Il parametro sqlnet.ora non è valido.

Esegui il comando TNSPING sul lato client per verificare la sintassi della stringa di connessione:

tnsping example-connection-string

Se la sintassi della stringa di connessione è accurata, l'output è simile al seguente:

$ 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)

Se è presente un errore nella sintassi, l'output è simile al seguente:

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

Puoi anche eseguire il comando TRCROUTE per verificare la sintassi della stringa di connessione:

trcroute example-connection-string

Se la sintassi della stringa di connessione è accurata, l'output è simile al seguente:

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

Se è presente un errore nella sintassi, l'output è simile al seguente:

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

Per risolvere questi errori, procedi come segue:

  • Verifica che il gruppo di sicurezza per la tua istanza database RDS consenta il traffico in entrata appropriato verso il tuo database.

  • Se l'applicazione si connette da una rete on-premises, conferma che le regole del firewall consentano le connessioni da e verso l'istanza.

  • La connessione al driver JDBC Thin non passa attraverso il livello Oracle Net. Quindi, se usi il driver Oracle JDBC Thin, esegui l'equivalente di SQL*Net Client Tracing con Oracle JDBC Thin Driver. Per ulteriori informazioni, consulta How to perform the equivalent of SQL*Net client tracing with Oracle JDBC thin driver releases prior to 11.2 (Doc ID 793415.1) sul sito Web di Oracle.

  • Se utilizzi il client JDBC Thick o OCI, attiva il tracciamento sqlnet sul lato server. Per attivare il tracciamento sul lato server, modifica il gruppo di parametri personalizzati associato all'istanza. In questo caso, non è necessario un riavvio. Se utilizzi il gruppo di parametri predefinito, crea un gruppo di parametri personalizzato e modifica i seguenti parametri. Quindi, modifica l'istanza per utilizzare il gruppo di parametri appena creato. In questo caso, è necessario un riavvio.

    sqlnetora.trace_level_server=16

    sqlnetora.diag_adr_enabled=ON

    Importante: quando si attiva il tracciamento a livello di server, è possibile generare rapidamente un numero elevato di file di traccia. In rari casi, potrebbe essere necessario riavviare il listener o anche il database per interrompere il tracciamento al termine della risoluzione dei problemi. Il processo richiede anche un attento monitoraggio. È consigliabile attivare il tracciamento durante le ore lavorative non di punta o in condizioni isolate quando nessun altro utente si connette al database. Inoltre, assicurati che sul server sia disponibile spazio su disco sufficiente. I valori dei parametri citati in questo articolo sono forniti a titolo di esempio. Puoi modificare questi valori in base al caso d'uso. Per ulteriori informazioni, consulta Connessione all'istanza database RDS per Oracle.

  • Attiva il tracciamento sqlnet sul lato client. Quindi, riproduci l'errore e acquisisci i dettagli nei file di traccia. Crea un backup del file sqlnet.ora, quindi modifica i seguenti parametri nel file:

    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

    Per disattivare il tracciamento, rimuovi i parametri di tracciamento dal file sqlnet.ora. Il tracciamento delle sessioni già connesse sul lato server viene interrotto solo dopo la chiusura della sessione client.

  • Se ricevi l'errore a causa di una rete lenta, configura i seguenti parametri sul lato client e sul lato server. Ciò lascia più tempo per stabilire la connessione:

    Lato client:

    SQLNET.INBOUND_CONNECT_TIMEOUT

    SQLNET.SEND_TIMEOUT

    SQLNET.RECV_TIMEOUT

    Lato server:

    sqlnetora.sqlnet.inbound_connect_timeout

    sqlnetora.sqlnet.send_timeout

    sqlnetora.sqlnet.recv_timeout

    Ad esempio, se si utilizza il valore 600 per tutti i parametri, il tempo di connessione è impostato su 10 minuti.

ORA-12505: TNS:listener does not currently know of SID given in connect descriptor

Verifica che il SID fornito nella stringa di connessione corrisponda al valore di DBNAME che si trova nella scheda Configurazione della console Amazon RDS. Per impostazione predefinita, il SID e il DBNAME per un'istanza RDS per Oracle sono ORCL.

ORA-12504: TNS:listener was not given the SERVICE_NAME in CONNECT_DATA

Assicurati di utilizzare la clausola SID o SERVICE_NAME nella sezione CONNECT_DATA della stringa di connessione. Il valore di SERVICE_NAME fornito nella stringa di connessione è lo stesso del valore di DBNAME che si trova nella scheda Configurazione della console Amazon RDS. Per impostazione predefinita, il valore SERVICE_NAME per un'istanza RDS per Oracle è ORCL.

ORA-12538: TNS:no such protocol adapter

Assicurati che la sezione PROTOCOL del descrittore di connessione sia accurata. Per impostazione predefinita, il valore di PROTOCOL è TCP.

ORA-12560: TNS:protocol adaptor error

Questo errore indica una connessione al SID sbagliato o a un database non attivo. Verifica lo stato dell'istanza database RDS. Esegui il comando tnsping per testare la sintassi e la connettività della stringa di connessione:

tnsping example-connection-string

ORA-00018: maximum number of sessions exceeded

Questo errore indica che troppe sessioni sono connesse al database. Per risolvere questo errore, procedi come segue:

  1. Se sei connesso al database, esegui la seguente query per trovare il numero di sessioni connesse:

    SELECT COUNT(*) TOTAL FROM v$session;

    Esegui la seguente query per visualizzare l'utilizzo corrente, quello massimo e i limiti configurati per i parametri delle sessioni e dei processi nell'istanza RDS:

    SELECT RESOURCE_NAME, CURRENT_UTILIZATION, MAX_UTILIZATION, LIMIT_VALUE
    FROM V$RESOURCE_LIMIT WHERE RESOURCE_NAME IN ( 'sessions', 'processes');
  2. Termina le sessioni indesiderate in modo che le altre sessioni possano connettersi al database.

    Esegui la seguente query per visualizzare il SID e il numero di serie delle singole sessioni da interrompere:

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

    Nota: modifica la clausola WHERE in base al caso d'uso.

    Esegui il comando seguente per terminare le sessioni indesiderate nell'istanza RDS per Oracle:

    begin
        rdsadmin.rdsadmin_util.disconnect(
            sid => example-sid,
            serial => example-serial_number);
    end;
  3. Per aumentare il valore dei parametri delle sessioni e dei processi, modifica il gruppo di parametri personalizzato e modifica i parametri. Il parametro delle sessioni non è definito nel gruppo di parametri e utilizza i valori predefiniti per il motore.

    Il numero predefinito di sessioni in Oracle 19c viene calcolato nel modo seguente:

    Numero di sessioni = (1,5 \ * numero di processi) + 22.

    Il valore predefinito per il parametro dei processi è definito come LEAST({DBInstanceClassMemory/9868951}, 20000). Il numero di processi viene calcolato come memoria totale (MB) nell'host /10 o 20.000, a seconda di quale dei due valori sia inferiore.

    Per ulteriori informazioni sulla modifica di un gruppo di parametri, consulta Gruppi di parametri per Amazon RDS.

    Poiché tali parametri sono statici, è necessario riavviare l'istanza dopo averli aggiornati.

Informazioni correlate

Perché non riesco a connettermi all'istanza database Amazon RDS per Oracle?