遗留session阻塞问题(求访问私有sql存储区的方法)

dabaocsdn 2007-04-27 08:35:00
我在修改天乙社区7.x的源代码,来做公司的论坛。
天乙社区是一个集struts+hibernate+spring的开源Java社区。

论坛运行一段时候后,Hibernate报错不能创建新的连接。

开始怀疑是池的问题,换了dbcp, c3p0, proxool,都一样。
然后怀疑是程序的问题,可是天乙封装的很好。
后来配置为不用缓冲池

我用select sid, status, username from v$session
发现过一段事件就会有一个session累积下来,
通过:
select sql_text from v$sqltext_with_newlines where (hash_value,address)
in (select sql_hash_value,sql_address from v$session where sid=29) order by address,piece;
发现这些积累下来的session都对应着:
update bbscs_forum set ParentID=:1, MainID=:2, BoardID=:3, BoardName=:4, ReNum=:5, Face=:6, UserID=:7, UserName=:8, NickName=:9, Title=:10, Detail=:11, Sign=:12, ArtSize=:13, Click=:14, PostTime=:15, LastTime=:16, IPAddress=:17, IsNew=:18, Elite=:19, EliteID=:20, Agree=:21, BeAgainst=:22, CanNotDel=:23, CanNotRe=:24, Commend=:25, DelSign=:26, DelUserID=:27, DelUserName=:28, DelTime=:29, DelIP=:30, Amend=:31, DoEliteName=:32, DoEliteTime=:33, HaveAttachFile=:34, AttachFileName=:35, LastPostUserName=:36, LastPostTitle=:37, LastPostNickName=:38, IsTop=:39, IsLock=:40, Auditing=:41, AuditingAttachFile=:42, IsVote=:43, IsHidden=:44, IsHiddenValue=:45, EditType=:46, QuoteText=:47, QuoteEditType=:48, PostType=:49, TitleColor=:50, UserBlog=:51, IndexStatus=:52, EmailInform=:53, MsgInform=:54, VoteID=:55, TagID=:56, TagName=:57,IsGuest=:58, PreviewAttach=:59 where ID=:60
这条sql语句:
在程序中,forum的更新 是用:
getHibernateTemplate.saveOrUpdate(forum)来完成 的 。
我 想知道:1.如何把上面sql语句中变量对应的具体值得到,我查到好像是在私有sql存储区中。
另外,我很不解的是,为什么会阻塞这个session呢 ,如果是因为数据不对, oracle应该会报错。
我在oracle上,是个新手,请指教。
这个表bbscs_fourm中的id,在hibernate中映射为uuid
另外,struts版本为1, hibernate为3, spring为2。
谢谢大家
...全文
283 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
dabaocsdn 2007-04-27
  • 打赏
  • 举报
回复
再次更新:
用select * from v$enqueue_lock; 查看,
发现所有阻塞sid的v$enqueue_lock属性均为TX,查阅相关资料发现这应该是Transaction.
难道Spring的事务管理有问题? 单为什么单单针对这个语句呢?
dabaocsdn 2007-04-27
  • 打赏
  • 举报
回复
再次更新
用select event from v$session_event where sid=:sid 查看,输出如下:
enqueue
SQL*Net message to client
SQL*Net message from client
SQL*Net more data from client
dabaocsdn 2007-04-27
  • 打赏
  • 举报
回复
最新补充
用select * from v$session_wait where sid=:sid 查看,发现
v$session_wait的event为 enqueue
wait_time为 0
state 为 WAITING

17,078

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧