2010-06-16 131 views

回答

15

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

考慮你有你的主要交易的情況。它已插入/更新/刪除行。如果你在那之後建立一個自治的交易,那麼要麼

(1)它根本不會查詢任何數據。這是'安全'的情況。獨立於主事務記錄信息可以很有用,以便在不影響主事務的情況下提交它(當您期望主事務回滾時記錄錯誤信息可能很有用)。

(2)它只會查詢尚未被主事務更新的數據。這是安全的,但是多餘的。自主交易沒有意義。

(3)。它將查詢由主事務更新的數據。由於你重寫了某些東西,然後需要回頭看看它是否覆蓋它之前的情況,這種設計思路很糟糕。有時候人們認爲自主交易仍然會看到主要交易的未經承諾的變化,而不會。它讀取數據庫的當前已提交狀態,以及自治事務中所做的任何更改。有些人(通常嘗試自主事務以響應突變的觸發錯誤)不關心數據在嘗試讀取時的狀態,而且這些人根本不應該被允許訪問數據庫。

(4)。它會嘗試更新/刪除主事務未更新的數據。再次,這是糟糕的設計。無論主事務是成功還是失敗,這些更改都將被提交(或回滾)。更糟糕的是,您有風險問題(5),因爲在自主交易中很難確定數據是否由主要交易更新。

(5)。您嘗試更新/刪除已經由主事務更新的數據,在這種情況下,它會死鎖並最終陷入醜陋的混亂中。

+2

+1 Autonmous Transactions的唯一鑄鐵用例是日誌記錄/審計。其他一切都是危險的或徹頭徹尾的危險。 – APC 2010-06-16 11:10:31

10

可以自主交易危險嗎?

是的。

如果是,在哪種情況下?

當他們被濫用。例如,用於更改在回滾父事務的其餘部分時應該回滾的數據。濫用它們可能會導致數據損壞,因爲更改的某些部分已提交,而其他部分則不會。

何時需要自主交易?

無論父事務是提交還是回滾,它們在一個事務的影響必須存活時都是必需的。一個很好的例子是將進程和進程的活動記錄到數據庫表的過程。