两阶段提交协议

https://www.ibm.com/support/knowledgecenter/en/SSGU8G_12.1.0/com.ibm.admin.doc/ids_admin_1050.htm
两阶段提交协议
两阶段提交协议提供了一个自动恢复机制以防系统或者媒体在事务的时候失败。两阶段提交协议确保所有参与的数据库接受然后执行相同的行为,无视本地或者网络的失败

如果任何一个数据库服务器无法提交相关事务,则必须阻止参与事务的所有数据库服务器执行其工作。

数据库服务器在涉及到多台数据库服务的数据更改自动使用两阶段提交协议。举个例子,假如你有三个数据库服务器,叫australia,italy和france连接起来
如果你执行了如下的代码

CONNECT TO stores_demo@italy
BEGIN WORK
  UPDATE stores_demo:manufact SET manu_code = 'SHM' WHERE manu_name = 'Shimara'
  INSERT INTO stores_demo@france:manufact VALUES ('SHM', 'Shimara', '30')
  INSERT INTO stores_demo@australia:manufact VALUES ('SHM', 'Shimara', '30')
COMMIT WORK

这种时候就要使用两阶段提交协议
每一个全局的事务都由一个协调者和多个参与者,定义如下:

协调者指导全局事务的结果。它决定提交这个事务或者拒绝这个事务
两阶段提交协议总是把协调的角色分配给当前的数据库服务器。在单个事务中,协调器的角色不能改变。在上面的例子中,协调者的角色是italy。如果把上面的代码第一行改变为

CONNECT TO stores_demo@france

每一个参与者指导一个事务分支的执行,这是与全局事务相关的一部分。当
应用程序使用多个进程来处理全局事务
多个远程应用程序用于同一个全局事务
全局事务包括数个事务分支。

在使用两阶段提交协议时,参与者是Italy和australia, 协调员数据库服务器italy也作为参与者,因为它也在进行更新。

两阶段提交协议依赖于两种通信,消息和逻辑记录

消息在协调员和每个参与者之间通过。来自协调器的消息包括事务标识号和指令(准备提交,提交或者回滚).来自每个参与者的消息包括事务的状态和所采取行为的报告(可以调教,不能提交或者回滚)。

事物的逻辑日志记录保存在磁盘或磁带上,即使数据库服务器发生故障,也可以保证数据的完整性和一致性。

在两阶段提交协议中,协调者把所有的数据修改指令发送给参与者,然后协调者启动两阶段提交协议。两阶段提交协议有两个部分,预提交阶段和后决定阶段。

预提交阶段,在预提交阶段,协调者先指导每一个参与数据服务器准备提交事务。参与者告诉协调者是否它们可以commit事务。协调者基于每一个参与者的回应,决定提交这个事务或者回滚这个事务。如果每一个参与者都返回可行,协调者就决定执行。如果有任何一个参与者没有准备好提交这个事务,协调者就决定终止这个事务。

后决定阶段,在后决定阶段,协调者把是提交还是回滚的记录存到日志中,然后把信息发送给参与者确认事务已经提交。如果协调者决定后滚,参与者回滚事务,但是不向协调者发送ack。然后协调者发送信息决定提交这个事务,它等待每一个参与者发送ack,然后终止这个事务。

两阶段提交协议被设计用来处理系统或者媒体的失败时保持所有参与者数据库数据的完整性。如果有失败产生,两阶段提交协议执行一个自动恢复。可以恢复以下的情况:
1.协调者系统失败
2.参与者系统失败
3.网络失败
4.管理者关闭协调者线程
5.管理者关闭参与者线程
管理者在自动恢复中的唯一工作是在系统或者网络失败的时候把协调者和参与者重新上线。
如果协调者线程失败,每一个数据库服务器的参与者必须决定是否在提交或回滚事务之后自动恢复。
在两阶段提交协议完成之前,有一个参与者线程预提交的部分工作终止了,就发生参与者恢复。参与者恢复的目标是根据协调者的指定完成提交。

回滚以以下方式处理。 当协调者确定事务必须回滚时,它会向所有参与者发送消息以回滚其工作。 协调者不等待对此消息的确认,而是继续关闭事务并将其从共享内存中删除。 如果参与者尝试确定此事务的状态,也就是说,确定事务是提交还是回滚(例如,在参与者恢复期间) - 在共享内存中找不到任何事务状态。 参与者必须将此解释为意味着事务被回滚。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容