2

セーブポイントの使い方を誤解していると思います。おそらく誰かが私のためにそれを片付けることができます。私がやろうとしていること、そして私が経験したこととして、私の例を提示します。

私のアプリは特定の手順を実行しています。その手順 (および関連する DB 操作) の前に、セーブポイントを作成します。その手順の間に、select for update を開始します。これにより、多数のロックが作成されます。

lock1 - 期間=トランザクション、クラス=行、タイプ=インテント 行=大きな数値

lock2 - 期間=トランザクション、クラス=行、タイプ=WriteNoPK 行=大きな数値

その Java プロシージャが成功すると、関連する DB トランザクションがコミットによって完了します。ただし、Java プロシージャが失敗した場合は、関連する DB 操作もロールバックしたいと考えています。私はこれを試みています:

conn.rollback(mySavepoint);

ただし、これはDB操作によって作成された(上記の)テーブルロックを解放していません(conn.rollback(mySavepoint);によってロールバックしただけだと思っていました)。

この動作を、Sybase と Derby の 2 つのデータベースでテストしました。

これはなぜですか?

conn.rollback(mySavepoint) の後に本当にコミットする必要がありますか??? 少し直感に反するようです。

4

0 に答える 0