Oracle ALTER会话建议提交?

Oracle ALTER会话建议提交?,oracle,2phase-commit,Oracle,2phase Commit,我的应用程序将自动从故障中恢复。我测试它如下: 启动应用程序 在处理过程中,杀死应用服务器主机(shutdown-r-f) 主机重新启动时,应用程序服务器重新启动(作为windows服务) 应用程序重新启动 应用程序尝试处理,但被Oracle DB中上一个会话中不完整的2阶段提交事务阻止 10到30分钟后,DB解析之前的txn,处理继续正常 我需要它继续以比这更快的速度处理。我的DBA建议我在语句前面加上 ALTER SESSION ADVISE COMMIT; 但他不能向我保证或详细说明这样

我的应用程序将自动从故障中恢复。我测试它如下:

  • 启动应用程序
  • 在处理过程中,杀死应用服务器主机(shutdown-r-f)
  • 主机重新启动时,应用程序服务器重新启动(作为windows服务)
  • 应用程序重新启动
  • 应用程序尝试处理,但被Oracle DB中上一个会话中不完整的2阶段提交事务阻止
  • 10到30分钟后,DB解析之前的txn,处理继续正常
  • 我需要它继续以比这更快的速度处理。我的DBA建议我在语句前面加上

    ALTER SESSION ADVISE COMMIT;
    
    但他不能向我保证或详细说明这样做可能导致的数据丢失

    幸运的是,所讨论的语句只是每隔一秒左右将
    datetime
    值更新为
    SYSDATE
    ,因此,如果出现数据损坏,它将持续<1秒,然后被覆盖


    但是,我的问题是。上面的陈述到底是做什么的?Oracle在使用时如何解决数据同步问题?

    您能否澄清“本地”和“远程”数据库在您的场景中的作用

    通常情况下,a会执行以下操作

  • 启动事务
  • 对数据库进行更改
  • 对另一个数据库进行更改
  • 获取要“承诺提交”的其他数据库
  • 本地提交
  • 获取要提交的远程数据库
  • 如果第4步完成,然后出现故障,则会发生可疑的事务。一般做法是备份远程数据库并确认它是否已提交。如果是,则继续执行步骤(5)。如果无法提交事务的远程组件,则回滚本地组件

    你的描述似乎是指一个应用服务器故障,这是另一回事。就你而言,我认为情况如下:

  • App server建立连接并启动事务
  • 应用程序服务器在未提交的情况下死亡
  • App server重新启动并建立新的数据库连接
  • App server在新连接上启动新事务
  • 新事务被“卡住”,等待旧连接/事务持有的锁
  • 20分钟后,死连接终止,事务回滚
  • 然后,新的事务继续进行
  • 在这种情况下,解决方案是更快地终止旧连接,缩短超时时间(例如在服务器的sqlnet.ora中)或手动更改系统终止会话