sql >> データベース >  >> RDS >> PostgreSQL

2つのデータベースの同期1つがコミットに失敗しました

    分散トランザクションを実行したいので 、2フェーズコミットプロトコルが必要です 。

    通常どおり両方のデータベースでトランザクションを開始しますが、それらをコミットする代わりに、実行します

    PREPARE TRANSACTION 'some_name';
    

    これにより、コミット中に失敗する可能性のあるすべてが実行され、トランザクションが永続化されます。それが成功したら、両方のデータベースで以下を実行します。

    COMMIT PREPARED 'some_name';
    

    トランザクションをコミットします。

    PREPARE TRANSACTION中に何かが失敗した場合 、次のコマンドを実行して、準備済みのトランザクションを削除します。

    ROLLBACK PREPARED 'some_name';
    

    必要であることに注意してください 準備されたトランザクションを使用する場合はtransacrionmanagerソフトウェア。これにより、クラッシュやその他の予期しない問題の後に取り残された準備されたトランザクションが確実にクリーンアップされます。コミットまたはロールバックされていない準備済みのトランザクションは永久に残り、絶対的に確実にデータベースを破壊します。




    1. Oracle-SQL開発者からスクリプトを生成する方法

    2. PHP> 5.3.2のOCI_DEFAULTを使用したOracleのoci_execute()の動作

    3. psycopg2 TypeErrorの処理方法:文字列のフォーマット中にすべての引数が変換されるわけではありません

    4. 40以上の列を持つmysqlテーブル