ORA-08177:无法序列化此事务的访问权限 - Oracle 11g

Ale*_*lex 2 php oracle oracle11g

我正在使用ADOdb Library作为PHP应用程序.

此应用程序可以与Oracle 9g一起使用,但是当我们将它传输到新服务器时,它经常会抛出以下错误:

ORA-08177:无法序列化此事务的访问权限

这可能是我使用的oci_8.dll的问题吗?我应该将它更新为php_oci8_11g.dll吗?

Daz*_*zaL 5

如果您的隔离级别设置为serializable并且您正在对其他也在执行DML的表上执行DML,则会发生此错误.

您是否设置了这样的隔离级别+正在进行DML,如果是这样,为什么标准不read committed适合您呢?

例如:

有人删除了一行

ANOTHER SESSION                   YOUR SESSION

SQL> delete from a where id = 1;

1 row deleted.
Run Code Online (Sandbox Code Playgroud)

提交尚未完成..同时,您的SERIALIZED事务尝试删除相同的行...

SQL> alter session set isolation_level=serializable;

Session altered.

SQL> delete from a where id = 1;
Run Code Online (Sandbox Code Playgroud)

此会话将在此时挂起,因为其他会话具有锁定.如果其他会话现在提交:

SQL> commit;        

Commit complete.  
Run Code Online (Sandbox Code Playgroud)

您的会话遇到该错误:

delete from a where id = 1
*
ERROR at line 1:
ORA-08177: can't serialize access for this transaction
Run Code Online (Sandbox Code Playgroud)