v$session有sid记录,但相应客户端上却没有该sid会话

在v$lock中可以看到sid=11的会话有未提交的事务,引发了锁堵塞,导致其他update语句无法执行。

在v$session也可以找到sid=11的记录,同时也可查到该sid=11的会话是由machine=‘test'通过program='PLSqlDev.exe'的方式连接的,但是奇怪的,登录machine=‘test'的这个机器的时候,该机器上的PL Sql Develop根本不存在未提交的事务,而且通过v$mystat查看每个会话的sid,都找不到sid=11的会话。

目前只能通过执行'alter system kill session '11''的方式来释放该对话,但是找不到问题的原因。有没有什么办法可以追踪到这个问题的根本原因呢(例如定位到是网络问题还是程序假死问题等等),有没有什么监控方法来监控此类异常情况?

参与22

4同行回答

royalwzyroyalwzy技术经理海通证券股份有限公司
1.首先确认你的环境是不是RAC;2.v$mystat是查看当前会话的统计信息的,里面是不会出现其它的会话的;3.如果你想查看是什么语句造成的,可以用v$session和v$sql表关联来查看相应的sql;ps:杀掉会话的语法应该是alter system kill session \'sid,serial\';...显示全部

1.首先确认你的环境是不是RAC;

2.v$mystat是查看当前会话的统计信息的,里面是不会出现其它的会话的;

3.如果你想查看是什么语句造成的,可以用v$session和v$sql表关联来查看相应的sql;

ps:杀掉会话的语法应该是alter system kill session \'sid,serial\';

收起
证券 · 2015-11-18
浏览1336
  • 1.首先确认你的环境是不是RAC; -->环境是win-64下的单实例11g 2.v$mystat是查看当前会话的统计信息的,里面是不会出现其它的会话的; -->是的,我在每个对话框里都查看过v$mystat,但都找不到sid=11的记录 3.如果你想查看是什么语句造成的,可以用v$session和v$sql表关联来查看相应的sql; -->没有办法关联,SQL_HASH_VALUE和SQL_ID列都为空,无法找到 ps:杀掉会话的语法应该是alter system kill session 'sid,serial'; -->感谢提醒~~~嘿嘿
    2015-11-18
lixichaolixichao其它石河子大学
关于这个,我也做过相应的测试.但是没有得到想要的结果.测试的大致结果如下:1.通过 plsql  dev 连接到 oracle 之后,执行一个长 select 语句,v$session可以监控到这个会话,并且会 active 的.但是 sql 执行完成之后, 会话的状态变为 inactive 了.在这里之前,我觉...显示全部

关于这个,我也做过相应的测试.但是没有得到想要的结果.

测试的大致结果如下:

1.通过 plsql  dev 连接到 oracle 之后,执行一个长 select 语句,v$session可以监控到这个会话,并且会 active 的.但是 sql 执行完成之后, 会话的状态变为 inactive 了.在这里之前,我觉得都是正常的.也符合 oracle 的解释.   但是当我将 plsql dev 关闭之后,查询相应的会话,依然是存在的.

所以到这里,就感觉有点模糊了.

收起
IT其它 · 2015-12-24
浏览1326
  • 所以 我更倾向于认为plsql Dev的问题,现在还没有发现其他客户端有这样的问题
    2015-12-25
heibao326heibao326数据库管理员js
问题原因可能找到了,可能是plsql  develop程序导致的,问题重现步骤如下step1:比如在10:45时,打开plsql developer的sql window,执行\'select * from v$mystat\'语句,此时出现的结果是sid=26ps:同时在v$session中也有sid=26的记录,program=plsqldev machine=xxxStep2:过...显示全部

问题原因可能找到了,可能是plsql  develop程序导致的,问题重现步骤如下

step1:比如在10:45时,打开plsql developer的sql window,执行\'select * from v$mystat\'语句,此时出现的结果是sid=26

ps:同时在v$session中也有sid=26的记录,program=plsqldev machine=xxx

1.png


Step2:过了一会儿,大约过15分钟左右,还是在原来的sql window,执行\'select * from v$mystat\'语句,此时plsql developer程序出现短暂的卡住(处于未响应状态),等待其相应成功时,结果sid=31(在同一个sql window中,2次执行v$mystat的sid不一样!!!!)

ps:此时在v$session中有sid=26和sid=31的记录,program=plsqldev machine=xxx,但是我在machine=xxx的机子上只开了一个sql window

所以根据以上步骤猜测:应该是plsql developer未响应导致的,所以如果对话中有未提交的事务时  可能也就会出问题了


收起
IT其它 · 2015-11-19
浏览1161
冯帅冯帅数据库管理员贝壳金服
gv$session显示全部

gv$session

收起
融资租赁 · 2015-11-18
浏览1279
  • 你好 能详细说说吗?我的数据库环境是单实例的,那么gv$session和v$session应该没有太大区别吧
    2015-11-18
  • 冯帅  冯帅回复 heibao326
    如果是单实例的话是没什么区别 那你把PLSqlDev这个ide关了还会有吗?
    2015-11-18
  • heibao326  heibao326回复 冯帅
    PLSql中根本找不到这个id,我现在是采用kill session的方式解决的,能把这个session释放掉
    2015-11-18

提问者

heibao326
数据库管理员js

问题状态

  • 发布时间:2015-11-18
  • 关注会员:5 人
  • 问题浏览:4184
  • 最近回答:2015-12-24
  • X社区推广