我正在将ADOdb库用于PHP应用程序。
此应用程序可以与Oracle 9g一起使用,但是当我们将其转移到新服务器时,它经常会抛出以下错误:
ORA-08177:无法序列化此交易的访问权限
我使用的oci_8.dll可能有问题吗?我应该将它更新为php_oci8_11g.dll吗?
答案 0 :(得分: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