首先说明,分不是问题,如果能解决这个问题,我愿意把所有的分都拿出来,回报给大家!现在我们在进行一个J2EE的项目,使用的是公司内部封装的EJB架构+ORACLE9i数据库,在试运行的时候,发现经常发生数据表被锁的情况,具体表现如下:(本来编码时用了事务,但因出现死锁问题,把事务全部取消,但表还是经常被锁)向一个数据表里插入一条记录,程序提示插入成功,但查询时却查不到。等几秒钟或几十分钟后,再去查,才能查到。在这段时间内,用oracle的客户端去连,查看用户锁,可以发现那个表一直处于被锁的状态,少则几秒钟,多则几十分钟才会消失。而有时却什么锁也不会产生。但大多数的情况,都同时有好几个表被锁,导致系统经常出错。能不能告诉我,出现这种情况有可能是什么原因?怎样根据被锁的表,查找到有问题的SQL语句或者操作?

解决方案 »

  1.   

    另:
    在用户锁查看里,一般总是两行两行地出现表被锁的信息,比如,有两行,它们的会话ID相同,被锁的表相同,锁类型不同,一个是row exclusive ,另一个是exclusive 
      

  2.   

    1 你及时进行了COMMIT了吗?
    2 没有使用SELECT ........ FOR UPDATE语句吧
      

  3.   

    问题已经解决,这个问题让我深刻体会到公司维护自己的架构的代价本来用的连接池是公司架构里的连接池,把它换成了JDBC直连,表就不会锁了。