oracle _ v$transaction / v$session /v$process
摘要:
情况,代码没有报错(no sqlException and other exception ),断点执行到ps.executeQuery()便结束,前台在打圈圈没有反应
查了一圈了找到了几句sql,先是在v$session表中查看到当前存在的session记录,看到记录中有正在操作的表,再是kill掉对应的session,之后操作便解决了前面出现的问题
所以,在这里做个简单的记录:
(1)想到了一些问题,jdbc当然不是直接操作数据库的,那么遵循什么协议动态保持自身的状态与“oracle结果集”的游标关闭打开状态一致(这样表述是否正确),使用了什么协议
传输层:建立可靠的数据传输。TCP协议
会话层:建立端到端的连接
JDBC 连接远程计算机 是基于socket 的,也就是建立 TCP/IP 可靠的数据连接。
个人认为:属于传输层
既然先提到了v$session和session,那就从“会话”开始:
根据session id 可以查看当前session正在执行的的事务信息 :
select * from v$transaction where addr in (select taddr from v$session where sid = &sid )
重复查询USED_UBLK,USED_UREC可以看到变化,可以估计事务的进度,尤其是长时间的回滚操作,当这两个值为0,回滚也就完成了。
select a.sid, a.serial#, a.user#, a.username, b.addr,
b.USED_UBLK, b.USED_UREC
from v$transaction b, v$session a
where b.addr in (select a.taddr from v$session a where a.sid = &sid)
sid : session id saddr : seesion address
serial# : sid会被重用,当sid被重用的时候,searial#会增加,不会重复
taddr : 当前的transaction address ,可以用来关联v$transaction
status :用来判断session的状态。
(1)active,正在执行sql语句 (2)inactive ,等待操作 (3)killed被标注为删除
server : server type (dedicated or shared)
USER#: session's user id。等于dba_users中的user_id。Oracle内部进程(即后台进程)的user#为0。
USERNAME: session's username,即表示(服务端数据库里的)哪个数据库用户(而非服务端的操作系统的用户)在使用该会话。等于dba_users中的username。Oracle内部进程(即后台进程)的username为空。
program : 产生这个进程的应用程序?
type : session type (background or user)
process:客户端应用程序在其操作系统级别上的prodess id (如此描述难道还能细分)
machine : 一般是客户端所在主机的主机名 ?
osuser : 客户端操作系统的用户名
附加:
当MACHINE=计算机名时,TERMINAL=unkown;当MACHINE=工作组/计算机名时,TERMINAL=计算机名。
*“会话”中执行sql语句的相关信息
MODULE, MODULE_HASH, ACTION, ACTION_HASH, CLIENT_INFO: 应用通过DBMS_APPLICATION_INFO设置的一些信息。
action : 对于sql/Plus ,信息是sql window or other
fixed_table_sequence : 当session完成一个user call后便增加一个数值(不是+1),如果statue是inactive不会增加,可以根据此值的变化监控某时间点以来ssession的性能情况,eg:一个小时前,某个session的fixed_table_sequence值为1000,现在是2000,说明这个session使用的比较频繁,可以重点关注此session的performance statistics
lockwait : 可以通过这个字段查询出当前正在等待的锁的相关信息 ,sid &lockwait 与 v$lock中的sid &kaddr相对应,查看当前等待锁的类型等信息
row_wait_obj#:被锁定行所在table的object_id,和dba_objects中的的object_id关联可以得到被锁定的table name
row_wait_file# :被锁定行所在的datafile id 。和v$datafile中的file#关联可以得到datafile name
row_wait_row# : session当前正在等待的被锁定的行
logon time : session login time
*说明 :
(1)
看到一个"会话",首先确定“会话”的类型是什么,首先要看type字段,因为program ,process ,osuser, machine ,terminal在type值不同的时候有不同意义 :
当type值为background,这几个字段表示的是服务器端的操作系统上的意义
当type值为user,表示的是客户端的操作系统上的意义
http://www.zhihu.com/question/21142020
http://blog.****.net/haiross/article/details/17718383 (v$session && v$process)