Minha máquina principal (física) é o Windows 7. Instalei uma máquina virtual "homestead" usando o VirtualBox para poder desenvolver um aplicativo Laravel na VM. Homestead (a VM) executa o Ubuntu 14.10 como seu SO.
Também na minha máquina Win 7, instalei um banco de dados Oracle. O banco de dados está funcionando bem e posso acessá-lo de uma sessão Sql*Plus
em execução na própria máquina Windows. No entanto, desejo acessar esse mesmo banco de dados Oracle da máquina Homestead (para que eu possa acessar o banco de dados por meio do aplicativo da Web). Como primeiro passo para alcançar esse objetivo, tentei instalar o Oracle Instant Client no Homestead (11.2) e configurei-o de acordo com o que eu sei:
Algumas variáveis de ambiente que são definidas na máquina Ubuntu / Homestead são:
export ORACLE_HOME=/usr/lib/ora_home_directory
export LD_LIBRARY_PATH=$ORACLE_HOME
export TNS_ADMIN=$ORACLE_HOME/network/admin
export PATH=$PATH:$ORACLE_HOME
Eu posso fazer ping na máquina Win7 da Homestead:
# ping -c 4 cbh01
PING cbh01 (192.168.1.9) 56(84) bytes of data.
64 bytes from 192.168.1.9: icmp_seq=1 ttl=127 time=2.96 ms
64 bytes from 192.168.1.9: icmp_seq=2 ttl=127 time=1.04 ms
64 bytes from 192.168.1.9: icmp_seq=3 ttl=127 time=1.21 ms
64 bytes from 192.168.1.9: icmp_seq=4 ttl=127 time=1.45 ms
Eu posso lançar Sql*Plus
da sessão SSH que abro para Homestead:
# sqlplus /nolog
SQL>
tnsnames.ora
na máquina Homestead contém a seguinte entrada:
ORACBH =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = cbh01)(PORT = 1521))
(CONNECT_DATA = (SERVICE_NAME = ORACBH))
)
listener.ora
na máquina Win7 tem esta aparência:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = C:\oracle\product.2.0\db_2)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = ORACBH)
(ORACLE_HOME = C:\oracle\product.2.0\db_2)
(SID_NAME = ORACBH)
)
)
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
Quando faço uma conexão:
SQL> conn usr/pass@oracbh
Ele retorna:
ERROR:
ORA-12154: TNS:could not resolve the connect identifier specified
Parece-me que não está tomando conhecimento do arquivo tnsnames.ora
. Este é um problema em si, mas não importa, talvez eu possa contornar o problema conectando diretamente com a string de conexão.
SQL> conn usr/pass@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=CBH01)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORACBH)))
Mas isso é simplesmente encontrado com o seguinte:
ERROR:
ORA-12541: TNS:no listener
Eu desliguei todos os firewalls, então não acho que esse seja o problema. Caso contrário, estou ficando sem ideias. : - /
O ouvinte parece estar funcionando bem.
C:\Users\Bob>lsnrctl status
LSNRCTL for 32-bit Windows: Version 10.2.0.4.0 - Production on 05-JUN-2015 08:07:44
Copyright (c) 1991, 2007, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for 32-bit Windows: Version 10.2.0.4.0 - Production
Start Date 05-JUN-2015 06:49:27
Uptime 0 days 1 hr. 18 min. 21 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File C:\oracle\product.2.0\db_2\network\admin\listener.ora
Listener Log File C:\oracle\product.2.0\db_2\network\log\listener.log
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
Services Summary...
Service "ORACBH" has 1 instance(s).
Instance "ORACBH", status UNKNOWN, has 1 handler(s) for this service...
Service "PLSExtProc" has 1 instance(s).
Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
Eu costumo pensar que o problema é uma combinação de como a VM acessa a rede. Eu não acho que seja um problema do Oracle. Meu conhecimento de redes e afins é limitado, então sinta-se à vontade para me esclarecer sobre essa frente !! Problemas semelhantes são relatados em algumas páginas de suporte do Oralce e VM, por exemplo: link
Tentando depurar a conexão na rede, usei o Telnet da seguinte forma:
vagrant@homestead:~$ telnet 192.168.1.9 1521
Trying 192.168.1.9...
telnet: Unable to connect to remote host: Connection refused
Mas, como dito anteriormente, já desativei todos os softwares de firewall, o que eliminaria o bloqueio de portas nesse nível.