我有asp.net页面,允许用户在oracle数据库上运行select查询。然后结果在网页上显示为数据表。
由于长而深的查询执行,用户有时可能会输入对数据库造成严重影响的查询。
是否有可能为DB上的每个查询提及超时。如果查询运行时间超过指定时间,则必须在数据库上停止执行。
答案 0 :(得分:0)
您可以在应用程序或数据库端解决此问题:
应用程序端:SQLQueryTimeout 您可以通常为驱动程序上的所有语句设置SQLQueryTimeout,或者为CommandMutitout单独设置某个命令。如果查询花费的时间比调用TRAP的时间长,那么您将获得一个可以处理的异常。
第二种可能性是为Oracle用户设置超时。如果您的Web应用程序通过共享用户(应该是)连接到数据库,您可以使用ALTER USER设置一个用户配置文件,该用户配置文件将强制执行MAX CPU LIMIT,这实际上是对所有SQL Statments发布的时间限制该用户。
第二种解决方案的优点在于数据库强制执行规则,因此您不必担心您的应用程序代码可能会错过一行......