Many DBMS use a special 2PC protocol called "XA" for distributed transaction. Why would someone use XA? To me, XA cannot guarantee any thing in case of failure:
In XA, the Transaction Manager (TM) will tell all the DBMS to prepare in the first phase, and if all are prepared, TM will tell all of them to commit in the second phase, otherwise if any of them fail, TM will tell the others to roll back.
If all the DBMS are prepared in the first phase, what if someone fail to commit in the second phase? In this case the whole transaction will fail and all the other will have to roll back (the 3rd phase?), rendering the first phase meaningless. That is to say, the first phase cannot make any guarantee even if all the DBMS are said to be prepared (it does increase some possibility of success, though).