2012-08-28 4 views
6

Sto provando a eseguire un inserimento con una quantità potenzialmente elevata di dati binari in un database Oracle (11g) remoto utilizzando Entity Framework (ODP.Net). Funziona bene per file veramente piccoli (< 5 KB), ma per quelli più grandi (ad esempio 44 KB) ottengo un errore: "ORA-03135: connessione persa contatto"."ORA-03135: connessione persa contatto" durante l'inserimento di file di grandi dimensioni

Non penso che stia scadendo, poiché l'eccezione si verifica entro un secondo dall'esecuzione del comando.

Ho provato a installare entrambi i seguenti elementi nella mia stringa di connessione, ma inutilmente:

  • Validate Connection=true
  • Pooling=false

ho guardato anche nel file listener.log sulla macchina remota. Mostra le connessioni in corso, ma nessun segno di eccezioni o connessioni terminate.

Sono pronto per le soluzioni consigliate o per la risoluzione dei problemi.

Edit:

Lo stesso SQL operazioni di lavoro quando si accede a un'istanza Oracle sulla rete locale.

+0

Beh, forse non è così, ma ho avuto il "ORA-03135: connessione persa contatto" su cose strane quando la connessione non è andata persa per niente è successo solo che Oracle non era più in grado di ingoiare l'istruzione SQL inviata. L'ho preso su query enormi (> 2000 linee di codice). Forse ti sto mandando sulla buona strada ma dopo 4 ore ho pensato di non rispondere, almeno potrei dirti quel pezzo della mia esperienza personale. Per me sembrava che il messaggio apparisse sempre quando il parser del comando SQL si arrestava in background. – hol

+0

Potrebbe essere utile verificare il registro degli allarmi sul computer remoto per vedere se ha segnalato un errore. In caso contrario, potrebbe indicare il problema sul lato client, non sul server. Inoltre, ci sono dei firewall nel modo in cui o qualcos'altro a livello di rete che potrebbe avere registri che è possibile controllare? –

+0

Un log di rete sarebbe utile. Il firewall non è acceso ed è una macchina server Windows che ospita Oracle. Non sono sicuro di dove il traffico TCP sia registrato su una macchina Windows, ma potrei doverlo scoprire. –

risposta

3

Questo può essere un problema complesso con molte possibili cause e soluzioni. Clicca qui:

http://www.dba-oracle.com/t_ora_03135_connection_lost_contact.htm

Answer: The oerr utility shows this for the ORA-03135 error:

ORA-03135: connection lost contact

Cause: 1) Server unexpectedly terminated or was forced to terminate. or 2) Server timed out the connection.

Action: 1) Check if the server session was terminated. 2) Check if the timeout parameters are set properly in sqlnet.ora.

The ORA-03135 error is common when connecting remotely when a firewall terminates the connection.

One solution for the ORA-03135 error is to increase the value of the sqlnet.ora expire_time parameter in the sqlnet.ora file or to check for a expire parameter in a SQL*Plus profile.

To diagnose the ORA-03135 error, start by checking to see if the OS PID still exists, using the ps –ef|grep syntax.

Check to see if there is a Network Address Translation (NAT) between the client and server

In Windows, check to see if a Windows firewall is checking for your local connections:

Windows XP -> Control panel -> security -> Tab "Advanced"

Also, setting the parameters sqlnet.inbound_connect_timeout and inbound_connect_timeout_listenername to 0 can stop the ORA-03135 error.

anche come sopra, controllare il registro avviso database per errori che si verificano allo stesso tempo, come la caduta di connessione. A volte può essere causato da un ora-600 o ora-7445, per esempio. Non dovrebbe apparire nel registro listener in quanto viene visualizzato questo errore solo dopo aver completato l'handshake.

+0

Non ho esaminato questo problema da un po 'di tempo, ma poiché i metodi di risoluzione dei problemi descritti qui sembrano abbastanza completi, lo segnalo come risposta. –

0

Questa situazione generalmente causata dalla connessione disconnessa/stantia viene prelevata dal lotto di connessioni. Se ottieni questa eccezione dopo Pooling = false, molto probabilmente il firewall blocca la connessione a causa del timeout di inattività tcp . Verificare che il valore di timeout di inattività del tcp sia maggiore del tempo di esecuzione del comando previsto