php - ORA-08177 : can't serialize access for this transaction - Oracle 11g

标签 php oracle oracle11g

我正在为 PHP 应用程序使用 ADOdb 库。

此应用程序在 Oracle 9g 上运行顺畅,但当我们将其转移到新服务器时,它经常抛出以下错误:

ORA-08177: can't serialize access for this transaction

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

最佳答案

如果您的隔离级别设置为 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;

此时您的 session 将挂起,因为另一个 session 已锁定。 如果另一个 session 现在提交:

SQL> commit;        

Commit complete.  

您的 session 遇到该错误:

delete from a where id = 1
*
ERROR at line 1:
ORA-08177: can't serialize access for this transaction

关于php - ORA-08177 : can't serialize access for this transaction - Oracle 11g,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14396820/

相关文章:

PHP/Magento - foreach 中的变量未正确更新

Python 连接到 Oracle 数据库

sql - bool 给出无效数据类型 - Oracle

sql - TABLE/CAST/MULTISET 与 FROM 子句中的子查询

sql - 尝试使用循环将多个值存储到变量中,并使用该特定变量进行插入

php - 在 Woocommerce 中获取订单标题

PHP/MySQL 连接到单个列并更新表中的其他列

php - 在客户端重用 Zend 验证器

javascript - 从 Node.js 读取 Oracle 中的 BLOB

sql - PL/SQL 中不带 + 号的增量日期/日