我需要终止(kill)Oracle Db v$session
中status
无效的所有会话
为了列出活动和不活动的会话,我使用了以下语句:
SELECT sid, serial#, status FROM v$session;
我需要一个声明来终止状态为==活跃的会话
答案 0 :(得分:1)
您可以使用以下代码块
declare
v_command varchar2(500);
begin
for c in (
select sid, serial#, machine, module, username, client_info, status, inst_id
from gv$session v
where v.status != 'ACTIVE'
--and v.inst_id = '&i_inst_id'
order by username
)
loop
begin
v_command := 'alter system kill session ''' || c.sid || ',' ||c.serial# ||
',@'||to_char(c.inst_id)||''' immediate';
execute immediate v_command;
exception when others then dbms_output.put_line(sqlerrm);
end;
end loop;
end;
其中v$session
被gv$session
动态性能视图替换,并且INST_ID
列与具有RAC DB
情况的实例编号参数进行排序。即,即使您具有单个实例数据库,也可以使用上述代码。
答案 1 :(得分:1)
只有一种终止会话的方法,即通过Cursor cursor = null;
try {
cursor = db.rawQuery("SELECT * FROM " + TABLE_NAME + " LIMIT 1", null);
...
} finally {
if(cursor != null) {
cursor.close();
}
}
例如,这是一个声明:
'sid,serial#'
因此,我们需要经历一个周期才能对所有ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;
执行此语句,但仅当 status!= active 时:
这段代码可以解决这个问题:
'sid,serial#'