簡體   English   中英

AUTONOMOUS_TRANSACTION:利弊

[英]AUTONOMOUS_TRANSACTION: pros and cons

自主交易會危險嗎? 如果是,在什么情況下? 什么時候需要自主交易?

是的,自主交易可能很危險。

考慮一下您進行主要交易的情況。 它已插入/更新/刪除了行。 如果您隨后在其中設置了自主交易,則可以

(1)完全不會查詢任何數據。 這是“安全”的情況。 獨立於主事務記錄信息可能很有用,這樣就可以在不影響主事務的情況下進行提交(當您希望主事務回滾時,這對於記錄錯誤信息很有用)。

(2)它只會查詢尚未由主事務更新的數據。 這是安全的,但是是多余的。 沒有必要進行自主交易。

(3)。 它將查詢已由主事務更新的數據。 由於您已經覆蓋了某些內容,因此在重寫之前需要回頭看看它是什么,這會使您在設計時缺乏思想。 有時,人們認為自主事務仍然會看到主要事務的未提交更改,而不會。 它讀取數據庫的當前提交狀態,以及在自主事務中進行的任何更改。 有些人(通常是為了響應變化的觸發錯誤而嘗試進行自動事務處理)在嘗試讀取數據時並不關心數據處於什么狀態,因此根本不應該允許這些人訪問數據庫。

(4)。 它將嘗試更新/刪除主事務尚未更新的數據。 同樣,這種不良設計的痕跡。 無論主事務成功還是失敗,這些更改都將提交(或回滾)。 更糟糕的是,您面臨問題(5)的風險,因為很難在自主事務中確定數據是否已由主事務更新。

(5)。 您嘗試更新/刪除已由主事務更新的數據,在這種情況下,它將死鎖並最終導致混亂。

自主交易會危險嗎?

是。

如果是,在什么情況下?

當它們被濫用時。 例如,用於更改如果父事務的其余部分已回滾時應已回滾的數據。 濫用它們會導致數據損壞,因為更改的某些部分已提交,而其他部分未提交。

何時需要自主交易?

當必須保留一個事務的影響而不論父事務是已提交還是已回滾時,它們都是必需的。 一個很好的例子是將過程的進度和活動記錄到數據庫表中的過程。

何時需要自主交易?

檢查我的問題: LOCK如何在COMMIT中幸存下來,或者如何將對LOCKed表的更改傳播到另一個會話中,而無需COMMIT和丟失LOCK

我們按順序提取業務配置,並且應禁止並行處理。

我使用鎖來配置表並相應地更新其他表。 我將每個批處理的更新提交給其他表,因為我們不能負擔所有記錄的事務-發生沖突的可能性接近0.99。

由於並發訪問而導致的每個故障都會被記錄下來,以備以后進行更新。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM