记一次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导致的命令无效

记一次操作:主机上Redis未配置profile导致的命令无效

记一次低级错误导致的mysql(111)

记一次错误的系统参数设置导致无法保持登录状态

记一次因硬盘故障导致的docker服务无法启动

记一次文件编码格式导致命令执行不成功的错误--服务 tomcat 不支持 chkconfig