2

PHP アプリケーションに ADOdb ライブラリを使用しています。

このアプリケーションは Oracle 9g でスムーズに動作しますが、新しいサーバーに転送すると、次のエラーがスローされることがよくあります。

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

私が使用している oci_8.dll の問題でしょうか? php_oci8_11g.dll に更新する必要がありますか?

4

1 に答える 1

5

このエラーは、分離レベルが に設定されserializableていて、他のテーブルでも DML を実行しているテーブルで DML を実行していた場合に発生します。

そのような分離レベルを設定して DML を実行していますか? もしそうなら、なぜ標準がread committed適切でないのでしょうか?

例えば:

誰かが行を削除します

ANOTHER SESSION                   YOUR SESSION

SQL> delete from a where id = 1;

1 row deleted.

コミットはまだ行われていません..その間、SERIALIZED トランザクションは同じ行を削除しようとします...

SQL> alter session set isolation_level=serializable;

Session altered.

SQL> delete from a where id = 1;

他のセッションがロックされているため、この時点でセッションがハングします。その他のセッションが今コミットする場合:

SQL> commit;        

Commit complete.  

あなたのセッションはそのエラーに遭遇します:

delete from a where id = 1
*
ERROR at line 1:
ORA-08177: can't serialize access for this transaction
于 2013-01-18T10:43:14.290 に答える