Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Nie ma więcej danych do odczytania z gniazda

Ogólne porady dotyczące rozwiązywania problemów z błędami „Brak danych do odczytania z gniazda”.

Błędy te są zwykle spowodowane innym poważnym błędem, takim jak błąd ORA-600. Problem na tyle poważny, że proces serwera uległ awarii i nie mógł nawet wysłać poprawnego komunikatu o błędzie do klienta. (Inną częstą przyczyną tych błędów jest rozłączenie sieci spowodowane przez SQLNET.EXPIRE_TIME lub inny proces, który zabija stare sesje.)

Spójrz na dziennik alertów, aby znaleźć oryginalny komunikat o błędzie.

Poszukaj pliku alert_[name].log w tym katalogu:select value from v$parameter where name = 'background_dump_dest';

Po znalezieniu konkretnego komunikatu o błędzie i szczegółów przejdź na stronę support.oracle.com. Użyj „narzędzia ora-600”, a następnie wyszukaj pierwszy numer po komunikacie ORA-600.

Zwykle będzie jeden lub więcej artykułów dotyczących tego konkretnego typu błędu ORA-600. Użyj dokładnej wersji i platformy, aby zawęzić listę możliwych błędów. (Ale nie zdziw się, jeśli "Wersje, których dotyczy problem" w artykule są błędne. Twierdzenia Oracle o "poprawionej wersji x.y" nie zawsze są prawdziwe.)

Artykuły zazwyczaj wyjaśniają bardziej szczegółowo, w jaki sposób wystąpił problem, możliwe obejścia i rozwiązanie, które zwykle wiąże się z poprawką lub aktualizacją.

W praktyce rzadko chcesz rozwiązać te problemy. „Typową” radą jest skontaktowanie się z Oracle Support, aby sprawdzić, czy rzeczywiście masz ten sam problem, uzyskać poprawkę, uzyskać pozwolenie i wyłączyć środowiska, a następnie zastosować poprawkę. A potem prawdopodobnie zdasz sobie sprawę, że łatka nie działa. Gratulacje, właśnie zmarnowałeś dużo czasu.

Zamiast tego możesz zwykle unikać problem z subtelną zmianą zapytania lub procedury. W Oracle jest wiele funkcji, prawie zawsze można to zrobić w inny sposób. Jeśli kod wygląda trochę dziwnie, dodaj komentarz, aby ostrzec przyszłych programistów:„Ten kod wygląda dziwnie, aby uniknąć błędu X, który powinien zostać naprawiony w wersji Y”.

Szczegółowe porady dotyczące tego kodu

Jeśli to naprawdę cała procedura, powinieneś ją zastąpić czymś takim:

insert into local.tab3(col1, col2, col3, col4)
select tab1.col1, tab1.col2, tab2.col1, tab2.col2
from [email protected] tab1
join [email protected] tab2
    on tab1.col1 = tab2.col1
    and tab1.col2 = tab2.col2;

Ogólnie rzecz biorąc, jeśli to możliwe, zawsze powinieneś robić rzeczy w SQL. Zwłaszcza jeśli możesz uniknąć otwierania wielu kursorów. I zwłaszcza jeśli możesz uniknąć otwierania wielu kursorów do zdalnej bazy danych.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Włączanie TLS w Oracle Apps R12.2

  2. Oracle Floats a liczba

  3. Jaka jest różnica między pls_integer a binary_integer?

  4. Dlaczego nie ma danych wyjściowych po zakończeniu bloku PLSQL Anonymous?

  5. Jak wyodrębnić tylko wartość daty z pola daty w Oracle?