如何在ORACLE 8i 中KILL掉某一普通用户的所有SESSION

navy8 2004-12-28 04:56:29
如何在ORACLE 8i 中KILL掉某一普通用户的所有SESSION,如果某一用户TEST,我想DROP这个用户,但发现SESSION中已经存在,不能DROP

用一个过程把此用户的所有SESSION都去掉,并且删除此用户!
...全文
455 27 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
iyvewzhb 2005-01-13
  • 打赏
  • 举报
回复
好,学习
xpony 2005-01-13
  • 打赏
  • 举报
回复
unix下 killsession.sh (供参考:用oracle创建用户登录后执行)
usage: killsession.sh 要kill的用户
--------------------------------------------------------
#!/usr/bin/ksh
if [ $# -ne 1 ]; then
echo "usage:$0 user"
exit 1
fi

user=$1
sql="select '#'||sid || ',' || serial# sid from v\$session where username=upper(
'${user}');"

sessions=`echo $sql | sqlplus -S "/ as sysdba" | grep "^#"`

for x in $sessions
do
echo "alter system kill session '${x#\#}';" | sqlplus -S "/ as sysdba"
done
----------------------------------------------------------------------------------
ks9960 2005-01-13
  • 打赏
  • 举报
回复
select 'alter system kill session'||sid||','||serial#改为
select 'alter system kill session '''||sid||','||serial#||''''
ks9960 2005-01-13
  • 打赏
  • 举报
回复
select 'alter system kill session'||sid||','||serial#
from v$session
where username = '***';
用spool输出为一个sql脚本,然后调用(没这么做过,楼主测试一下)

hrui99 2005-01-10
  • 打赏
  • 举报
回复
DROP USER TEST CASCADE
navy8 2005-01-10
  • 打赏
  • 举报
回复
没一个是比较满意的答案,可能是这种系统语句在SP中不能运行吧
wangybyangxr 2004-12-31
  • 打赏
  • 举报
回复
对了,
alter system kill session 'sid,serial#';
DROP USER as_username ;
这两个命令不能在存储过程中执行,在你的程序中发这个命令吧。
wangybyangxr 2004-12-31
  • 打赏
  • 举报
回复
select sid,serial# from v$session
where username = '用户名';

这条语句在多个客户端连到这个数据库中,会返回多条记录的,但sid,serial#的值是不同的,只是找到所有的sid,serial#值,做个循环一个一个的 alter system kill session 'sid,serial#';
最后:
DROP USER as_username ;

navy8 2004-12-31
  • 打赏
  • 举报
回复
to wangybyangxr(王永斌) :
如果在多个客户端连到这个数据库中,你如何一次性全部删除呀,这样也可以吗?
wangybyangxr 2004-12-31
  • 打赏
  • 举报
回复
CREATE PROCEDURE KILL_USER(as_username VARCHAR2)
AS
s_sid varchar2(8);
s_serial varchar2(16);
s_cs varchar2(40);
BEGIN
select sid,serial into s_sid ,s_serial from v$session
where username = as_username ;
s_cs := sid || ',' || serial
alter system kill session s_cs ;

DROP USER as_username ;

END;
wangybyangxr 2004-12-31
  • 打赏
  • 举报
回复
CREATE PROCEDURE KILL_USER(as_username VARCHAR2)
AS
s_sid varchar2(8);
s_serial varchar2(16);
s_cs varchar2(40);
BEGIN
select sid,serial into s_sid ,s_serial from v$session
where username = as_username ;
s_cs := sid || ',' || serial
alter system kill session s_cs ;

DROP USER as_username ;

END;
baojianjun 2004-12-31
  • 打赏
  • 举报
回复
其實少用為好

最好的解決方法還是在程序設計上下工夫,如何減少沖突
navy8 2004-12-31
  • 打赏
  • 举报
回复
怎么还找不我要的答案呀,我不是DBA,我是developer,我的要在一个ADO里调用一个存储过程,并执行它就可以实现用户的自动删除,保证对客户的易用呀
constantine 2004-12-30
  • 打赏
  • 举报
回复
up
liuyi8903 2004-12-30
  • 打赏
  • 举报
回复
KILL后是自动rollback
navy8 2004-12-30
  • 打赏
  • 举报
回复
怎么没有满意的答案的呀,我顶
kavoe 2004-12-30
  • 打赏
  • 举报
回复
建议用pl/sql developer,功能强大,使用方便,
kill session也是小意思。
honda418 2004-12-30
  • 打赏
  • 举报
回复
直接用客户端:OBJECT BROWSER里面的客户端进程管理KILL掉就OK了啊,还这么麻烦。。。。
lhj821130 2004-12-29
  • 打赏
  • 举报
回复
KILL后是自动rollback还是commit是看你oracle中设置的事物是哪一项
navy8 2004-12-29
  • 打赏
  • 举报
回复
如果有多个SESSION你怎么去处理呀,不会还要我手工进行查看,再一个一个对应起来吧,那样就管理比较复杂了
加载更多回复(7)

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧