从Oracle 10g数据库架构中删除连接的用户

时间:2020-03-05 18:59:31  来源:igfitidea点击:

是否有比重新启动Oracle数据库服务更好的方法来强制所有用户与Oracle 10g数据库架构断开连接?

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

同样,我们也不想删除所有与其他模式的连接,因为其他人可能仍然可以连接并使用这些模式进行测试。

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

解决方案

回答

我们是否尝试过ALTER SYSTEM KILL SESSION?从给定架构中的每个会话的V $ SESSION获取SID和SERIAL,然后执行

ALTER SCHEMA KILL SESSION sid,序列号;

回答

要查找会话,作为DBA使用

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

如果我们只想确保获得使用SQL Developer的会话,则可以添加and program ='SQL Developer'。如果只想终止属于特定开发人员的会话,则可以对os_user添加限制

然后用杀死他们

alter system kill session '<sid>,<serial#>'
  
  (e.g. alter system kill session '39,1232')

产生现成的kill-statement的查询可能是

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

这将为该用户在每个会话中返回一条kill语句,例如:

更改系统终止会话'375,64855';

更改系统终止会话'346,53146';

回答

仅花两分钱:最好的方法(但短期内可能不是最快的方法)可能是让每个开发人员都在自己的数据库实例上工作(有关数据库工作,请参见规则1)。

自从Oracle Database 10g Express Edition以来,在开发人员工作站上安装Oracle变得毫不费力。

回答

在杀死它们之前,请确保更改系统并启用受限会话,否则它们将在完成工作之前迅速重新登录数据库。