InterfaceError:无法获取Oracle环境句柄; ORACLE_HOME是正确的,SQL*Plus将连接

Vic*_*ice 12 python oracle cx-oracle

我在尝试导入cx_Oracle时遇到标准的"DLL加载失败;找不到模块"错误.我安装了正确的即时客户端,路径都正确...运行Dependency Walker告诉我我错过了以下.dll的MSVCR90,GPSVC,IESHIMS.

我正在运行Oracle 11g和Python 2.7的即时客户端.有人有主意吗?我发现的大多数答案都带有不正确的路径,但似乎并非如此......此外,我找不到任何其他的.dll在我的系统上的任何其他位置.

编辑:我最终安装了Oracle XE 11g(32位); Python 2.7和cx_Oracle都是32位(我还应该添加我在Windows上).cx_Oracle现在安装得很干净; 但是在连接时我收到一个错误:

InterfaceError: Unable to acquire Oracle environment handle
Run Code Online (Sandbox Code Playgroud)

ORACLE_HOME路径是正确的,PATH文件夹中的bin也是正确的...

App*_*234 8

你在运行什么版本的Windows?是32位还是64位?

您的Oracle Instant Client是32位还是64位?

你的Python安装是32位还是64位?

你的cx_oracle是正确的版本吗?32位还是64位?

MSVCR90.dll是Microsoft Visual C++ 2008 SP1可再发行组件包的一部分.

提供32位版本在这里,64位版本在这里.

IESHIMS.dll将位于C:\Program Files\Internet Explorer\Ieshims.dll(32位Windows位置或64位Windows位置)或C:\ Program Files\Internet Explorer(x86)\ Ieshims.dll`(64位Windows上的32位Windows位置),如果您的版本Windows是Vista或更新版本.

GPSVC.dll应该存在C:\Windows\System32.

Dependency Walker将最后2个DLL报告为丢失,因为Windows错误报告使用了IEFrame.DLL并且延迟加载,这意味着它们可能永远不会被需要.

我发现为了让cx_oracle干净地导入,你需要确保它的依赖版本匹配.您还需要确保Oracle客户端安装与您ORACLE_HOME和您的PATH变量包含的内容相匹配%ORACLE_HOME%/bin,该变量包含在环境变量中或注册表中,并且您的tnsnames.ora文件位于TNS_ADMIN设置为的值中.正如Emmanuel的回答所述,未设置的TNS_ADMIN设置的默认值是%ORACLE_HOME%\network\admin.

我也很少使用Oracle安装的即时客户端版本,除非绝对必要的,因为它不设置始终确保设置或维持路径的其他版本不同的是,ORACLE_HOME或TNS_ADMIN正确,从而导致TNSNAMES.ORA和OCI.DLL不是找到.如果在同一台计算机上有多个Python版本或Oracle版本,则会变得更加复杂.

要显式设置它们,您可以使用环境变量(用户或系统),它们位于系统图标,高级系统设置任务,高级选项卡,环境按钮下的控制面板中.

关于InterfaceError: Unable to acquire Oracle environment handle,这发生特别相对于不解决OCI.DLL时,cx_Oracle不知道要使用哪个OCI.DLL,通常这是因为,含有包含OCI.DLL两个或更多个搜索目录PATH变量的情况下.

特别是确保您的PATH仅包含来自即时客户端安装或Oracle 11G XE安装的OCI.dll的一个瞬间应该解决您的问题.

在安装Oracle 11G XE之前卸载了即时客户端吗?

将以下内容粘贴到命令提示符中.

echo The current ORACLE_HOME is %ORACLE_HOME%

echo The current TNS_ADMIN is %TNS_ADMIN%

echo The current PATH is %PATH%

要查看这些变量的当前值.

更多资源


Emm*_*uel 4

我遇到了同样的问题:您必须设置变量ORACLE_HOME以匹配您的 Oracle 客户端文件夹(例如,在 Unix 上:通过 shell;在 Windows 上:如果配置面板的环境变量中不存在,则创建一个新变量)因为这是cx_Oracle模块可以链接到它的方式。

您的文件夹$ORACLE_HOME/network/admin(在 Windows 上)是您的文件应该存在的%ORACLE_HOME%\network\admin位置。tnsnames.ora

  • 我的 ORACLE_HOME 与我的 Oracle 客户端文件夹匹配,但仍然遇到相同的错误,我的 tnsnames.ora 也位于正确的位置..有什么想法吗? (2认同)