0

クライアントの要求に応じて、Web アプリケーションを read-uncommitted 分離レベルにするように依頼されました (これはおそらく悪い考えです...)。

分離が行われているかどうかをテストしているときに、コミットせずに行を挿入し(DBVisualiser : @set autocommit off + データベースへの VPN 接続を停止)、コミットされていない挿入に対してアプリケーションのテストを開始しました。

select * from MYTABLE WHERE MY ID = "NON_COMMIT_INSERT_ID" WITH URは正常に動作しています。今、この行を「削除」したいのですが、方法が見つかりませんでした...

更新:しばらくすると行が消えました (約 30 分)。ロールバックが自動的に発行される前に、何らかのタイムアウトがあると思います。これが発生する前にコミットされていない行を削除する方法はありますか?

4

2 に答える 2

0

これは通常の SQL ステートメントでは不可能だと思います。行を削除する唯一の方法は、行を挿入したトランザクションをロールバックすることです (または、tx がコミットされるのを待ってから削除します)。ネットワーク レベルで DB から切断したので、あなたが話している 30 分は、おそらくオペレーティング システム レベルで強制された TCP タイムアウトです。TCP 接続が終了した後、DB2 はクライアントのトランザクションを自動的にロールバックしました。

それでも、トランザクションをロールバックする必要がある (LIST APPLICATIONS から取得したハンドルで FORCE APPLICATION を使用して) アプリケーションをデータベースから切断するように管理的に強制できると思います。これらのコマンドの詳細については、 jsp?topic=/com.ibm.db2.udb.doc/core/r0001951.htmを参照してください。

于 2012-09-14T15:05:05.367 に答える
0

データベースからコミットされていない行を読み取ることは 1 つのことです。これを行う正当な理由 (読み取りロックの欠如) がある場合もあります。

コミットやロールバックを行わずに、挿入、更新、または削除された行をデータベースに残すことも別の方法です。これは絶対にしないでください。データベースの変更後にコミットまたはロールバックします。

于 2012-09-14T15:11:55.223 に答える