Oracle Database 12c в виртуальной машине на Mac OSX
Я пытаюсь получить среду разработки и работает на моем ноутбуке OSX, создавая JSPs в Eclipse, работает с сервером Tomcat и подключается к базе данных Oracle.
Eclipse и Tomcat играют хорошо вместе, и я могу сделать JSPs и так далее. Трудная часть теперь получает базу данных Oracle и работает на Mountain Lion, и получает Eclipse для подключения к нему.
после широкое Googling, я нашел несколько ресурсы:
http://dimitrisli.wordpress.com/2012/08/08/how-to-install-oracle-database-on-mac-os-any-version/ http://barrymcgillin.blogspot.com/2011/12/using-oracle-developer-days-virtualbox.html
(или даже https://docs.google.com/document/d/1Th5MSIhS13YIJYCD8W1GLnOQEfrfov-92-He1cluTec/pub)
следуя этим (довольно тщательным) руководствам, я загрузил последнюю виртуальную машину из Oracle, здесь: http://www.oracle.com/technetwork/database/enterprise-edition/databaseappdev-vm-161299.html
Примечание: все три вышеперечисленных учебника используют немного более старую версию виртуальной машины, которая имеет Oracle DB 10 или 11, но теперь доступна 12c. Новый также имеет другую версию Oracle Linux и, вероятно, некоторые другие отличия. Различные имена пользователей и пароли кажутся немного разными.
я установил VirtualBox, загрузил в VM, вывел его в сеть. У меня есть сетевые настройки, настроенные только с адаптером NAT, с типом адаптера как "PCnet-FAST III" и переадресацией портов с 127.0.0.1 до 10.0.4.15 на порту 1521 до 1521 и 2222 до 22.
теперь, если я открою терминал на моей хост-машине, я могу SSH в мою виртуальную машину через:ssh -p 2222 oracle@localhost
. Я получаю терминал в виртуальной машине, и он дает мне то же приветственное сообщение, которое я получаю при первой загрузке виртуальной машины в VirtualBox. Кроме того, я могу пинговать localhost или 127.0.0.1 и он отвечает с переменным, но коротким запаздыванием.
основываясь на этом, я могу только предположить, что моя виртуальная машина работает, и что моя переадресация портов (которая изложена во всех 3 учебниках, с которыми я связан) находится в хорошей форме.
теперь приходит часть, где я хотел бы подключить Eclipse к базе данных Oracle, которая находится в виртуальной машине. Если вы посмотрите под первым учебником, dimitrisli настройка IntelliJ с dataSource указывая на ВМ. Я хочу сделать то же самое в Затмение.
Я новичок в Eclipse, поэтому я огляделся вокруг, как именно это сделать, и я придумал:
1) Создайте новый драйвер базы данных.
Я загрузил JDBC для Oracle Database 12c, JDK 7, из Oracle,здесь. Я засунул .jar-файл в папке "Мои документы" (если это неправильно). В Eclipse я создал новый драйвер базы данных, основанный на одном из других шаблонов драйверов Oracle, и изменил настройки. В Разделе " Драйвер Файлы " я указал на мой ojdbc7.jar
файл, и в разделе "свойства" у меня есть следующее--Дайте мне знать, если это неправильно:
Catalog: USER
Connection URL: jdbc:oracle:thin:@localhost:1521:orcl
Database Name: pdb1
Driver Class: oracle.jdbc.OracleDriver
Password:
User ID:
Я попытался использовать то, что появилось в шаблоне драйвера Oracle, и просто настроить, чтобы соответствовать моему точному сценарию (на основе того, что было сказано в пошаговых руководствах и что я мог догадаться, копаясь в современной версии виртуальной машины).
2) Создайте новое соединение с базой данных.
когда я иду, чтобы сделать новое соединение с базой данных, я иду к Область свойств драйвера, и я могу выбрать свой пользовательский драйвер. Существует также поле свойств, в которое я ввожу следующее: (Некоторые из них, кажется, перезаписывают или дублируют то, что я набрал, когда я сделал сам драйвер?)
SID: orcl
Host: 127.0.0.1
Port Number: 1521
User Name: hr // Gotten from one of the tutorials. Have also tried 'system/oracle', neither works yet.
Password: oracle
Connection URL: jdbc:oracle:thin:@127.0.0.1:1521:orcl // Immutable, set by the Driver I suppose.
Catalog: User
когда я нажимаю Test Connection, он зависает на некоторое время, а затем я получаю " ping failed!'ошибка, с подробностями:
java.sql.SQLRecoverableException: IO Error: Socket read timed out
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:673)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:715)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:385)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:30)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:564)
at org.eclipse.datatools.connectivity.drivers.jdbc.JDBCConnection.createConnection(JDBCConnection.java:298)
at org.eclipse.datatools.connectivity.DriverConnectionBase.internalCreateConnection(DriverConnectionBase.java:105)
at org.eclipse.datatools.connectivity.DriverConnectionBase.open(DriverConnectionBase.java:54)
at org.eclipse.datatools.connectivity.drivers.jdbc.JDBCConnection.open(JDBCConnection.java:81)
at org.eclipse.datatools.enablement.internal.oracle.JDBCOracleConnectionFactory.createConnection(JDBCOracleConnectionFactory.java:27)
at org.eclipse.datatools.connectivity.internal.ConnectionFactoryProvider.createConnection(ConnectionFactoryProvider.java:83)
at org.eclipse.datatools.connectivity.internal.ConnectionProfile.createConnection(ConnectionProfile.java:359)
at org.eclipse.datatools.connectivity.ui.PingJob.createTestConnection(PingJob.java:76)
at org.eclipse.datatools.connectivity.ui.PingJob.run(PingJob.java:59)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53)
Caused by: oracle.net.ns.NetException: Socket read timed out
at oracle.net.ns.Packet.receive(Packet.java:350)
at oracle.net.ns.NSProtocolStream.negotiateConnection(NSProtocolStream.java:153)
at oracle.net.ns.NSProtocol.connect(NSProtocol.java:263)
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1360)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:486)
... 14 more
к сожалению, будучи новым для Java и Eclipse и Oracle DB, я не совсем уверен, что с этим делать, и я был ковыряться по несколько часов, пытаясь определить, что может быть не так. Я надеюсь, что кто-то с некоторым опытом в этом может указать мне в правильном направлении.
(О, и я не неопытный разработчик-просто новичок в этих инструментах.)
спасибо!
3 ответов
Я решил свою проблему, примерно через 6 или 7 часов впустую.
благодаря этому посту: Virtualbox "порт вперед" от гостя к хосту
и, в частности, на комментарий от @Nicholas, который заставил меня понять, что я деактивировал брандмауэр моего Mac, но не брандмауэр в гостевой ОС. Выключив его, все вдруг заработало.
Я полагаю, что конфигурация брандмауэра гостевой ОС по умолчанию допускала SSH на порту 2222, как это прекрасно работало даже с брандмауэром, который вводил меня в заблуждение, думая, что что-то не так с моим драйвером базы данных или соединением.
надеюсь, это принесет пользу потомкам.
EDIT:
как упоминает @HarpreetDawar, правильная строка подключения для доступа к базе данных:
jdbc:oracle:thin:@localhost:1521/PDB1
тот, который я использовал, заканчивая :orcl
вместо /PDB1
подключается к базе данных "контейнер". Я не полностью поймите Oracle 12c и реализацию" подключаемой базы данных", но основная идея заключается в том, что вы можете иметь несколько баз данных в пределах одной, и вы можете включать и выключать их, подключая/отключая их. Следовательно, "PDB1", подключаемая база данных 1.
если вы подключитесь к контейнеру, вы обнаружите, что не можете создать нового пользователя/схему без префикса "C##", что немного неудобно. Это потому, что контейнер не предназначен для использования в качестве обычной БД. Подключении к контейнеру, чтобы подключить / отключить подключаемый dbs (и другие вещи, без сомнения).
так что если вы хотите подключиться к контейнеру, использовать двоеточие и "Сида" (второй раз в ВМ) в строке подключения, а также если вы хотите подключиться к подключаемым, использовать косую черту и "имя сервиса" (PDB1 в ВМ) в строке подключения.
в любом случае, это дополнительные данные, которые я узнал после решения моей проблемы.
еще одна вещь! Обратите внимание на порт пересылка.
предположим, теперь у вас есть VM и работает, и вы можете правильно подключиться к Oracle DB и т. д. Но у вас есть друг, который хочет использовать DB с вами? Ну, это просто. Он должен просто использовать ту же строку подключения с вашим IP-адресом вместо localhost, а переадресация портов, настроенная в VirtualBox, должна отправлять его соединение (используя порт 1521) прямо в вашу виртуальную машину. Правильно?
Ну, если вы настроили переадресацию портов как From: 127.0.0.1
, это не сработает, потому что соединение вашего приятеля идет на ваш внешний IP-адрес. Поэтому добавьте дополнительный параметр переадресации портов с внешнего IP-адреса на виртуальную машину. Тогда он будет работать отлично!
-Мэтт
Я-автор первого руководства Мэтт Mc цитирование и берут на себя смелость опубликовать мой комментарий к его ответу в качестве отдельного ответа для целей видимость.
Я изначально написано данное руководство ~ 2 года назад подробно объясняя процесс получения Oracle 11gR2 установлен на Mac с помощью VirtualBox.
вчера (25 апреля 14) я обновил это же руководство изложение всех дополнительных шагов, необходимых для получить Oracle 12cR1 установлен на Mac с помощью VirtualBox.
используйте следующий url
URL-адрес = jdbc:oracle:thin:@//127.0.01:1521/PDB1
чтобы заставить его работать.