我理解2阶段提交体系结构。让有两个奴隶和一个主人,所有的准备阶段都顺利进行。当主从1请求提交时,提交就可以了。当主人要求从2提交时,它失败了。因此,主服务器现在需要回滚整个事务。我的问题是,既然奴隶1已经提交,那么它现在将如何运行?据我所知,承诺是充分和最终的。可能会在磁盘上保存点或日志以恢复状态,但这可能需要DBA的帮助。
SO - 参考资料
我正在寻找一种开箱即用的解决方案,以获得围绕一些SOAP请求的仅服务器端事务。我显然不是在寻找分布式事务或WS-*标准,因为它们改变了客户端的接口,而我只需要它是服务器端的。
因此,对于客户端:
webservice.StartTransaction(); // Or included in DoSomething(...)
webservice.DoSomething(Whatever);
webservice.DoSomethingElse();
webservice.CommitTransaction(); // Or included in DoSomethingElse()
在服务器
现在,我这里有两个事务。一致性要求为A=0和B=0,初始值为A=B=0
T1: read(A);
read(B);
if A=0 then B:=B+1;
write(B).
T2: read(B);
read(A);
if B=0 then A:=A+1;
write(A).
我知道没有并行执行导致可序列化的调度。因此,我希望应用两阶段锁定来保证可序列化。
两阶段锁定如何保证可序列化?你能给我举一个这两个交易的例子吗?
谢谢。
根据我在中读到的和理解的
每个连接都有一个、THD、对象,以及我们使用它更新或插入的内容,这些内容存储在THD中并提交给DB。
对于事务,特别是编程事务,我的理解是,我们坚持连接,直到操作完成,然后提交。同时,我们可以同时进行与DB相关的更新或插入以及其他可能导致某些异常/错误的计算。例子:
Begin;
IN-Transaction :
UPDATE Table-1
c = A/B
Insert Table-2 with c
... so on
Commit;
在这个编程事务中,我们必须传递用于执行多个DB操作的事务引用,并且该引用不是事务对象,而是一个连接