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 回答