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

    xiaoxiao2021-03-25  67

    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))) 。

     

    转载请注明原文地址: https://ju.6miu.com/read-35699.html

    最新回复(0)