【问题标题】:Drop Schema in Oracle: SQL Error: No more data to read from socketOracle 中的删除模式:SQL 错误:没有更多数据可以从套接字读取
【发布时间】:2012-03-07 10:31:57
【问题描述】:

我正在尝试在我们的开发环境中删除 oracle 11g 中的架构,但我返回 SQL 错误:没有更多数据可从套接字读取。架构上没有负载,因为它只是一个开发数据库。这是一个小数据库,没有任何疯狂的事情发生。我一直看到这个错误。重新启动实例有时可以解决问题。我似乎找不到任何指向解决方案的信息。谢谢!

【问题讨论】:

    标签: oracle schema oracle11g


    【解决方案1】:

    我了解此消息通常是由错误引起的。此外,当它出现在您的警报日志和/或跟踪文件中时,将包含有关错误实际可能是什么的更多详细信息。要查找会话运行的跟踪文件:

    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');
    

    【讨论】:

    • 我在尝试删除用户后直接尝试了此命令。我仍然收到错误 17410“没有更多数据可以从套接字读取”并且查询没有返回任何内容。有时,即使在那之后尝试访问架构也会再次出现“不再从套接字读取数据”错误。
    【解决方案2】:

    我公司的一位 dba 给了我这个。这是

    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;
    

    【讨论】:

      【解决方案3】:

      也有这个问题,通过在Tools-&gt;Preferences -&gt;Database-&gt;PL/SQL Compiler中将“PLScope identifiers:”设置为“None”解决了

      【讨论】:

      • 请查看URL这将有助于提升您的内容质量
      • 好吧,谢谢你,但我已经完成了这个。是我回答有问题吗?如果是这样,我会解决这个问题! (抱歉打扰)
      • 我应该添加类似文档的东西吗?它只是为我解决了问题,不记得我在哪里找到了确切的答案,但这就是我为使错误消失所做的一切。
      猜你喜欢
      • 1970-01-01
      • 2011-12-11
      • 1970-01-01
      • 2015-05-12
      • 2012-09-18
      • 2018-01-07
      • 2012-07-16
      • 2017-06-17
      相关资源
      最近更新 更多