【发布时间】:2012-03-07 10:31:57
【问题描述】:
我正在尝试在我们的开发环境中删除 oracle 11g 中的架构,但我返回 SQL 错误:没有更多数据可从套接字读取。架构上没有负载,因为它只是一个开发数据库。这是一个小数据库,没有任何疯狂的事情发生。我一直看到这个错误。重新启动实例有时可以解决问题。我似乎找不到任何指向解决方案的信息。谢谢!
【问题讨论】:
我正在尝试在我们的开发环境中删除 oracle 11g 中的架构,但我返回 SQL 错误:没有更多数据可从套接字读取。架构上没有负载,因为它只是一个开发数据库。这是一个小数据库,没有任何疯狂的事情发生。我一直看到这个错误。重新启动实例有时可以解决问题。我似乎找不到任何指向解决方案的信息。谢谢!
【问题讨论】:
我了解此消息通常是由错误引起的。此外,当它出现在您的警报日志和/或跟踪文件中时,将包含有关错误实际可能是什么的更多详细信息。要查找会话运行的跟踪文件:
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');
【讨论】:
我公司的一位 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;
【讨论】:
也有这个问题,通过在Tools->Preferences ->Database->PL/SQL Compiler中将“PLScope identifiers:”设置为“None”解决了
【讨论】: