您的位置:首页 > 数据库 > Oracle

Linux主机名配置与Oracle配置文件不相符,导致oracle数据库实例无法启动

2017-03-12 18:56 726 查看
Linux 主机名配置与Oracle配置文件不相符,导致oracle数据库实例无法启动(2011-1209-1052)
 

1. 启动监听服务

-- 进入监听服务管理 --

[oracle@test ~]$ lsnrctl

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 23-8月 -2011 19:14:22

Copyright (c) 1991, 2009, Oracle.  All rights reserved.

欢迎来到LSNRCTL, 请键入"help"以获得信息。

 

-- 查看监听服务状态  --

LSNRCTL> status

正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))

TNS-12541: TNS: 无监听程序

 TNS-12560: TNS: 协议适配器错误

  TNS-00511: 无监听程序

   Linux Error: 111: Connection refused

正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=DBSyncSrc.jtsec.com)(PORT=1521)))

TNS-12541: TNS: 无监听程序

 TNS-12560: TNS: 协议适配器错误

  TNS-00511: 无监听程序

   Linux Error: 111: Connection refused

 

--启动监听服务--

LSNRCTL> start

启动/u01/app/oracle/product/11.2.0/dbhome_1/bin/tnslsnr: 请稍候...

TNSLSNR for Linux: Version 11.2.0.1.0 - Production

系统参数文件为/u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora

写入/u01/app/oracle/diag/tnslsnr/test/listener/alert/log.xml的日志信息

监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))

监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.8.87)(PORT=1521)))

正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))

LISTENER 的 STATUS

------------------------

别名                      LISTENER

版本                      TNSLSNR for Linux: Version 11.2.0.1.0 - Production

启动日期                  23-8月 -2011 19:14:31

正常运行时间              0 天 0 小时 0 分 3 秒

跟踪级别                  off

安全性                    ON: Local OS Authentication

SNMP                      OFF

监听程序参数文件          /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora

监听程序日志文件          /u01/app/oracle/diag/tnslsnr/test/listener/alert/log.xml

监听端点概要...

  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.8.87)(PORT=1521)))

监听程序不支持服务

命令执行成功

 

--查看监听服务状态--

LSNRCTL> status

正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))

LISTENER 的 STATUS

------------------------

别名                      LISTENER

版本                      TNSLSNR for Linux: Version 11.2.0.1.0 - Production

启动日期                  23-8月 -2011 19:14:31

正常运行时间              0 天 0 小时 0 分 6 秒

跟踪级别                  off

安全性                    ON: Local OS Authentication

SNMP                      OFF

监听程序参数文件          /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora

监听程序日志文件          /u01/app/oracle/diag/tnslsnr/test/listener/alert/log.xml

监听端点概要...

  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.8.87)(PORT=1521)))

监听程序不支持服务

命令执行成功

 

2. 进入数据库,启动数据库实例对象

--使用sys帐户,以dba角色连接Oracle数据库  --

[oracle@test ~]$ sqlplus / as sysdba;

SQL*Plus: Release 11.2.0.1.0 Production on 星期二 8月 23 19:15:41 2011

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

已连接到空闲例程。

 

-- 显示当前用户 --

SQL> show user

USER 为 "SYS"

 

-- 启动数据库中的实例对象 --

SQL> startup

ORA-00119: invalid specification for system parameter LOCAL_LISTENER

ORA-00130: invalid listener address '(ADDRESS=(PROTOCOL=TCP)(HOST=test)(PORT=1521))'

SQL>

如上面的操作所示,在成功启动监听服务后,连接到Oracle数据库,启动数据库实例时发生错误,提示:

ORA-00119: invalid specification for system parameter LOCAL_LISTENER

无效的说明,对于系统参数LOCAL_LISTENER

ORA-00130: invalid listener address '(ADDRESS=(PROTOCOL=TCP)(HOST=test)(PORT=1521))'

无效的监听地址(ADDRESS=(PROTOCOL=TCP)(HOST=test)(PORT=1521))

其中HOST的值为test,即代表这个无效的监听地址对应的主机名为test

 

首先查看/etc/hosts文件

# Do not remove the following line, or various programs

# that require network functionality will fail.

127.0.0.1       localhost.localdomain   localhost

192.168.8.87    DBSyncSrc.jtsec.com     DBSyncSrc

#:1     localhost6.localdomain6 localhost6

#<IP-address> <fully-qualified-machine-name> <machine-name>

其中两个IP地址对应的主机名为localhost和DBSyncSrc,并无test这一项

 

而使用命令hostname -i查询当前主机名的IP时,发现提示“未知主机”
[root@test oracle]# hostname -i

hostname: 未知的主机

 

观察lsnrctl start命令启动监听时的回显信息,监听概要的提示内容为:

监听端点概要...

  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.8.87)(PORT=1521)))

可以看到HOST的值并不是一个具体的名称,而是一个IP(192.168.8.87),与上面startup数据库实例时错误信息提示的HOST的值(test)并不一致。

之后的提示信息为两条:

监听程序不支持服务

命令执行成功

 

监听程序不支持服务:

出现这条回显的原因是,使用动态注册的方式来对数据库实例的监听服务进行注册,此时,与相关监听相对应的数据库实例若还未启动,查询该条监听服务的状态信息则会提示“监听程序不支持服务”。

 

命令执行成功:

证明动态注册的监听服务已经成功开启了。

那么,监听服务既然已经成功开启,为什么有在启动数据库实例发生了错误,根据监听概要的回显信息和数据库实例startup时的回显信息,进行对比观察可以发现:

监听端点概要...

  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.8.87)(PORT=1521)))



ORA-00119: invalid specification for system parameter LOCAL_LISTENER

ORA-00130: invalid listener address '(ADDRESS=(PROTOCOL=TCP)(HOST=test)(PORT=1521))'

他们在各自提示信息中给出的HOST的值并不一致,监听服务中提示的是HOST=192.168.8.87,数据库实例启动时提示的是HOST=test,那么可以理解为(个人),监听服务虽然启动成功了,但是它监听的是192.168.8.87这个地址,可是数据库实例启动时根据它对应的host名称(test)来找属于它监听服务,而test这个名称并没有在/etc/hosts中配置,所以无法通过test映射到192.168.8.87这个IP地址,也就无法成功找到这个地址上的监听,所以提示test这个监听地址是无效的。

 

问题原因:

Oracle监听服务及数据库实例服务启动时,涉及到三个配置文件listenner.ora、/etc/hosts、/etc/sysconfig/network,如果他们中关于主机名的配置不一致,则可能发生上述问题。解决思路很简单,就是使三个文件中关于主机名的配置一致就可以了。

 

那么下面给出两个操作方式:

方法A:修改network中的主机名,与listenner.ora、hosts中保持的一致(后面两个配置文件中的主机名已经相同了)

修改/etc/sysconfig/network配置文件

配置文件/etc/sysconfig/network

NETWORKING=yes

NETWORKING_IPV6=no

HOSTNAME=test

修改主机名HOSTNAME参数,将其改为与hosts(/etc/hosts)文件中配置的名称一致(localhost或DBSyncSrc)

将HOSTNAME改为

HOSTNAME=DBSyncSrc

或                   

HOSTNAME=localhost(不知这个是否可以?)

 

方法B:修改hosts、listener.ora中的主机名,与network中的保持一致。

首先,修改/etc/hosts中的主机名称,使之与/etc/sysconfig/network中的主机名一致

192.168.8.87    test.jtsec.com     test

 

然后,修改listener.ora

/u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora

# listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora

# Generated by Oracle configuration tools.

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

      (ADDRESS = (PROTOCOL = TCP)(HOST = DBSyncSrc.jtsec.com)(PORT = 1521))

    )

  )

ADR_BASE_LISTENER = /u01/app/oracle

把HOST = DBSyncSrc.jtsec.com 值改为 test,使其于 network 和 hosts 中配置的一致。

 

结论:不论改动这三个文件中的哪几个文件,只要使他们三个文件中的主机名相一致就可以了!

 

总结与思考:由上面的分析可以看出来,监听服务在启动的时候,它所参照的配置文件为listenner.ora,而数据库实例在启动时,所参照的文件为系统文件/etc/sysconfig/network。

 

若三个配置文件(listenner.ora、/etc/hosts、/etc/sysconfig/network)中,关于主机名参数的配置一致,则监听服务启动时提示信息应为:

监听端点概要...

  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=DBSyncSrc.jtsec.com)(PORT=1521)))

此时,HOST的值为listener.ora中host的值,也于hosts配置的全限定域名(Fully Qualified Domain Name)FQDN的值 DBSyncSrc.jtsec.com 一致。

 

而出错中提示的信息为:

监听端点概要...

  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.8.87)(PORT=1521)))

 

其中,一个是HOST=DBSyncSrc.jtsec.com(正确),一个是HOST=192.168.8.87(错误),为什么会是这样,我们来试着分析一下这个过程(个人猜测):

 

三个配置文件读取调用顺序 listenner.ora -->
/etc/hosts  -->
/etc/sysconfig/network

 

调用lsnrctl start命令

-》

读取listenner.ora配置信息

-》

找到HOST值DBSyncSrc.jtsec.com

-》

读取/etc/hosts配置信息

-》

找到DBSyncSrc.jtsec.com相关配置条目

192.168.8.87    DBSyncSrc.jtsec.com     DBSyncSrc

-》

根据listener.ora中HOST值DBSyncSrc.jtsec.com,在hosts中找到对应的主机名DBSyncSrc

-》

读取/etc/sysconfig/network配置信息

-》

找到HOSTNAME=test

-》

发现HOSTNAME值不一致,放弃以主机名作为提供监听服务的依据,改用listenner.ora中HOST值与hosts中对应条目的IP的值 192.168.8.87 作为依据。

-》

根据上面的值给出回显信息

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.8.87)(PORT=1521)))



 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐