这个想法是当用户运行一个查询并且具有成本高于特定阈值的错误笛卡尔时。然后oracle将它发送给我和用户。我已经尝试过几件事,但它们在运行时不起作用。如果蟾蜍和sql开发人员可以看到执行计划。那么我相信那里有我刚刚找到的信息。或者我可能不得不采用另一种逻辑。触发器@执行计划..笛卡尔产品
1
A
回答
1
一般来说,这可能是不可能的。
从理论上讲,如果你真的确定,你可能会产生细粒度审计(FGA)触发了系统中的每一个表中火为每SELECT
,INSERT
,UPDATE
和DELETE
,得到SQL_ID
从V$SESSION
,加入到V$SQL_PLAN
,并实现你想要的任何逻辑。这在技术上是可行的,但它会涉及到相当多的代码,并且会为系统中的每个查询添加潜在的大量开销。这可能不实际。
而不是试图用一个触发器,你可以写原定通过DBMS_JOB或DBMS_SCHEDULER包,将查询V$SESSION
所有活动会话每隔几分钟运行一个程序,加入到V$SQL_PLAN
,和你想什么逻辑来实现。这消除了每次用户执行任何语句时尝试运行触发器的开销。但是它仍然需要大量的代码。
根据您尝试解决的业务问题,可能会更容易创建resource limits on the user's profile,以便Oracle强制限制任何单个SQL语句可以使用的资源数量。例如,您可以设置用户的CPU_PER_CALL
,LOGICAL_READS_PER_CALL
或COMPOSITE_LIMIT
来限制Oracle杀死它之前单个语句可以执行的CPU数量,逻辑I/O数量或CPU和逻辑I/O的组合限制。
如果你想要更多的控制,你可以使用Oracle Resource Manager。这可以允许您执行任何操作,防止Oracle运行某些用户的查询(如果估计它们运行时间过长或者限制一组用户在争用这些资源时可以使用的资源)。 Oracle可以自动将特定用户的长时间运行的查询移动到较低优先级的组,它可以自动终止长时间运行的查询,它可以阻止它们首先运行,或者这些事情的任意组合。
相关问题
- 1. 获得笛卡尔产品
- 2. 笛卡尔产品列表
- 3. neo4j笛卡尔产品性能改进
- 4. PHP笛卡尔产品和标签
- 5. 使用加入笛卡尔产品
- 6. 笛卡尔产品和从条款中选择
- 7. Power set和笛卡尔积python的产品
- 8. 可逆笛卡尔产品元素/索引转换函数
- 9. 如何通过Linq从笛卡尔产品中删除对称?
- 10. MS Access的SQL - 多个连接与AND给笛卡尔产品?
- 11. 如何将笛卡尔产品留在另一张桌子上?
- 12. 如何在RavenDB中做交叉连接/笛卡尔产品?
- 13. 笛卡尔积
- 14. DStream的笛卡尔
- 15. 笛卡尔积SQL
- 16. RxJs笛卡尔积
- 17. 笛卡尔积 - PHP
- 18. 笛卡尔积VBA
- 19. AWK笛卡尔积
- 20. 笛卡尔积Ruby
- 21. 计算n元笛卡尔乘积
- 22. 在Python中快速笛卡尔到极坐标到笛卡尔
- 23. python:单行笛卡尔积for循环
- 24. 红宝石,它是否允许笛卡尔产品构造函数?
- 25. 如何完成此笛卡尔产品功能的Objective-C实现?
- 26. 休眠:为什么加载两个袋子会生成笛卡尔产品?
- 27. 检测笛卡尔产品或其他非显而易见的查询
- 28. 如何在excel中获得像列一样的笛卡尔产品?
- 29. 如何分别在每个组的记录之间创建笛卡尔产品?
- 30. SQL笛卡尔加入
谢谢,这让我的思维开始思考不同。请问如何可能像蟾蜍和SQL开发人员的应用程序可以和用户像我一样可以。或者这是你已经提到的,我需要一个非常大的一段代码。 – Imran
@Imran - 没有什么能够阻止你访问查询计划(尽管Toad和SQL Developer做的独立会话要容易得多)。您可以在'SQL_ID'上将'V $ SESSION'连接到'V $ SQL_PLAN',并在每个会话中查看当前正在执行的SQL语句的查询计划 - 如果您编写了计划作业,您将会这样做。只是需要编写逻辑来分析查询计划,并且人们想要在这个一般空间中解决的大多数问题都可以使用配置文件和/或资源管理器更好地解决。 –
谢谢真的很感谢你的答案 – Imran