问题描述
嗨,团队,
我有一些疑问,请您帮我解决-
后端数据库是oracle 11g
前端是Java
Q.1当用户触发下载报告查询,并立即关闭窗口时,查询会在后端中止还是仍然保持运行?该用户在db中的状态是什么?
Q.2如果用户点击下载报告,并从主窗口注销怎么办?查询仍然保持运行?该用户在db中的状态是什么?
问题3如果用户点击下载报告,那么他会等待一段时间。查询在后端运行。然后他认为系统有问题。他再次点击下载报告。他重复了多次,最后他关闭了窗口。所以数据库的后端会有很多查询运行吗?该用户在db中的状态是什么?
问题4如果用户关闭窗口或从登录名注销,我们可以中止查询吗?
谢谢
我有一些疑问,请您帮我解决-
后端数据库是oracle 11g
前端是Java
Q.1当用户触发下载报告查询,并立即关闭窗口时,查询会在后端中止还是仍然保持运行?该用户在db中的状态是什么?
Q.2如果用户点击下载报告,并从主窗口注销怎么办?查询仍然保持运行?该用户在db中的状态是什么?
问题3如果用户点击下载报告,那么他会等待一段时间。查询在后端运行。然后他认为系统有问题。他再次点击下载报告。他重复了多次,最后他关闭了窗口。所以数据库的后端会有很多查询运行吗?该用户在db中的状态是什么?
问题4如果用户关闭窗口或从登录名注销,我们可以中止查询吗?
谢谢
专家解答
当客户端由于任何原因死亡时,Oracle数据库可以通过死客户端检测来检测到这一点,并终止会话:
https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:2233109200346833212
尽管查询可能会继续运行一小段时间。
在你的应用程序中到底发生了什么取决于你是如何构建它的。如果您的应用程序是本地安装的Java应用程序,并且直接连接到数据库,则应该会看到DB会话关闭。
但是今天不太可能进行这种设置。您可能有一个应用程序服务器,它具有到数据库的连接池。因此,您需要弄清楚应用程序服务器如何将DB会话映射到用户操作。在N层体系结构和异步处理的世界中,仅仅因为用户关闭了窗口,并不一定意味着应用服务器知道这一点。
您始终可以使用 “alter system kill会话 'sid,serial # ';” 在数据库中手动杀死会话。和JDBC有一个cancel方法on语句,你可以用它来停止查询。
但这听起来像是你遇到了一个问题,用户对缓慢的进程感到沮丧。努力改进您的用户界面,以:
-然后让他们知道他们的请求正在处理
-停止他们再次提交 (相同的) 请求
如有必要,请脱机处理 (例如,通过电子邮件发送报告)。
https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:2233109200346833212
尽管查询可能会继续运行一小段时间。
在你的应用程序中到底发生了什么取决于你是如何构建它的。如果您的应用程序是本地安装的Java应用程序,并且直接连接到数据库,则应该会看到DB会话关闭。
但是今天不太可能进行这种设置。您可能有一个应用程序服务器,它具有到数据库的连接池。因此,您需要弄清楚应用程序服务器如何将DB会话映射到用户操作。在N层体系结构和异步处理的世界中,仅仅因为用户关闭了窗口,并不一定意味着应用服务器知道这一点。
您始终可以使用 “alter system kill会话 'sid,serial # ';” 在数据库中手动杀死会话。和JDBC有一个cancel方法on语句,你可以用它来停止查询。
但这听起来像是你遇到了一个问题,用户对缓慢的进程感到沮丧。努力改进您的用户界面,以:
-然后让他们知道他们的请求正在处理
-停止他们再次提交 (相同的) 请求
如有必要,请脱机处理 (例如,通过电子邮件发送报告)。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




