我有一個情況,我有兩個表,我可以在其中插入,更新,刪除。我引入了一個表audit_trail來維護這兩個表的更改日誌。現在在audit_trail表中輸入值我在任何一個表上的任何更新,刪除或插入後寫入了插入語句。現在,如果在其中一個表上發生了修改,並且應用程序崩潰了,那麼根據我的方法,審計表插入將不會發生。所以我想知道,如果在插入,更新或刪除表格後,在條件上寫入觸發條件,那麼即使應用程序崩潰,這也會導致插入審計.DBMS是Oracle即使應用程序崩潰,觸發器是否保持原子性
1
A
回答
3
這是爲數不多的,可能是唯一的,有效的the AUTONOMOUS_TRANSACTION pragma用途之一。這使我們能夠在離散事務中發出SQL,這意味着這些事情在不影響更廣泛的事務的情況下被提交。因此,即使數據庫在用戶發出顯式提交(或其他)之前崩潰,您的審計消息也會被提交。
很顯然,我不知道你希望記錄的數據,而是寫了一個程序是這樣,並從觸發器調用它:
procedure write_audit
(p_table_name in audit_table.table_name%type
, p_action in audit_table.action%type)
is
pragma autonomous_transaction;
begin
insert into audit_table
(id, table_name, ts, action)
values
(audit_id.nextval, p_table_name, systimestamp, p_action);
commit;
end write_audit;
1
您需要移動你插入一個存儲過程並從審計跟蹤觸發器中調用它。
在存儲過程中啓用「自動事務」,然後您可以在存儲過程內提交而不影響觸發觸發器的「外部」事務。
詳細信息請參考手冊: http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/sqloperations.htm#sthref1514
相關問題
- 1. Angular Bootstrap崩潰不會觸發,即使$ scope說應該是
- 2. 簡單的計算器應用程序保持崩潰
- 3. iOS應用程序立即崩潰
- 4. AsyncTask立即崩潰應用程序
- 5. Symbolicate即席iphone應用程序崩潰
- 6. Android應用程序立即崩潰
- 7. C#應用程序崩潰原因
- 8. Android應用程序崩潰原因
- 9. 原因的應用程序崩潰
- 10. 應用程序崩潰,原因不明
- 11. 應用程序崩潰說不包含庫,即使它是
- 12. 應用程序崩潰時觸及
- 13. UIButton崩潰的應用程序觸摸
- 14. 引導程序崩潰立即崩潰
- 15. 即使在應用程序更新後,持續性數據仍會導致應用程序崩潰
- 16. 我的C程序保持崩潰
- 17. 保存UIManagedDocument時應用程序崩潰
- 18. Android應用程序片段保持崩潰
- 19. 爲什麼我的應用程序保持崩潰
- 20. Android應用程序在保持滾動視圖後崩潰
- 21. Game Maker WIndows電話應用程序保持崩潰
- 22. 保持應用程序在手機睡眠/鎖定時崩潰
- 23. 訪問崩潰應用程序崩潰應用程序內ios
- 24. 應用程序崩潰 - 有線崩潰
- 25. 應用程序在QuickBlox的發佈版本原因崩潰
- 26. SurfaceView的子類崩潰應用程序
- 27. 發佈iPhone應用程序崩潰
- 28. AVCaptureVideoPreviewLayer崩潰應用程序在發佈
- 29. 引發nullPointerException和應用程序崩潰
- 30. 應用程序崩潰android開發
你的問題意味着你*不*要保持原子。原子性意味着無論是整個交易都承諾還是沒有。聽起來你想'audit_trail'記錄所有*嘗試*到I/U/D,而不僅僅是成功的。 – 2010-10-09 08:46:02
不,如果在其他兩個表上插入,刪除,更新成功,那麼即使應用程序崩潰審覈跟蹤以獲取該條目,也是如此。 – gizgok 2010-10-10 06:22:11