Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

InterfaceError:Não é possível adquirir o identificador do ambiente Oracle; ORACLE_HOME está correto e o SQL*Plus se conectará


Qual versão do Windows você está executando? É 32 ou 64 bits?

Seu Oracle Instant Client é 32 ou 64 pedaço ?

Sua instalação do Python é 32 ou 64 pedaço ?

O seu cx_oracle é a versão correta? 32 ou 64 pedaço ?

MSVCR90.dll faz parte do pacote redistribuível do Microsoft Visual C++ 2008 SP1.

Versão de 32 bits disponível aqui , versão de 64 bits disponível aqui .

IESHIMS.dll estará localizado em C:\Program Files\Internet Explorer\Ieshims.dll (Localização do Windows de 32 bits ou Localização do Windows de 64 bits) ou C:\Arquivos de Programas\Internet Explorer (x86)\Ieshims.dll` (Localização do Windows de 32 bits no Windows de 64 bits), se sua versão do Windows for Vista ou mais recente.

GPSVC.dll deve estar em C:\Windows\System32 .

Dependency Walker relata que essas 2 últimas DLLs estão ausentes porque são usadas pelo Relatório de Erros do Windows que usam IEFrame.DLL e são carregadas com atraso, o que significa que elas podem nunca ser realmente necessárias.

Descobri que, para que o cx_oracle importe de forma limpa, você precisa garantir que as versões de suas dependências correspondam. Você também precisa garantir que a instalação do cliente Oracle corresponda ao seu ORACLE_HOME e sua variável PATH contém %ORACLE_HOME%/bin , que é definida como uma variável de ambiente ou no registro, e que seu arquivo tnsnames.ora reside no valor que TNS_ADMIN está definido. Conforme declarado em Emmanuel , o valor padrão para uma configuração TNS_ADMIN não definida é %ORACLE_HOME%\network\admin .

Eu também raramente usei a versão do cliente instantâneo do instalador oracle, a menos que seja absolutamente necessário, porque, ao contrário das outras versões, ele não define sempre, certifique-se de que o Path, ORACLE_HOME ou TNS_ADMIN esteja definido ou mantido corretamente, o que leva a tnsnames.ora e OCI.dll não serem encontrado. Isso fica mais complicado quando você tem várias versões do Python ou versões do Oracle na mesma máquina.

Para defini-los explicitamente, você pode usar Variáveis ​​de Ambiente (Usuário ou Sistema) , que ficam no Painel de Controle sob o Ícone do Sistema, tarefa de configurações avançadas do sistema, guia Avançado, botão Ambiente.

Em relação ao InterfaceError: Unable to acquire Oracle environment handle , isso ocorre especificamente quando ao contrário de não resolver OCI.dll , o cx_Oracle não sabe qual OCI.dll usar, normalmente esse é o caso por causa da variável PATH que contém dois ou mais diretórios de pesquisa que contêm OCI.dll.

Especificamente, garantir que seu PATH contenha apenas um instante de OCI.dll da instalação do cliente instantâneo ou da instalação do Oracle 11G XE deve corrigir seu problema.

Você desinstalou o cliente instantâneo antes de instalar o Oracle 11G XE?

Cole o seguinte em um prompt de comando.

echo The current ORACLE_HOME is %ORACLE_HOME%

echo The current TNS_ADMIN is %TNS_ADMIN%

echo The current PATH is %PATH%

Para ver o valor atual dessas variáveis.

Outros recursos