這個想法是當用戶運行一個查詢並且具有成本高於特定閾值的錯誤笛卡爾時。然後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. 笛卡爾產品流scala
- 2. 笛卡爾產品列表
- 3. 獲得笛卡爾產品
- 4. 計劃 - 帶有'地圖'的笛卡爾產品?
- 5. 笛卡爾產品索引生成器
- 6. 使用加入笛卡爾產品
- 7. neo4j笛卡爾產品性能改進
- 8. 逆轉(或簡化)笛卡爾產品?
- 9. 休眠ManyToMany結果笛卡爾產品
- 10. Python笛卡爾產品和條件?
- 11. PHP笛卡爾產品和標籤
- 12. 計劃中的笛卡爾積
- 13. Prolog - 笛卡爾積計算器
- 14. 如何實施笛卡爾產品輔助類
- 15. 如何使用笛卡爾產品| @ |與最新版本的貓?
- 16. 爲什麼我的笛卡爾產品功能不起作用?
- 17. MS Access的SQL - 多個連接與AND給笛卡爾產品?
- 18. 如何通過Linq從笛卡爾產品中刪除對稱?
- 19. 如何將笛卡爾產品留在另一張桌子上?
- 20. 笛卡爾產品和從條款中選擇
- 21. 可逆笛卡爾產品元素/索引轉換函數
- 22. Power set和笛卡爾積python的產品
- 23. 如何在RavenDB中做交叉連接/笛卡爾產品?
- 24. Lazyhighchart笛卡爾
- 25. 笛卡爾積
- 26. 笛卡爾積Ruby
- 27. DStream的笛卡爾
- 28. 笛卡爾積SQL
- 29. 笛卡爾平面
- 30. AWK笛卡爾積
謝謝,這讓我的思維開始思考不同。請問如何可能像蟾蜍和SQL開發人員的應用程序可以和用戶像我一樣可以。或者這是你已經提到的,我需要一個非常大的一段代碼。 – Imran
@Imran - 沒有什麼能夠阻止你訪問查詢計劃(儘管Toad和SQL Developer做的獨立會話要容易得多)。您可以在'SQL_ID'上將'V $ SESSION'連接到'V $ SQL_PLAN',並在每個會話中查看當前正在執行的SQL語句的查詢計劃 - 如果您編寫了計劃作業,您將會這樣做。只是需要編寫邏輯來分析查詢計劃,並且人們想要在這個一般空間中解決的大多數問題都可以使用配置文件和/或資源管理器更好地解決。 –
謝謝真的很感謝你的答案 – Imran