Oracle 杀死INACTIVE,SNIPED会话
下面是模拟出产生SNIPED会话,以及如何杀死会话避免生产环境连接数超过最大连接数,同理杀死INACTIVE会话原理一样。
(1)现在在主机database1上面连接远程database2上面的库,使用test用户登入。
[oracle@Database1 dbs]$ tnsping database2
TNS Ping Utility for Linux: Version 11.2.0.4.0 - Production on 24-MAY-2018 19:09:18
Copyright (c) 1997, 2013, Oracle. All rights reserved.
Used parameter files:
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.57.129)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = oradb)))
OK (30 msec)
[oracle@Database1 dbs]$ sqlplus test/test
SQL*Plus: Release 11.2.0.4.0 Production on Thu May 24 19:09:28 2018
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL>
(2)到主机database2上面查看具体的test用户信息,test用户状态是SNIPED的。
SQL> col username for a20;
SQL>select SID,USERNAME,STATUS from v$session;
SID USERNAME STATUS
---------- -------------------- ----------------
41 TEST SNIPED
下面这个语句可以更加清楚的看到连接的信息,v$session和v$process结合起来。。
SQL> col SPID for a30;
SQL> col PROGRAM for a30;
SQL> col MACHINE for a30;
SQL> select b.spid,a.sid,a.username,a.program,a.machine from v$session a,v$process b where a.paddr=b.addr and a.type='USER';
SPID SID USERNAME
------------------------------ ---------- --------------------
PROGRAM MACHINE
------------------------------ ------------------------------
8303 40 SYS
sqlplus@Database2 (TNS V1-V3) Database2
8321 OS PID 41 TEST SESSION SID
sqlplus@Database1 (TNS V1-V3) Database1 从Database1上面连接进来的
注意生产库这种会话过多会超出连接限制导致后面用户登入不上数据块。要杀这种会话也很简单,我们这边生产库使用下面这条SQL语句查找出session对应的pid,在操作系统层面将oracle进程杀死进而清理session。
(3)杀会话
select to_char(a.logon_time, 'yyyy-mm-dd hh24:mi') logon_time,
a.sql_id,
a.event,
a.username,
a.osuser,
a.process,
a.machine,
a.program,
a.module,
b.sql_text,
b.LAST_LOAD_TIME,
to_char(b.last_active_time, 'yyyy-mm-dd hh24:mi:ss') last_active_time,
c.owner,
c.object_name,
a.last_call_et,
a.sid,
a.SQL_CHILD_NUMBER,
c.object_type,
p.PGA_ALLOC_MEM,
a.p1,
a.p2,
a.p3,
'kill -9 ' || p.spid killstr,
'ps -ef|grep '|| p.spid ||'|grep LOCAL=NO|awk ''{print $2}''|xargs kill -9' kill_sh
from v$session a, v$sql b, dba_objects c, v$process p
where a.status ='SNIPED' --杀死会话状态,还可以是INACTIVE
and p.addr = a.paddr
and a.sql_id = b.sql_id(+)
and a.wait_class='Idle'
and a.sql_child_number = b.CHILD_NUMBER(+)
and a.row_wait_obj# = c.object_id(+)
and a.type = 'USER'
and a.username='TEST' --要杀会话的用户的名称
order by a.sql_id, a.event;
红色部分根据具体情况自己修改。
通过查询出来的语句将会话杀死,可以看到这里PID 8321就是上面test的一个会话对应的PID。
KILL_SH
--------------------------------------------------------------------------------
ps -ef|grep 8321|grep LOCAL=NO|awk '{print $2}'|xargs kill -9
[root@Database2 ~]# ps -ef|grep 8321|grep LOCAL=NO|awk '{print $2}'|xargs kill -9
[root@Database2 ~]# ps -ef | grep 8321
root 8397 8270 0 19:28 pts/6 00:00:00 grep 8321
相关文章
- 优化Oracle进程与会话的管理(oracle进程会话)
- 从 Oracle 搭建一个测试数据库(oracle测试数据库)
- Oracle数据库备份:5种实用方式(oracle数据库备份方式)
- 探索Oracle数据库系统时间查询(oracle查询系统时间)
- 使用Oracle监听命令实现最佳性能(oracle监听命令)
- 掌握Oracle查看会话的方法(oracle查看会话)
- Oracle建立子分区的方法(oracle建子分区)
- 利用Oracle图形化界面实现数据处理(oracle图形化界面)
- 数据库使用CMD命令操控Oracle数据库极致体验(cmd命令操oracle)
- Oracle中的1和0的翻译(oracle中翻译1和0)
- Oracle数据库中表格保存技术研究(oracle保存表格)
- Oracle供应链管理专家解决您的采购困境(oracle供应链顾问)
- 分析Oracle会话错误日志解决故障症状(oracle会话错误日志)
- 控制Oracle会话连接数有效降低资源占用(oracle 会话连接数)
- Oracle会话数量逐渐减少(oracle会话越来越少)
- Oracle会话等待为何等待(oracle会话等待)
- Oracle会话超限如何解决报错问题(oracle会话满了报错)
- 杀死Oracle会话深入探讨(oracle会话 杀死)
- Oracle会话文件夹应用开发者的基础(oracle会话文件夹)
- 利用Oracle会话计算能力加速业务处理(oracle会话计算机)
- Oracle会话程序一段极具价值的旅程(oracle 会话 程序)
- 利用Oracle数据库实现数据包含方法(oracle中的包含方法)
- Oracle中熟练掌握判断语法(oracle中判断语法)
- Oracle MAX函数处理空值的全面体验(oracle max空值)