postgresql Two-phase commit
对于XA的支持,pg目前没明确提出来,只是实现了两阶段提交, XID这个名词已被占用,所以提出了GID a global transactionidentifier create table a(a int); begin; insert a values(1); prepare transaction 'aaa'; commit prepared 'aaa'; rollback prepared 'aaa'; 目前支持这样的语法,'aaa' 就是GID,具体见下 http://www.postgresql.org/docs/current/static/sql-prepare-transaction.html
下面是全局事务的定义,就是比局部事务上多了几个变量,是专门的一个列表,和普通事务的不一样
在 prepare transaction的时候,在数据库的目录的 pg_twophase 文件夹生成state file,文件名为事务的XID,
prepare transaction 要生成state file的主要原因是,在这一过程中,已完成了资源的释放,把不能释放的记录下来,以便commit时候释放 commit prepared 把state file读出来解析,接着释放资源,之后就是记录日志,并把state file删除 当在prepare transaction成功,之后系统挂掉,这时state file已创建成功,保留在硬盘上,当系统重启后,会根据日志和state file重构XA事物,在系统启动完成后,可以接着 commit prepared 或 rollback prepared 这个事物。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |