Моя основная (физическая) машина - Windows 7. Я установил "домашнюю" виртуальную машину, используя VirtualBox, чтобы я мог разработать приложение Laravel на виртуальной машине. Homestead (VM) работает под управлением Ubuntu 14.10.
Также на моем компьютере с Win 7 я установил базу данных Oracle. База данных работает нормально, и я могу получить к ней доступ из сеанса Sql*Plus
работающего на самой машине Windows. Однако я хочу получить доступ к той же базе данных Oracle с компьютера Homestead (в конечном итоге, чтобы я мог получить доступ к базе данных через мое веб-приложение). В качестве первого шага к достижению этой цели я попытался установить Oracle Instant Client на Homestead (11.2) и настроить его, насколько мне известно, следующим образом:
Некоторые переменные окружения, которые установлены на машине Ubuntu/Homestead:
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
Я могу пинговать машину Win7 из 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
Я могу запустить Sql*Plus
из сеанса SSH, который я открываю для Homestead:
# sqlplus /nolog
SQL>
tnsnames.ora
на машине Homestead содержит следующую запись:
ORACBH =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = cbh01)(PORT = 1521))
(CONNECT_DATA = (SERVICE_NAME = ORACBH))
)
listener.ora
на машине Win7 выглядит так:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = C:\oracle\product\10.2.0\db_2)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = ORACBH)
(ORACLE_HOME = C:\oracle\product\10.2.0\db_2)
(SID_NAME = ORACBH)
)
)
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
Когда я делаю соединение:
SQL> conn usr/pass@oracbh
Возвращает:
ERROR:
ORA-12154: TNS:could not resolve the connect identifier specified
Мне кажется, что он не замечает файл tnsnames.ora
. Это проблема сама по себе, но, возможно, я смогу обойти эту проблему, напрямую подключившись к строке подключения.
SQL> conn usr/pass@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=CBH01)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORACBH)))
Но это просто встречается со следующим:
ERROR:
ORA-12541: TNS:no listener
Я отключил все брандмауэры, поэтому не думаю, что это проблема. В противном случае у меня заканчиваются идеи. :-/
Слушатель, кажется, работает нормально.
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\10.2.0\db_2\network\admin\listener.ora
Listener Log File C:\oracle\product\10.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
Я склонен думать, что проблема в том, как виртуальная машина обращается к сети. Я не думаю, что это проблема Oracle. Мое знание сетей и тому подобное ограничено, поэтому не стесняйтесь просветить меня на этом фронте! О подобных проблемах сообщается на некоторых страницах поддержки Oralce и VM, например: https://community.oracle.com/thread/2439416
Пытаясь отладить соединение по сети, я использовал Telnet следующим образом:
vagrant@homestead:~$ telnet 192.168.1.9 1521
Trying 192.168.1.9...
telnet: Unable to connect to remote host: Connection refused
Но, как уже говорилось, я уже отключил все программное обеспечение брандмауэра, что устранит блокировку портов на этом уровне.