背景介绍:在一台Win7 虚拟机中安装了Oracle 11g R2,虚拟机的真实IP地址是 192.168.199.125.
近日在使用JDBC thin 驱动连接一个虚拟机中的Oracle 11g数据库时,反复出现如下提示:
ora-12514:TNS:listener does not currently know of service requested in connect descriptor
首先去google了一下,各种说法都有,因为我这会对Oracle的细节还是门外汉,难以去深究个中复杂的原因,于是我在虚拟机中的SQL Dev 中做了一下小小的测试,如图:
因为我在远程使用JDBC连接是一样的问题,在这里我选择了自定义的JDBC 串,结果果然还是一样的,就是说,在本机适用真实IP连接都是不行的,这就奇怪了。于是在命令行里用netstat 看了一下,oracle listener只监听了127.0.0.1:1521, 难怪真实IP(192.168.199.125)连接不了,根本就没监听嘛。于是,又找了找修改监听地址的方法,找到一篇题为”oracle 11g ora-12514 监听”(http://hi.baidu.com/_tiebing/item/7e92b2d5f10b314ffb5768fc)的文章,搜索的结果大多类似,看了看,基本没啥用。
结合一些搜索的文章,决定自行摸索,首先在hosts中添加了一个主机名到真实IP的解析:
192.168.199.125 win7-orcl
单中搜寻了几圈,找到个工具,开始菜单-> Oracle -xxxx ->配置和移植工具->Net Manager :
打开之后,
找到“本地”下的“服务命名”,其中有 “orcl”, 我们在“地址配置”中看到原始安装只有一个地址,就是localhost,所以它才只监听了127.0.0.1,
我们点击下面的加号,添加一个地址,填写刚刚在hosts里面添加个主机名 “win7-orcl”,端口当然写典型值1521啦。
眼尖的同学可能会发现,还有一个监听程序,打开看看,
可以看到,这里已经有两个地址,一个是IPC协议的监听,不管他,看第二个,
哦,第二是还是本地监听,我们像刚刚一样,添加一个,点击“添加地址”,协议选择“TCP/IP”,主机名积雪填写“win7-orcl”,端口还是1521,
全部填好之后,点击“文件”下的保存网络配置。
下面打开系统“服务”找到“OracleOraDb11g_home1TNSListener”项,重启一下,
再查看一下端口监听情况:
恩,不错,已经自动在所有地址的 1521 端口监听了,再到SQL Dev 中测试一下,
不错, SQL Dev 成功连接到真实IP,怎么样,简单吧,快去试试吧。
其他参考:http://www.cnblogs.com/xing901022/p/3327857.html
原创文章, Bill, 2013-10-28