四虎国产精品永久地址998_chinesexxx少妇露脸_日本丁香久久综合国产精品_一区二区久久久久_四虎av影视_久久久久国产一区二区三区不卡

中培偉業(yè)IT資訊頻道
您現(xiàn)在的位置:首頁(yè) > IT資訊 > 數(shù)據(jù)庫(kù) > 國(guó)產(chǎn)數(shù)據(jù)庫(kù)與Oracle數(shù)據(jù)庫(kù)事務(wù)差異分析

國(guó)產(chǎn)數(shù)據(jù)庫(kù)與Oracle數(shù)據(jù)庫(kù)事務(wù)差異分析

2025-04-17 16:10:00 | 來(lái)源:企業(yè)IT培訓(xùn)

數(shù)據(jù)庫(kù)中的ACID是事務(wù)的基本特性,而在Oracle等數(shù)據(jù)庫(kù)遷移到國(guó)產(chǎn)數(shù)據(jù)庫(kù)國(guó)產(chǎn)中,可能因?yàn)椴煌瑪?shù)據(jù)庫(kù)事務(wù)處理機(jī)制的不同,在遷移后的業(yè)務(wù)邏輯處理上存在差異。本文簡(jiǎn)要介紹了事務(wù)的ACID屬性、事務(wù)的隔離級(jí)別、回滾機(jī)制和超時(shí)機(jī)制,并總結(jié)SAVEPOINT的使用,以總結(jié)。

1、數(shù)據(jù)庫(kù)中事務(wù)基本概念

事務(wù)是數(shù)據(jù)庫(kù)中的基本邏輯操作單元,由一組不可分割的數(shù)據(jù)庫(kù)操作序列組成,這些操作要么全部成功執(zhí)行,要么全部失敗回滾。其核心目的是確保數(shù)據(jù)的完整性和一致性,尤其在并發(fā)操作或系統(tǒng)故障時(shí)維護(hù)數(shù)據(jù)庫(kù)的可靠狀態(tài)。

1.1 事務(wù)基本屬性

ACID是事務(wù)的基本特性:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)和持久性(Durability)。

原子性:事務(wù)中的所有操作必須作為一個(gè)整體執(zhí)行,要么全部執(zhí)行成功、要么全部失敗回滾,不允許出現(xiàn)部分成功的情況。在數(shù)據(jù)庫(kù)中通常是通過(guò)日志記錄(如undo log)來(lái)實(shí)現(xiàn)回滾操作,若事務(wù)執(zhí)行失敗,系統(tǒng)跟進(jìn)日志撤銷已執(zhí)行的操作。

一致性:事務(wù)執(zhí)行前后,數(shù)據(jù)庫(kù)必須保持一致性狀態(tài)。所有數(shù)據(jù)必須滿足預(yù)定義的完整性約束(如主鍵、外鍵、唯一性約束等)。即使事務(wù)失敗,數(shù)據(jù)庫(kù)也不能破壞這些規(guī)則。在數(shù)據(jù)庫(kù)中通過(guò)一些約束和檢查來(lái)確保數(shù)據(jù)庫(kù)的完整性約束。

隔離性:多個(gè)事務(wù)并發(fā)執(zhí)行時(shí),每個(gè)事務(wù)的操作應(yīng)與其他事務(wù)相互隔離,使得每個(gè)事務(wù)感覺(jué)不到其他事務(wù)的存在,最終效果應(yīng)與事務(wù)串行執(zhí)行的結(jié)果一致。數(shù)據(jù)庫(kù)中通過(guò)鎖機(jī)制(Locking)或多版本并發(fā)控制(MVCC)實(shí)現(xiàn),不同的隔離級(jí)別提供不同程度的隔離性。

持久性:事務(wù)一旦提交,其對(duì)數(shù)據(jù)庫(kù)的修改就是永久性的,即使系統(tǒng)發(fā)生故障(如斷電、崩潰),修改也不會(huì)丟失。數(shù)據(jù)庫(kù)中通過(guò)重做日志(Redo Log)實(shí)現(xiàn)持久性。提交事務(wù)時(shí),對(duì)數(shù)據(jù)的修改首先寫入日志,再異步寫入數(shù)據(jù)庫(kù)文件中。當(dāng)數(shù)據(jù)庫(kù)崩潰恢復(fù)時(shí),通過(guò)重放日志恢復(fù)數(shù)據(jù)。

以轉(zhuǎn)賬交易為例,通過(guò)undo日志實(shí)現(xiàn)原子性,確保“扣款”和“存款”兩個(gè)操作要么全部成功,要么全部失敗;一致性是確保轉(zhuǎn)賬前后,數(shù)據(jù)庫(kù)必須滿足業(yè)務(wù)規(guī)則(如余額不為負(fù)、總額不變);通過(guò)鎖機(jī)制和MVCC多版本并發(fā)控制來(lái)實(shí)現(xiàn)事務(wù)的隔離性,多個(gè)并發(fā)轉(zhuǎn)賬操作互不干擾,結(jié)果與串行執(zhí)行一致;持久性則是一旦轉(zhuǎn)賬成功,即使系統(tǒng)崩潰,修改也不會(huì)丟失。

1.2 事務(wù)回滾機(jī)制

事務(wù)的原子性要求事務(wù)要么全部執(zhí)行成功、要么全部執(zhí)行失敗回滾,但是對(duì)于Oracle數(shù)據(jù)庫(kù)支持語(yǔ)句級(jí)的原子性,也就是一個(gè)事務(wù)中單個(gè)語(yǔ)句執(zhí)行失敗,則只會(huì)回滾該語(yǔ)句執(zhí)行的操作,不會(huì)導(dǎo)致在當(dāng)前事務(wù)中丟失之前的任何工作。如果需要回滾整個(gè)事務(wù),需要處理錯(cuò)誤并且主動(dòng)調(diào)用ROLLBACK。這種語(yǔ)句級(jí)的回滾對(duì)于處理一些長(zhǎng)時(shí)間運(yùn)行的批處理任務(wù)有用,邏輯上希望能夠處理錯(cuò)誤,不需要回滾已經(jīng)完成的所有操作。

1.3 事務(wù)超時(shí)機(jī)制

數(shù)據(jù)庫(kù)中事務(wù)會(huì)設(shè)置不同的超時(shí)機(jī)制,防止因?yàn)槌霈F(xiàn)等鎖而出現(xiàn)無(wú)限等待,超過(guò)這個(gè)時(shí)間后會(huì)出現(xiàn)等鎖超時(shí),事務(wù)會(huì)回滾。

Oracle數(shù)據(jù)庫(kù):默認(rèn)不會(huì)主動(dòng)終止因行鎖等待而阻塞的事務(wù),事務(wù)會(huì)無(wú)限期等待鎖釋放,需由應(yīng)用層處理或手動(dòng)終止,行鎖在事務(wù)提交或回滾是自動(dòng)釋放;事務(wù)默認(rèn)也無(wú)超時(shí)設(shè)置,但是可以限制會(huì)話的空閑時(shí)間,超過(guò)時(shí)間后會(huì)斷開(kāi)鏈接。

MySQL數(shù)據(jù)庫(kù):通過(guò) innodb_lock_wait_timeout 控制,默認(rèn)為50秒。當(dāng)事務(wù)等待鎖超過(guò)此時(shí)間時(shí),會(huì)拋出錯(cuò)誤;事務(wù)中無(wú)默認(rèn)超時(shí)時(shí)間,但是連接的空閑超時(shí)設(shè)置wait_timeout,默認(rèn)8小時(shí)。

PostgreSQL:通過(guò)pg_lock_timeout設(shè)置行鎖等待超時(shí)時(shí)間,默認(rèn)為0無(wú)限等待;事務(wù)中設(shè)置statement_timeout 控制單條SQL執(zhí)行時(shí)間,默認(rèn)無(wú)限制。

TiDB:兼容MySQL行鎖等待設(shè)置;如果是悲觀事務(wù),默認(rèn)TTL(Time-To-Live)為 1小時(shí),超時(shí)后自動(dòng)回滾,另外通過(guò)tidb_idle_transaction_timeout 控制空閑事務(wù)。

OceanBase:MySQL模式下兼容MySQL設(shè)置;事務(wù)中通過(guò) ob_query_timeout 控制事務(wù)單條語(yǔ)句執(zhí)行時(shí)間,默認(rèn)1800s

GoldenDB:兼容MySQL設(shè)置

GaussDB:參數(shù)lockwait_timeout控制單個(gè)鎖的最長(zhǎng)等待時(shí)間,當(dāng)申請(qǐng)的鎖等待時(shí)間超過(guò)設(shè)定值時(shí),系統(tǒng)會(huì)報(bào)錯(cuò),默認(rèn)為20min;通過(guò)通過(guò) statement_timeout 控制單個(gè)語(yǔ)句執(zhí)行時(shí)長(zhǎng),默認(rèn)0表示不控制。

主站蜘蛛池模板: 韩城市| 夹江县| 富顺县| 丰城市| 东台市| 建瓯市| 色达县| 曲阜市| 鹿邑县| 辛集市| 彭泽县| 黄龙县| 澄城县| 萨嘎县| 大石桥市| 东城区| 瓦房店市| 上蔡县| 乌鲁木齐县| 逊克县| 马关县| 商城县| 井研县| 永德县| 惠水县| 兰州市| 驻马店市| 交口县| 贞丰县| 靖安县| 廉江市| 西平县| 波密县| 海兴县| 内黄县| 义马市| 宽城| 炉霍县| 霞浦县| 灵丘县| 大埔县|