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

ORA-08177:このトランザクションのアクセスをシリアル化できません

    同じテーブルをROLLBACKにロックする他のトランザクションを待機するシリアル化可能なトランザクションを使用しています 。

    この他のトランザクションがロールバックせず、代わりにコミットした場合、このエラーが発生します。

    シナリオは次のようです:

    1. Alice DELETE FROM TABLE1 WHERE Version = 'v1'を呼び出すブラウザセッションを開きます

      • Bob DELETE FROM TABLE1 WHERE Version = 'v1'を呼び出すセッションを開きます Aliceの後 彼女がコミットする前にそれをしました。

      Bob のトランザクションはAliceから待機しています Version = 'v1'で行をロックしました

      • Alice 彼女のトランザクションをコミットします

      • Bob のトランザクションはCannot serialize accessで失敗します

    これを回避するには、TRANSACTION ISOLATION LEVELを設定します READ COMMITTEDへ :

    transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted)
    

    この場合、Bob のクエリはAliceの後に再発行されます Bobのように、彼女の変更をコミットします のトランザクションはAliceの後に開始されました の1つがコミットされました。

    更新

    接続の痕跡を投稿していただけませんか?

    これを行うには、接続直後に次のコマンドを発行します:

    (New OracleCommand("ALTER SESSION SET SQL_TRACE=TRUE", connection, transaction)).ExecuteNonQuery();
    

    、次に$ORACLE_HOME\admin\udumpを調べます 新しい*.trcの場合 ファイル




    1. CSVファイルをMySQLに直接インポートする

    2. PythonSQLライブラリの概要

    3. COUNT(*)でフィルタリングしますか?

    4. アクセスデータバースコネクタがテストに使用できるようになりました