5

私たちのアプリケーションでは、結果として生じる更新が実行された後にのみコミットされるデータベースの更新があります (もちろん両方とも同じトランザクションを使用します)。ただし、まれに、ユーザーが 2 回目の更新の前にアプリケーションを終了し、最初の更新が破棄されるというフローが発見されました。終了時にこのコミットされていない更新を認識する方法を探しています。

このような再設計が必要な問題は知っていますが、それは不可能です。フローの希少性とアプリの構造のため、コミットされていない更新についてトランザクション自体をチェックする方法があるかどうか疑問に思っています。

質問は Oracle と SQLServer に有効です。アプリは PowerBuilder で作成されていますが、必要に応じてさまざまな方法 (.NET、Win32 など) で拡張できます。

4

7 に答える 7

5

Oracleでは、DBMS_TRANSACTION.local_transaction_idを呼び出すことができます。これにより、現在のトランザクションの一意の識別子が返されるか、アクティブなトランザクションがない場合はNULLが返されます。

共有してお楽しみください。

于 2009-12-22T12:53:02.933 に答える
4

これは役に立つかもしれません

@@TRANCOUNT (Transact-SQL)

現在の接続でアクティブなトランザクションの数を返します。

于 2009-12-22T10:20:09.883 に答える
2

PB11.5を使用していて、カスタムトランザクションオブジェクトを使用している場合、DBMSに依存しないことを行うのは非常に簡単です。トランザクションオブジェクトのSQLPreviewイベントで、INSERT、UPDATE、またはDELETEが通過したときにブール値をオンに切り替え、COMMITまたはROLLBACKが通過したときにブール値をオフに切り替えます。

実際、SQLCA(アプリケーション、プロパティ、追加プロパティ、変数タイプ、SQLCA)を使用している場合、カスタムトランザクションオブジェクトを交換するのはそれほど難しくありません。多くの「CREATEtransaction」ステートメントを含む多数の個別のデータベース接続を使用している場合(標準のPB検索でこれを見つけることができます。または、PBL Peeperを使用すると、単語間に可変数のスペースを入れてこれを見つけることができます)、これを実装すると難しくなりますが、不可能ではありません。

また、完全を期すために、カスタムトランザクションオブジェクトを作成するには、ファイル/新規/PBオブジェクト/標準クラス/トランザクションを作成します。インスタンス変数(私が提案したブール値など)とスクリプトイベント(私が提案したSQLPreviewイベントなど)および関数(この機能のインターフェイスを作成して、将来拡張する場合に備えて、詳細を非表示にします)。SQLPreviewは、11.5より前のTransactionオブジェクトでは使用できないことに注意してください。(11.5より前ではおなじみのように聞こえると思う人のために、データウィンドウはSQLPreviewを実装しています。)

幸運を、

テリー。

于 2009-12-29T13:44:25.783 に答える
0

SQL Server 2005/2008では、DMVを使用できます。この記事をチェックしてください

于 2010-03-10T14:25:48.543 に答える