记一次centos7主机名变bogon导致ORACLE无法远程访问的经历(原创)
Posted zzblydia
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记一次centos7主机名变bogon导致ORACLE无法远程访问的经历(原创)相关的知识,希望对你有一定的参考价值。
1.背景
工作的临时环境是虚拟机vm11搭的centos7 服务器,在上面装了 oracle11g (11.2.0.1.0)正常访问并保存为快照.centos7 ip192.168.44.55,网关192.168.44.2
由于笔记本经常在公司和家之间奔波,连接内网的网关不一样,所以使用虚拟机设置 NAT模式使centos7供外部访问.这样centos7有自己的网关和ip,不用随宿主机内网网关改变.
2. 现象:
有天恢复快照后, ssh登陆centos7 , 用oracle用户正常启用oracle监听和DB.发现能通过ssh本地连接oracle,windows端连接则显示错误,ORA-12541:TNS:无监听程序.
这时发现终端变为[root@bogon ~]# , 遂觉得是centos主机名导致的oracle监听出了问题.所以无法远程连接
3.此时环境的各个数据:
[root@bogon ~]# hostname bogon [root@bogon ~]# cat /etc/sysconfig/network # Created by anaconda [root@bogon ~]# cat /etc/hosts #解决办法2)在本文件添加 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@bogon ~]# ipcalc -h 192.168.44.55 HOSTNAME=bogon [root@bogon ~]# nslookup 192.168.44.55 Server: 8.8.8.8 Address: 8.8.8.8#53 55.44.168.192.in-addr.arpa name = bogon. [root@bogon ~]# cat /etc/resolv.conf # Generated by NetworkManager nameserver 8.8.8.8 nameserver 114.114.114.114 [root@bogon ~]#
[root@bogon ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.44.55 netmask 255.255.255.0 broadcast 192.168.44.255
inet6 fe80::4dd0:e56c:9c5c:2b8b prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:e2:06:ab txqueuelen 1000 (Ethernet)
RX packets 173 bytes 19556 (19.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 183 bytes 35514 (34.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@bogon ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="2612ee5b-b0ed-4123-b059-3703b14d1c76"
DEVICE="ens33"
ONBOOT="yes"
IPADDR="192.168.44.55"
PREFIX="24"
GATEWAY="192.168.44.2"
DNS1="8.8.8.8" #解决办法1)去掉这行
DNS2="114.114.114.114"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
IPV6_PRIVACY="no"
[root@bogon ~]#
[oracle@bogon admin]$ cat listener.ora # listener.ora Network Configuration File: /data/oracle/product/11.2.0/db_1/network/admin/listener.ora # Generated by Oracle configuration tools. LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) ) ) ADR_BASE_LISTENER = /data/oracle [oracle@bogon admin]$ cat tnsnames.ora # tnsnames.ora Network Configuration File: /data/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora # Generated by Oracle configuration tools. ORACLE = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = oracle) ) ) [oracle@bogon admin]$
4.原因分析(参考非原创):
还有:
即:
1)主机初始化,若主机名为localhost或 localhost.localdomain会使操作系统执行DNS反向解析,若dns服务器不能过滤bogon,则导致 hostname为bogon.
2)如果resolv.conf中配置了search localdomain,那么此处得到的主机名则优先于hosts和network文件中的配置,使主机名为bogon.
5.总结:
1)解决办法1(推荐):更改DNS域名服务器.
由nslookup 192.168.44.55的返回信息知是8.8.8.8这个dns服务器负责解析.故猜想这个域名服务器应该不会过滤bogon.
遂删除了8.8.8.8(这里指在/etc/sysconfig/network-scripts/ifcfg-ens33 删除 或者图形化界面--系统配置--网络里面删除DNS)并重启网卡 service network restart .
/etc/resolv.conf 不用改,由参考文献2知 , 更改了网卡配置并重启后, resolv.conf会自动更新.
重启终端,发现变为[root@localhost ~]#. 执行hostname命令发现主机名变为localhost.localdomain.
此时启动oracle监听和DB.windows端远程访问正常.
2)解决办法2:添加主机名和当前ip的对应关系
印象里在进行dns解析之前,会先去/etc/hosts里寻找主机名和ip的关系.如果没有找到,才会进行dns解析.
修改文件/etc/hosts,添加了当前服务器的ip和期望的主机名.即添加了一行 192.168.44.55 localhost.localdomain.
重启服务器后,发现主机名变为 localhost.localdomain.,此时oracle监听和DB远程正常访问.
(PS:此时并没有更改/etc/sysconfig/network.实验发现 单独修改/etc/sysconfig/network文件添加HOSTNAME=localhost.localdomain 重启机器后发现主机名仍未bogon.)
3)试错:
开始时,我采用解决办法2 ,即/etc/hosts添加了 一行192.168.44.55 locahost .因为我此时不知道主机名变为bogo之前是什么.只记得原终端名显示root@localhost.添加后,重启机器,
发现终端为 root@localhost ,执行hostname 发现主机名为localhost. 这时,主机名与oracle listener.ora中的HOST保持一致,启用oracle监听,如下报错:
TNS-12537: TNS:connection closed
TNS-12560: TNS:protocol adapter error
TNS-00507: Connection closed
Linux Error: 29: Illegal seek
查询参考资料3发现,是主机名与监听名字不一致,导致oracle启用监听失败.然后,采用解决办法2时,主机名与oracle的tnsname.ora保持一致,oracle监听和DB正常启动,远程访问正常.
6.############参考文献如下 ,感谢作者#############
1) http://blog.csdn.net/weiwan721/article/details/48463371
2) http://www.cnblogs.com/armo/p/6739472.html
3) http://www.cnblogs.com/xing901022/p/3895719.html
以上是关于记一次centos7主机名变bogon导致ORACLE无法远程访问的经历(原创)的主要内容,如果未能解决你的问题,请参考以下文章
记一次操作:主机上Redis未配置profile导致的命令无效