问题说明
之前在虚拟机里的CentOs上安装了Oracle 11g ,由于一直采用的是物理机win 10 系统中安装sql developer直接连接Oracle的方式进行操作,所以虚拟机采用的是NAT方式的静态IP。今天突然想用另一台macbook中的sql developer 连接Oracle,于是就将虚拟机的联网方式改为了Bridge(桥接),并且重新配置了静态IP,启动Oracle监听后,sql develoer 连接时出现了Oracle Listener refused the connection with the following error:ORA-12505,TNS:listener does not currently know of SID given in connect descriptor的错误。
分析
参考网上的说法,这个问题是数据库监听的配置文件中sid不正确,进入数据库安装目录下,找到tnsnames.ora文件,例如我的路径是/home/Oracle_11g/product/11.2.0/dbhome_1/network/admin/tnsnames.ora。
[Oracle@dpc admin]$ cat tnsnames.ora
# tnsnames.ora Network Configuration File: /home/Oracle_11g/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
CHENDONGPO =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dpc)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
发现SERVICE_NAME = orcl 没有问题,但是发现了(HOST = dpc)这里(dpc为我的主机名),于是想起之前安装Oracle时曾经在hosts文件中增加了dpc到原来的ip的映射。于是找到了解决方法。
解决
root 用户下打开/etc/hosts文件,将原来的dpc指向的地址更改为新的ip,例如:
192.168.1.198 dpc
一般情况下hosts文件更改后是立即生效的,可以用 hostname -i 命令来查看用户名指向的ip地址是否改变,如果未生效,可以重启服务器使hosts生效。