我正在使用 Oracle10g,但遇到了一个挑战我的问题。该应用程序的超时时间为 45 秒。它从我的数据库访问用户并始终执行相同的操作。问题在于,当会话因超时而结束时,应用程序仅在应用程序级别结束,而不是在数据库中结束。
这导致数据库继续处理并成功执行操作,但是应用程序执行另一个调用导致数据重复。(主键由顺序决定)
我的想法是什么?当来自该特定用户的特定指令在数据库中的执行时间超过 45 秒时结束会话。问题是应用程序使用连接池,应用程序对待那些进入或不进入数据库的人。
我不能为个人资料实施它,因为连接在替补席上待了好几天,只有在必要时才进行预约。
我需要知道运行特定查询需要多长时间。我需要知道用户什么时候只在数据库中进行一次查询,它使应用程序超时,即 45 秒。
我在哪里可以获得这些信息?有了它,我可以确定关闭哪个会话,因为配置文件是行不通的。
我为我糟糕的英语道歉。我还在学习。
干杯雷尼尔莫里拉
听起来事务正在提交(可能是自动提交),即使应用程序超时也是如此。改变
COMMIT
行为将是最好的选择。如果您不能这样做,您可以将数据库操作放在一个包中,然后让包在运行该操作后进行检查,以查看经过了多少时间。如果该步骤花费的时间超过 45 秒,则应该这样做
ROLLBACK
,否则COMMIT
。虽然这回答了你的问题,但它是一个脆弱的解决方案,你真的应该考虑改变
COMMIT
行为或在发生超时时导致数据库断开连接。