2012-08-28 12 views
6

Próbuję zrobić wstawkę z potencjalnie dużą ilością danych binarnych do zdalnej bazy danych Oracle (11g) przy użyciu Entity Framework (ODP.Net). Działa dobrze dla naprawdę małych plików (< 5 KB), ale w przypadku większych (na przykład 44 KB) pojawia się błąd: "ORA-03135: connection lost contact"."ORA-03135: połączenie stracił kontakt" podczas wstawiania dużego pliku

Nie sądzę, że upływa limit czasu, ponieważ wyjątek występuje w ciągu sekundy od wykonania polecenia.

Próbowałem ustawienie obu z następujących w moim ciąg połączenia, ale bezskutecznie:

  • Validate Connection=true
  • Pooling=false

ja również spojrzał w pliku listener.log na zdalnej maszynie. Pokazuje wykonane połączenia, ale żadnych oznak wyjątków ani przerwanych połączeń.

Jestem za sugerowane poprawki lub metody rozwiązywania problemów.

Edit:

Te same operacje SQL działa podczas uzyskiwania dostępu do instancji Oracle w sieci lokalnej.

+0

Cóż, może to nie to, ale miałem "ORA-03135: połączenie stracił kontakt" na dziwne rzeczy, gdy połączenie nie zostało utracone w ogóle to tylko się stało że Oracle nie był już w stanie połknąć przesłanego oświadczenia SQL. Mam go na ogromne zapytania (> 2000 linii kodu). Może wysyłam cię na właściwy tor, ale pomyślałem, że po 4 godzinach nie otrzymam odpowiedzi, przynajmniej mógłbym ci powiedzieć, że to moje własne doświadczenie. Dla mnie wyglądało na to, że komunikat zawsze pojawia się, gdy analizator składni polecenia SQL rozbił się w tle. – hol

+0

Może warto sprawdzić dziennik alertów na zdalnym komputerze, aby sprawdzić, czy zgłosił błąd. Jeśli nie, może to wskazywać na problem będący na końcu klienta, a nie na serwerze. Czy na drodze są jakieś zapory ogniowe lub cokolwiek innego na poziomie sieci, które może mieć dzienniki, które możesz sprawdzić? –

+0

Rejestr sieci byłby pomocny. Zapora sieciowa nie jest włączona i jest serwerem Windows obsługującym serwer Oracle. Nie jestem pewien, gdzie ruch TCP jest rejestrowany na komputerze z systemem Windows, ale może muszę to znaleźć. –

Odpowiedz

3

Może to być skomplikowany problem z wieloma różnymi możliwymi przyczynami i rozwiązaniami. Kliknij tutaj:

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.

również jak wyżej, sprawdź bazy powiadomienie dziennik błędów występujących w tym samym czasie co upuszczenie połączenia. Czasem może to być spowodowane na przykład przez ora-600 lub ora-7445. Nie powinno pojawiać się w dzienniku programu nasłuchującego, ponieważ pojawia się tylko ten błąd po zakończeniu uzgadniania.

+0

Nie zajrzałem do tego problemu od jakiegoś czasu, ale skoro opisane tu metody rozwiązywania problemów wyglądają całkiem kompletnie, zaznaczam je jako odpowiedź. –

0

Ta sytuacja zazwyczaj spowodowane przez odłączonym/połączenia czerstwego pochodzi z puli połączeń. Jeśli otrzymasz ten wyjątek po Pooling = false, najprawdopodobniej zapora sieciowa blokuje połączenie z powodu braku limitu czasu tcp w stanie bezczynności (). Upewnij się, że wartość limitu czasu bezczynności tcp jest większa niż oczekiwany czas wykonania polecenia

Powiązane problemy