欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

oracle用户正在连接,无法删除的有关问题

更新时间: 2014-01-05 02:14:33 责任编辑: Author_N1

 

oracle用户正在连接,无法删除的问题
在oracle用户正在连接时,试图用下面的存储过程先清除session,再删除该用户,但在执行 清除用户session 那条sql语句时,有时候会出现 “无效的sid或serial#”错误,请问下各位大神,有什么解决方法吗?

create or replace procedure dropUser(user_name in varchar2) authid current_user is
cnt integer;
sqlStr varchar2(1000);
begin
   sqlStr := 'alter user ' || user_name || ' account lock';
   execute immediate sqlStr;
   for x in (select * from v$session where username=user_name)
   loop
       --清除用户session
       sqlStr := 'alter system disconnect session ''' || x.sid || ',' || x.serial# || ''' immediate';
       execute immediate sqlStr;
   end loop;
   
   loop 
      select count(*) into cnt from v$session where username=user_name;
      exit when cnt=0;
      dbms_lock.sleep(3);
   end loop;
   
   sqlStr := 'drop user' || user_name || 'cascade';
end dropUser;
/
exec dropUser('user1');

--参考方法--
在第一个Loop中的操作,用begin exception end包一下。
--参考方法--
会有这样的可能 用户的session id 可能换了,或者时效。 这样:
begin
execute immediate sqlStr;
exception when others then
null;
end;
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:14:33
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/7430/
本文WWW.DOC100.NET DOC100.NET版权所有。