当前位置:  开发笔记 > 数据库 > 正文

从Oracle 10g数据库模式中删除已连接的用户

如何解决《从Oracle10g数据库模式中删除已连接的用户》经验,为你挑选了3个好方法。

是否有更好的方法强制断开所有用户与Oracle 10g数据库模式的连接,而不是重新启动Oracle数据库服务?

我们有几个开发人员使用SQL Developer连接到单个Oracle 10g服务器上的相同模式.问题是,当我们想要删除模式以重建它时,不可避免地有人仍然连接,并且当某人仍然连接时我们不能删除数据库模式或用户.

出于同样的原因,我们不希望删除所有与其他模式的连接,因为其他人可能仍然连接并使用这些模式进行测试.

有人知道解决这个问题的快捷方法吗?



1> Sten Vesterl..:

查找会话,作为DBA使用

select sid,serial# from v$session where username = ''

如果您只想确保使用SQL Developer的会话,可以添加and program = 'SQL Developer'.如果您只想杀死属于特定开发人员的会话,则可以添加限制os_user

然后杀了他们

alter system kill session ','

(例如alter system kill session '39,1232')

生成现成的kill语句的查询可以是

select 'alter system kill session ''' || sid || ',' || serial# || ''';' from v$session where username = ''

这将为该用户的每个会话返回一个kill语句 - 类似于:

alter system kill session '375,64855';

alter system kill session '346,53146';


小额外 - 立即添加命令:`select'tign system kill session'''|| sid || ','|| 序列#|| '''立即;' 来自v $ session其中username ='';`这将强制命令

2> Chand Priyan..:

使用此查询查找到DB的现有会话:

SELECT s.inst_id,
       s.sid,
       s.serial#,
       p.spid,
       s.username,
       s.program
FROM   gv$session s
       JOIN gv$process p ON p.addr = s.paddr AND p.inst_id = s.inst_id
WHERE  s.type != 'BACKGROUND';

你会看到类似下面的东西. Oracle会话

然后,使用从上面的结果中提取的值运行以下查询.

ALTER SYSTEM KILL SESSION ',';

例如: ALTER SYSTEM KILL SESSION '93,943';



3> RLapinski..:

我的建议是这个简单的匿名块:

DECLARE
   lc_username   VARCHAR2 (32) := 'user-name-to-kill-here';
BEGIN
   FOR ln_cur IN (SELECT sid, serial# FROM v$session WHERE username = lc_username)
   LOOP
      EXECUTE IMMEDIATE ('ALTER SYSTEM KILL SESSION ''' || ln_cur.sid || ',' || ln_cur.serial# || ''' IMMEDIATE');
   END LOOP;
END;
/


在杀戮会议之前更好地注意ospid,他们可能会卡住
推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有