Oracle
 sql >> база данни >  >> RDS >> Oracle

Няма повече данни за четене от сокета

Общ съвет за отстраняване на грешки „Няма повече данни за четене от сокет“.

Тези грешки обикновено са причинени от друга сериозна грешка, като например грешка ORA-600. Толкова сериозен проблем, че сървърният процес се срина и дори не може да изпрати правилно съобщение за грешка на клиента. (Друга често срещана причина за тези грешки е прекъсване на връзката с мрежата, причинено от SQLNET.EXPIRE_TIME или друг процес, който убива старите сесии.)

Погледнете дневника на сигналите, за да разберете оригиналното съобщение за грешка.

Потърсете файла alert_[name].log в тази директория:select value from v$parameter where name = 'background_dump_dest';

След като намерите конкретното съобщение за грешка и подробности, отидете на support.oracle.com. Използвайте „инструмента ora-600“ и след това потърсете първото число след съобщението ORA-600.

Обикновено ще има една или повече статии за този конкретен тип грешка ORA-600. Използвайте точната версия и платформа, за да стесните възможния списък с грешки. (Но не се учудвайте, ако „засегнатите версии“ ​​в статията са грешни. Твърденията на Oracle за „фиксирано във версия x.y“ не винаги са верни.)

Статиите обикновено обясняват по-подробно как е възникнал проблемът, възможните решения и решение, което обикновено включва корекция или надстройка.

На практика рядко искате да решите тези проблеми. „Типичният“ съвет е да се свържете с поддръжката на Oracle, за да потвърдите, че наистина имате същия проблем, да получите корекция, да получите разрешение и да свалите средата(ите) и след това да приложите корекцията. И тогава вероятно ще разберете, че пластирът не работи. Поздравления, просто загубихте много време.

Вместо това обикновено можете да избягвате проблемът с фина промяна в заявката или процедурата. Има много функции в Oracle, почти винаги има друг начин да го направите. Ако кодът изглежда малко странен, добавете коментар, за да предупредите бъдещите програмисти:„Този ​​код изглежда странно, за да се избегне грешка X, която трябва да бъде коригирана във версия Y.“

Конкретен съвет за този код

Ако това наистина е цялата ви процедура, трябва да я замените с нещо подобно:

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;

По принцип винаги трябва да правите нещата в SQL, ако е възможно. Особено ако можете да избегнете отварянето на много курсори. И особено ако можете да избегнете отварянето на много курсори към отдалечена база данни.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да получите lat и long от sdo_geometry в oracle

  2. Как да дефинирам тригер ON COMMIT в Oracle?

  3. Неща, които трябва да знаете за таблицата FND_LOBS в приложенията на Oracle

  4. Отпадане на свързан потребител от схема на база данни на Oracle 10g

  5. Как мога да въведа множество условия в оператора LIKE?