2013-05-21 19 views
6

staram się badać ten problem na dwóch następujących błędów połączeniowych do Oracle DB:java.sql.SQLException: Io wyjątek: Gniazdo odczytu timed out vs zamknął połączenie

  1. zamknął połączenie
  2. java.sql.SQLException: Io wyjątek: Gniazdo odczytu timed out

Moje rozumienie:

  1. Zamknięto Połączenie: Występuje albo z powodu jakiegoś zakłócenia sieci, albo DB zamknął sesję z powodu pewnego rodzaju "nieaktywności"
  2. java.sql.SQLException: Wyjątek Io: przekroczenie limitu czasu gniazda: Jest to przypadek, w którym połączenie zostało nawiązane pomyślnie, ale z jakiegoś powodu gniazdo/dane były puste i ostatecznie upłynął limit czasu, ponieważ żadne dane nie były dostępne.

Czy można replikować powyższe błędy w lokalnym środowisku Oracle DB? Jakie są kroki?

Doceniam, że poświęciłeś czas na odpowiedź.

Dzięki.

Odpowiedz

0

Właśnie zacząłem pracować z pakietem java.sql. *, Ale oto, co rozumiem. Zamknięte połączenie jest błędem, który występuje, a sesja bazy danych zostaje zamknięta, ale obsługa błędów nie jest wykonywana, więc jest to koniec. Za pomocą wyjątku java.SQException można zarządzać tym błędem (użyj klauzuli throws) i wydrukować lub wykonać inne metody obsługi błędów.

Oto link od Oracle o wyjątkach i sposobie ich obsługi.

Mam nadzieję, że to pomoże.

Exceptions in Java.

+0

Dzięki za wejście. W przypadku błędu połączenia zamkniętego próbuję ustalić, czy istnieje różnica między blokowaniem połączenia przez DB a zakłóceniem sieci, niezależnie od tego, czy oba mają ten sam błąd, czy też istnieje rozróżnienie. Ponadto, obie uważam, że oba są wyjątki right 'java.sql.SQLRecoverableException: Closed Connection' Co również o wyjątku limitu czasu Socket, na jakie są konkretne przyczyny, takie jak" sieci "zakłócenia. – kart0624

+0

@ kart0624 Nie jestem tego pewien. Spróbuj zalogować kody błędów, aby zobaczyć, czy są one odrębne. Oczywiście zdarzają się z różnych powodów, ale mogą lub nie mogą używać tego samego kodu błędu. Oto kilka informacji na temat logowania do java, jeśli nie jesteś zaznajomiony z tym. [link] (http://www.vogella.com/articles/Logging/article.html) –

1

Zrozumienie związku na zamkniętym ma rację. Przyczyna zamkniętego połączenia: Urządzenia zewnętrzne, takie jak zapora sieciowa, urządzenia sieciowe i zdalne odbiorniki bazy danych mogą wymuszać zamknięcie połączeń sieciowych po okresie braku aktywności.

ReadTimeOut stanie się nawet w przypadku aktywnych połączeń. Jeśli zapytanie lub procedura zajmuje dużo czasu, otrzymasz wyjątek czasu odczytu.

  • zamknięcia przyłącza: Shutdown słuchacz bazie gdy baza danych jest uruchomiony
  • ReadTimedOut: Dodaj snu w postępowaniu o więcej niż 10 minut i nazywają to postępowanie z wniosku

Replication gniazda błąd przekroczenia czasu odczytu w Oracle DB env:

  1. setNetworkTimeout dla SQL connection // na przykład imię, jak ustawić limit czasu 120 sekund
  2. wywołania procedury bazy danych z Java i snu w czasie tej procedury dla więcej niż setNetworkTimeout

    dbms_lock.sleep(125); -- sleeps for 125 seconds 
    

Ponieważ procedura nie wraca przy 120 sekundach ze względu na 125 sekund snu, java wyrzuci odczyt czasu gniazda w powyższym scenariuszu.

Powiązane problemy