Oracle开发中用户的删除,也就是模式的删除。
[
|
2007/05/15 14:13]
|
2007/05/15 14:13]
相信大家都有这样的经验。在开发过程中都有需要重新创建用户(模式)。而当这个用户有链接的时候,就是提示你无法删除。是吧?
如下:
drop user username cascade
然后,你就查这个用户的session,用Kill把它干掉。
select sid,serial# from v$session where username='username';
SID SERIAL#
-----------
8 25
ALTER SYSTEM KILL SESSION '8,25';
这样再执行drop就没有问题了。
后补:
查杀所有用户的Session
select 'alter system kill session '''||sid||','||serial#||''' immediate;' from v$session where username='TEST';
可是这样很麻烦。如果确定整个数据库没有什么重要链接,告诉你一招,系统级别的杀人方法,限于linux
这样就杀掉所有的oracle的链接,无一幸免。
其实这样也不好,如果可以以用户连接,只是删除掉对象内表,视图,包,触发器,存储过程就好了。
事实上一个网上的哥们写了这样一个东西。如下:
DECLARE
TYPE name_list IS TABLE OF VARCHAR2(40);
TYPE type_list IS TABLE OF VARCHAR2(20);
Tab_name name_list:=name_list();
Tab_type type_list:=type_list();
sql_str VARCHAR2(500);
BEGIN
sql_str := 'select uo.object_name,uo.object_type from user_objects uo where uo.object_type not in(''INDEX'',''LOB'') order by uo.object_type desc';
EXECUTE IMMEDIATE sql_str BULK COLLECT INTO tab_name,tab_type;
FOR i IN Tab_name.FIRST.. Tab_name.LAST LOOP
sql_str := 'DROP ' || Tab_type(i) || ' ' || Tab_name(i);
EXECUTE IMMEDIATE sql_str;
END LOOP;
END;
这招不错,可是这个有时候好用,有时候就不好用。至今,我都是交替使用。这招不行,用另外一招。希望哪位大侠提供个更好的解决办法。
本文链接:http://www.52zhe.cn/read.php/17.htm
本文作者:kook(若就博客内所涉及的技术问题交流,请用下面的MSN或Gmail联系我)
联系方式:(MSN:kook#live.com) (Google talk:kookliu)
没有版权:GNU,转载时请注明“转载人”欠本人一顿饭,来日见面之时兑现!谢谢合作!
如下:
drop user username cascade
然后,你就查这个用户的session,用Kill把它干掉。
select sid,serial# from v$session where username='username';
SID SERIAL#
-----------
8 25
ALTER SYSTEM KILL SESSION '8,25';
这样再执行drop就没有问题了。
后补:
查杀所有用户的Session
select 'alter system kill session '''||sid||','||serial#||''' immediate;' from v$session where username='TEST';
可是这样很麻烦。如果确定整个数据库没有什么重要链接,告诉你一招,系统级别的杀人方法,限于linux
ps -ef|grep LOCAL=NO|cut -c 9-15|xargs kill -9
这样就杀掉所有的oracle的链接,无一幸免。
其实这样也不好,如果可以以用户连接,只是删除掉对象内表,视图,包,触发器,存储过程就好了。
事实上一个网上的哥们写了这样一个东西。如下:
DECLARE
TYPE name_list IS TABLE OF VARCHAR2(40);
TYPE type_list IS TABLE OF VARCHAR2(20);
Tab_name name_list:=name_list();
Tab_type type_list:=type_list();
sql_str VARCHAR2(500);
BEGIN
sql_str := 'select uo.object_name,uo.object_type from user_objects uo where uo.object_type not in(''INDEX'',''LOB'') order by uo.object_type desc';
EXECUTE IMMEDIATE sql_str BULK COLLECT INTO tab_name,tab_type;
FOR i IN Tab_name.FIRST.. Tab_name.LAST LOOP
sql_str := 'DROP ' || Tab_type(i) || ' ' || Tab_name(i);
EXECUTE IMMEDIATE sql_str;
END LOOP;
END;
这招不错,可是这个有时候好用,有时候就不好用。至今,我都是交替使用。这招不行,用另外一招。希望哪位大侠提供个更好的解决办法。
本文链接:http://www.52zhe.cn/read.php/17.htm
本文作者:kook(若就博客内所涉及的技术问题交流,请用下面的MSN或Gmail联系我)
联系方式:(MSN:kook#live.com) (Google talk:kookliu)
没有版权:GNU,转载时请注明“转载人”欠本人一顿饭,来日见面之时兑现!谢谢合作!
Bea产品无需注册的下载方法。如:weblogic
Linux下虚拟用户FTP搭建,VSFTP + MYSQL



