W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
SAVEPOINT 語句用來實現(xiàn)事務(wù)的部分回滾。
SAVEPOINT spname
ROLLBACK [WORK] to [SAVEPOINT] spname
RELEASE SAVEPOINT spname
ROLLBACK
? 語句回滾整個事務(wù)。假設(shè)一個事務(wù)執(zhí)行了如下語句:
sql_no |
語句 |
分區(qū) |
---|---|---|
1 |
update... |
p1, p4 |
savepoint sp1 |
||
2 |
update... |
p2, p4 |
3 |
update... |
p3, p5 |
savepoint sp2 |
||
4 |
update... |
p1, p3, p6 |
5 |
update... |
p1, p5 |
savepoint sp3 |
||
6 |
select... |
|
7 |
update... |
p5, p6 |
savepoint sp4 |
用戶在提交事務(wù)之前可以創(chuàng)建 savepoint,需要根據(jù) savepoint 創(chuàng)建的順序,將事務(wù)的 savepoint 串成鏈表。以上事務(wù)包含了 7 條 sql 和 4 個 savepoint,記錄 savepoint 的鏈表如下圖所示,其中每個節(jié)點記錄了<spname, sql_no>的映射關(guān)系:
事務(wù)為了支持回滾某條 sql 之后的所有修改,需要將每條語句涉及的參與者以及對應(yīng)的 sql_no 記錄下來,以上事務(wù)執(zhí)行了 7 條 sql,涉及 p1~p6 共 6 個 partition:
假設(shè)用戶執(zhí)行 ROLLBACK to SAVEPOINT sp2,根據(jù) savepoint 鏈表查詢到 sp2 對應(yīng)的 sql_no 為 3。
根據(jù)事務(wù)參與者列表查詢到 sql_no 大于 3 的語句操作的分區(qū)涉及 p1、p3、p5、p6。
根據(jù)第2步查詢到的分區(qū),調(diào)度程序向這些分區(qū)發(fā)起回滾請求,回滾當(dāng)前事務(wù)在這些分區(qū)上 sp2 之后的所有修改。其中 p1、p3、p5 上關(guān)于本事務(wù)的部分修改被回滾掉,p6 上關(guān)于本事務(wù)的所有修改都被回滾掉。
修改事務(wù)參與者列表,將 sql_no 大于 3 的操作信息從事務(wù)參與者列表中刪除,由于 p6 上的所有修改都被回滾掉,因此 p6 可以從參與者列表中刪除。
用戶執(zhí)行 ROLLBACK to SAVEPOINT sp2 成功后,系統(tǒng)會刪除 sp3 和 sp4 的 savepoint,不允許再回滾到 sp3 和 sp4。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: