SQLSTATE[HY000]: OCISessionBegin: ORA-21561: OID 生成失败

Posted

技术标签:

【中文标题】SQLSTATE[HY000]: OCISessionBegin: ORA-21561: OID 生成失败【英文标题】:SQLSTATE[HY000]: OCISessionBegin: ORA-21561: OID generation failed 【发布时间】:2013-11-08 22:31:35 【问题描述】:

尝试在我的一个 Web 服务器上执行 PDO OCI SQL 查询时收到以下错误:

SQLSTATE[HY000]: OCISessionBegin: ORA-21561: OID generation failed

我已经确认可以从机器访问 Oracle 服务器并且网络配置看起来不错。 Google 返回的结果很少,而且不是很有帮助。

有没有其他人遇到过这个问题,或者对如何解决有任何建议?

【问题讨论】:

能否显示 PDO 构造函数参数和 tnsnames.ora(检查两个地方的主机名是否相同) 我实际上只是想完全绕过 PDO 并只使用 OCI,并收到了一个更有用的错误消息,它导致了一个快速的解决方案 - 很抱歉给您带来麻烦。我会将我的发现作为答案发布,以防对其他人有所帮助。 【参考方案1】:

我遇到了同样的问题。我试图连接到我的本地主机上的数据库。 这就是我解决它的方法。

获取主机名

> hostname 
localhost.idc.company.com

将此名称添加到 /etc/hosts 文件中

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 localhost.idc.company.com

【讨论】:

将主机名添加到 localhost 的 /etc/hosts 文件也对我有用,即使我正在连接到远程 Oracle 服务器。因此,即使您有远程服务器,也请尝试此修复。【参考方案2】:

我决定放弃使用 PDO,只是尝试使用 OCI_Connect() 函数连接到数据库并收到以下消息:

"ORA-24408: could not generate unique server group name"

...我前段时间曾与之抗争,答案就在这里:ORA-24408: could not generate unique server group name

我只是在这里发布它以防万一有人遇到类似的错误。希望对某人有所帮助。

【讨论】:

【参考方案3】:

这可以通过简单编辑您的主机文件来解决:

只需在终端/命令提示符中键入“主机名”即可查找本地主机系统的名称。假设您的机器名为“the_machine”,然后将 /etc/hosts 文件编辑为:127.0.0.1 localhost the_machine

    $主机名:

    机器

    $vi /etc/hosts :

127.0.0.1 localhost the_machine

    $python Connect_to_Oracle_DB.py

干杯!

【讨论】:

以上是关于SQLSTATE[HY000]: OCISessionBegin: ORA-21561: OID 生成失败的主要内容,如果未能解决你的问题,请参考以下文章

Zend 错误 SQLSTATE[HY000] [1045]

SQLSTATE[HY000]:一般错误:1364 字段

Laravel:SQLSTATE [HY000] [2002] 连接被拒绝

SQLSTATE[HY000]: OCISessionBegin: ORA-21561: OID 生成失败

Symfony 2 SQLSTATE [HY000] [2002] 连接被拒绝错误

SQLSTATE [HY000]:一般错误:1364 字段“名称”没有默认值