Mac OSX上的VM中的Oracle Database 12c

Mat*_* Mc 7 java eclipse oracle macos jdbc

我正在尝试在我的OSX笔记本电脑上启动并运行开发环境,在Eclipse中创建JSP,使用Tomcat服务器运行以及连接到Oracle数据库.

Eclipse和Tomcat一起玩得很好,我可以制作JSP等等.现在最困难的部分是在Mountain Lion上启动并运行Oracle数据库,并让Eclipse连接到它.

经过广泛的谷歌搜索,我发现了一些资源:

http://dimitrisli.wordpress.com/2012/08/08/how-to-install-oracle-database-on-mac-os-any-version/ http://barrymcgillin.blogspot.com/2011/12/使用Oracle的开发者-天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

注意:上述所有三个教程都使用较旧版本的VM,它具有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到我的VM : ssh -p 2222 oracle@localhost. 我在虚拟机中获得终端,它给了我在VirtualBox中首次启动虚拟机时获得的欢迎消息.此外,我可以ping localhost或127.0.0.1,它响应变量但短滞后.

基于此,我只能假设我的VM正在工作,并且我的端口转发(在我链接到的所有3个教程中都已布局)处于良好状态.

现在,我希望将Eclipse连接到VM中的Oracle数据库.如果您查看第一个教程,dimitrisli会使用指向VM的数据源设置IntelliJ.我想在Eclipse中做同样的事情.

我是Eclipse的新手,所以我四处寻找如何做到这一点,我想出了:

1)制作新的数据库驱动程序.

我在这里从Oracle下载了JDBC for Oracle Database 12c,JDK 7 .我把.jar文件粘贴在我的Documents文件夹中(如果这是错误的).在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:
Run Code Online (Sandbox Code Playgroud)

我尝试使用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
Run Code Online (Sandbox Code Playgroud)

当我单击"测试连接"时,它会挂起一段时间,然后我会收到"Ping失败!" 错误,详细信息:

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
Run Code Online (Sandbox Code Playgroud)

不幸的是,作为Java和Eclipse以及Oracle DB的新手,我不太清楚如何处理这个问题,而且我一直在试图确定可能出错的几个小时.我希望有这方面经验的人可以指出我正确的方向.

(哦,我不是一个没有经验的开发人员 - 对这些工具不熟悉.)

谢谢!

Mat*_* Mc 7

经过大约6或7个小时的浪费,我解决了我的问题.

感谢这篇文章: Virtualbox从port到Host的"port forward"

特别是来自@Nicholas的评论让我意识到我已经停用了我的Mac防火墙,而不是客户操作系统中的防火墙.关闭它使一切都突然发挥作用.

我认为客户操作系统防火墙的默认配置确实允许端口2222上的SSH,因为即使防火墙就位也能正常工作,这误导了我认为我的数据库驱动程序或连接有问题.

希望这将有利于后代.


编辑:

正如@HarpreetDawar所提到的,访问数据库的正确连接字符串是:

jdbc:oracle:thin:@localhost:1521/PDB1
Run Code Online (Sandbox Code Playgroud)

我正在使用的那个,:orcl而不是/PDB1,连接到"容器数据库".我不完全了解Oracle 12c和"可插拔数据库"实现,但粗略的想法是,您可以在一个数据库中拥有多个数据库,并且可以通过插入/拔出它们来打开和关闭它们.因此,"PDB1",可插拔数据库1.

如果你连接到Container,你会发现你无法创建一个新的User/Schema,而不用"C##"作为前缀,这有点尴尬.那是因为Container不打算用作普通的DB.您连接到Container以插入/拔出可插拔dbs(毫无疑问,其他东西).

因此,如果要连接到Container,请在连接字符串中使用冒号和"SID"(VM中的orcl),如果要连接到Pluggable,请使用正斜杠和"服务名称"(连接字符串中的VM中的PDB1.

无论如何,这是我解决原始问题后学到的额外数据.


还有一件事!关于端口转发的说明.

假设你现在已经启动并运行了你的虚拟机,你可以正确连接到你的Oracle数据库等等.但是你有一个想和你一起使用数据库的朋友?嗯,这很容易.他应该使用相同的连接字符串,使用您的IP地址而不是localhost,并且您在VirtualBox中设置的端口转发应该将他的连接(使用端口1521)直接发送到您的VM.对?

好吧,如果你将Port Forwarding设置为From: 127.0.0.1,它将无法工作,因为你的好友的连接是你的外部IP地址.因此,请从外部IP地址向VM添加其他端口转发设置.然后它会很棒!

-Matt

  • 嗨,我是你引用的第一个链接的作者.对于我过时的文章感到抱歉,我当时最初是为11gR2写的.我今天更新了它,包括12cR1所需的所有细节:http://dimitrisli.wordpress.com/2012/08/08/how-to-install-oracle-database-on-mac-os-any-version/ (2认同)