Удаление схемы в Oracle: ошибка SQL: нет данных для чтения из сокета - PullRequest
1 голос
/ 16 февраля 2012

Я пытаюсь удалить схему в oracle 11g в нашей среде разработки и получаю обратно Ошибка SQL: больше данных для чтения из сокета . На схеме нет нагрузки, так как это просто dev db. Это маленькая БД без каких-либо сумасшествий. Я вижу эту ошибку все время. Перезапуск экземпляра иногда решает проблему. Я не могу найти какую-либо информацию, которая указала бы на решение. Спасибо!

Ответы [ 3 ]

1 голос
/ 17 февраля 2012

Дба в моей компании дал мне этот.Это

CREATE OR REPLACE  PROCEDURE "SYS"."DROP_SCHEMA_FAST" (pSchema IN
    VARCHAR2)
IS 
    cnt NUMBER(5) := 0;
  sql1 varchar2(4000);
  x PLS_INTEGER;
--disable constraints:
  cursor cur1 is select 'alter table ' || OWNER ||'.'||table_name||' disable constraint '||constraint_name sql2
          from all_constraints where owner=pSchema and status='ENABLED'
          and table_name not like 'BIN$%' and constraint_name not like 'SYS_%' and constraint_name not like '%PK%';

  cursor cur2 is select 'alter table ' || OWNER ||'.'||table_name||' disable constraint '||constraint_name sql2 
          from all_constraints where owner=pSchema and status='ENABLED'
          and table_name not like 'BIN$%' and constraint_name not like 'SYS_%';  

--truncate all tables:
cursor cur3 is select 'truncate table ' || OWNER ||'.'||table_name sql2 from all_tables where owner=pSchema 
and table_name not like 'BIN$%';

BEGIN
    SELECT COUNT(*) INTO cnt FROM dba_users WHERE UPPER(username) = UPPER(pSchema);
    IF (cnt <= 0) THEN
        RETURN;
    END IF;
    sql1 := 'ALTER USER ' || UPPER(pSchema) || ' ACCOUNT LOCK';
    EXECUTE IMMEDIATE sql1;

--disable constraints:  
FOR ao_rec IN cur1 LOOP
        EXECUTE IMMEDIATE ao_rec.sql2;
END LOOP;

FOR ao_rec IN cur2 LOOP
        EXECUTE IMMEDIATE ao_rec.sql2;
END LOOP;
--truncate all tables:
FOR ao_rec IN cur3 LOOP
        EXECUTE IMMEDIATE ao_rec.sql2;
END LOOP;

--drop schema:
sql1 := 'DROP USER ' || UPPER(pSchema) || ' CASCADE';
    EXECUTE IMMEDIATE sql1;
exception when others then null; 
END;
1 голос
/ 16 февраля 2012

Я понимаю, что это сообщение часто возникает из-за ошибки.Кроме того, при появлении записи в вашем журнале оповещений и / или в файле трассировки будет больше подробностей о том, что на самом деле может быть ошибкаЧтобы найти файл трассировки для сеанса, выполните:

select    U_DUMP.value
       || '/'
       || DB_NAME.value
       || '_ora_'
       || V$PROCESS.SPID
       || nvl2(V$PROCESS.TRACEID, '_' || V$PROCESS.TRACEID, null)
       || '.trc'
         "Trace File"
  from V$PARAMETER U_DUMP
       cross join V$PARAMETER DB_NAME
       cross join V$PROCESS
       join V$SESSION
         on V$PROCESS.ADDR = V$SESSION.PADDR
 where U_DUMP.NAME = 'user_dump_dest'
       and DB_NAME.NAME = 'db_name'                   
       and v$session.audsid=sys_context('userenv','sessionid');
0 голосов
/ 18 мая 2016

Также имелась проблема, исправленная установкой «Идентификаторы PLScope:» в «Нет» в Tools->Preferences ->Database->PL/SQL Compiler

...