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

2つの異なるスレッドがDBから同じ行を読み取らないようにする方法(HibernateとOracle 10g)

    PESSIMISTIC_WRITEを使用する必要があります クエリ時:

    Query q = session
        .createQuery("from MyObject n where n.state = 'NEW'")
        .setLockOptions(new LockOptions(LockMode.PESSIMISTIC_WRITE));
    List<MyObject> list = (List<MyObject>) q.list();
    

    親オブジェクトをロックするだけで十分です。デッドロックは必ずしも発生しません。ロックを保持しているスレッドが、別のスレッドが待機をタイムアウトする前にロックを解放しないと、ロックの取得に失敗する可能性があります。

    Oracleを使用しているので、これが更新のために選択 動作:

    したがって、T1が一部の行で排他ロックを取得した場合、T1がコミットまたはロールバックするまで、T2はそれらのレコードを読み取ることができません。 T2がREAD_UNCOMMITTED を使用した場合 分離レベルの場合、T2は、クエリが開始されたときと同じようにデータを再構築するために元に戻すログを使用するだけなので、ロックレコードをブロックすることはありません。 SQL標準とは対照的に、OracleREAD_UNCOMMITTEDは次のようになります。




    1. UNIONALLを使用したCASEを使用したSQLORDERBY

    2. コピーコマンドを開始したラムダ関数がタイムアウトした後でも、コピーコマンドをredshiftで実行し続けるにはどうすればよいですか?

    3. HTMLボタンを使用してPHP関数を呼び出す

    4. NLogからPostgreSQLへの接続