从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变得毫不费力。
回答
在杀死它们之前,请确保更改系统并启用受限会话,否则它们将在完成工作之前迅速重新登录数据库。