oracle数据库里怎么查询终端号的心跳异常数?

oracle数据库里怎么查询终端号的心跳异常数?,第1张

你好!

这时候需要找出造成异常阻塞的session并清除。

oracle

session通常具有三个特征:

(1)一个session可能阻塞多个session;

(2)一个session最多被一个session阻塞;

(3)session阻塞关系不会形成环路。(环路即死锁,oracle能自动解除)

因此session的阻塞关系为一棵树,进而DB系统所有session的BLOCK阻塞关系是一个由若干session阻塞关系树构成的森林,而异常session一定会在故障爆发时成为根(root)。因此,找寻异常锁表session的过程就是找出异常的root。

一般认为异常root有两个特征:(1)block树的规模过大,阻塞树规模即被root层层阻塞的session总数;(2)阻塞的平均等待时间过长。

查找异常session的方法一:

OEM—>

performance—>

Blocking

Sessions

查找异常session的方法二:

select

r.root_sid,

s.serial#,

r.blocked_num,

r.avg_wait_seconds,

s.username,s.status,s.event,s.MACHINE,

s.PROGRAM,s.sql_id,s.prev_sql_id

from

(select

root_sid,

avg(seconds_in_wait)

as

avg_wait_seconds,

count(*)

-

1

as

blocked_num

from

(select

CONNECT_BY_ROOT

sid

as

root_sid,

seconds_in_wait

from

v$session

start

with

blocking_session

is

null

connect

by

prior

sid

=

blocking_session)

group

by

root_sid

having

count(*)

>

1)

r,

v$session

s

where

r.root_sid

=

s.sid

order

by

r.blocked_num

desc,

r.avg_wait_seconds

desc

该SQL语句即是根据v$session的字段blocking_session统计阻塞树根阻塞session的计数以及平均阻塞时间、并进行排序,排名最前的往往是异常session。

用sendUrgentData这个来判断服务端是否异常关闭

想实现自动连接服务端,如果用

socket = new Socket("192.168.1.4",1821)

socket.connect()

只有每次去new创建这个sock对象,因为只有sock对象创建好了才由输入输出流

目前的实现方式就是,

1.在原有的基础上,再开多一个线程,专门负责发送心跳,

2.先睡眠500毫秒,

3.用socket.sendUrgentData(FF),给服务端,

4.如果服务端异常关闭的话,我就捕捉这个异常。。。

5.循环

心跳的意思就是每隔一段时间,客户端给服务器发一段消息:

1、客户端:服务器,我还活着,你死了没

2、服务器:客户端,我知道你还活着这个信息,我已经记录下来了,同时告诉你我也还活着

更多问题到问题求助专区http://bbs.houdunwang.com/


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6618425.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-25
下一篇 2023-03-25

发表评论

登录后才能评论

评论列表(0条)

保存