标签:
XA {START|BEGIN} xid
XA END xid
XA PREPARE xid
XA COMMIT xid [ONE PHASE]
XA ROLLBACK xid
XA RECOVER
XA START xid | XA BEGIN xid
开始一个事务,并将事务置于ACTIVE状态,此后执行的SQL语句都将置于该事务中。
XA END xid
将事务置于IDLE状态,表示事务内SQL操作完成。
后续事务操作可以使XA PREPARE xid 或 XA COMMIT xid ONE PHASE.
XA PREPARE xid
实现事务提交的准备工作,事务状态置于PREPARED状态。
事务如果无法提交,该语句将会失败。
此后可执行XC COMMIT和XA ROLLBACK
XA COMMIT xid
事务最终提交,完成持久化,事务完成。
XA COMMIT xid ONE PHASE
在XA END后执行,该语句一并包含XA PREPARE和XA COMMIT。
XA ROLLBACK xid
事务回滚并终止。
// 分别创建指向两个数据库的连接,并各自创建相应的表,DDL语句不能在事务过程中执行。 create_connection1(&_G_connect1); create_connection2(&_G_connect2); create_table_member(&_G_connect1); create_table_member(&_G_connect2); // 两个数据库分别创建两个分布式事务 _G_connect1.direct_exec("xa begin ‘xa-trans‘"); _G_connect2.direct_exec("xa start ‘xa-trans‘"); // 向两个库表中分别写入数据 insert_record_direct(&_G_connect1); insert_record_direct(&_G_connect2); // SQL操作完成 _G_connect1.direct_exec("xa end ‘xa-trans‘"); _G_connect2.direct_exec("xa end ‘xa-trans‘"); // 事务准备提交 _G_connect1.direct_exec("xa prepare ‘xa-trans‘"); _G_connect2.direct_exec("xa prepare ‘xa-trans‘"); // 事务最终提交 _G_connect1.direct_exec("xa commit ‘xa-trans‘"); _G_connect2.direct_exec("xa commit ‘xa-trans‘"); // 如某个数据库准备提交失败,则可以事务回滚 //_G_connect1.direct_exec("xa rollback ‘xa-trans‘"); //_G_connect1.direct_exec("xa rollback ‘xa-trans‘"); // xa prepare和xa commit,可以使用xa commit one phase一条语句完成 _G_connect1.direct_exec("xa commit ‘xa-trans‘ one phase"); _G_connect2.direct_exec("xa commit ‘xa-trans‘ one phase");
标签:
原文地址:http://my.oschina.net/luckysym/blog/358066