处理突然的连接损失和SELECT FOR UPDATE

时间:2015-10-28 18:17:11

标签: java oracle tomcat weblogic connection-pooling

处理突然的连接丢失和SELECT FOR UPDATE

考虑这种情况: 部署到应用程序服务器群集的服务器端应用程序通常会发出SELECT FOR UPDATE个查询,更新数据和提交事务。 因此,在某个时间点存在锁定记录(在SFU和当前事务结束之间)。 假设在提交事务之前,服务器节点出现故障或连接因任何原因而丢失。 在这种情况下,与此连接关联的数据库会话将保持打开状态,并且事务将在这些锁定到位时可能无限期地处于活动状态。 这将阻止以后尝试更新至少一个锁定记录的所有其他事务,从而破坏应用程序。

这是一个有效的问题吗?

如果是,我可以通过以下方式阻止它吗?

在Oracle方面:

  1. 使用ALTER PROFILE创建一个{1}}比如说1分钟
  2. 的个人资料
  3. 将此配置文件分配给Java使用的用户 应用程序连接到Oracle db
  4. 在Java端配置连接池(这个例子对于Tomcat的池,但Weblogic和其他人有它们的等价物):

    1. 设置IDLE_TIME
    2. 设置testWhileIdle=true(30秒)
    3. 设置timeBetweenEvictionRunsMillis=30000
    4. 所以我想要实现的是让服务器定期ping未使用的连接(从Oracle的角度来看它们是活着的)如果ping请求停止进入超过1分钟,Oracle应该放弃会话(从而释放锁)。

      它能解决这个问题吗?你能看到这种方法有什么问题吗?

0 个答案:

没有答案