Linux 链接 Oracle 缓慢问题

在重构过程当中,生产环境出现了访问Oracle缓慢的状况,通过排查,最终发现并解决了问题。sql

问题解决
将Liunx服务器的Hostname修改成localhost。数据库

扩展阅读
以下所示,服务器/etc/hosts 与/etc/sysconfig/network的原始配置信息以下:bash

[root@test ~]# more /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
#::1            localhost6.localdomain6 localhost6
127.0.0.1       localhost.localdomain localhost
192.168.27.134  test test
 
[root@test ~]# more /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=test
GATEWAY=192.168.27.1
[root@test ~]#

 

首先假设有个需求,须要修改hostname,使之变成test.edution.com(加上域名部分), 那么此时是否有问题呢?咱们先修改/etc/sysconfig/network下的HOSTNAME,而后重启服务器:服务器

[root@test ~]# more  /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=test.eduction.com
GATEWAY=192.168.27.1
  
[root@test ~]# vi /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
#::1            localhost6.localdomain6 localhost6
127.0.0.1       localhost.localdomain localhost
192.168.27.134  test test

而后咱们重启数据库实例后,并无任何问题,可是重启监听的时候遇到下面错误:oracle

[oracle@test ~]$ sqlplus / as sysdba
  
SQL*Plus: Release 10.2.0.5.0 - Production on Sat Jun 18 16:42:21 2016
  
Copyright (c) 1982, 2010, Oracle.  All Rights Reserved.
  
Connected to an idle instance.
  
SQL> startup
ORACLE instance started.
  
Total System Global Area 1509949440 bytes
Fixed Size                  2096472 bytes
Variable Size            1392509608 bytes
Database Buffers           67108864 bytes
Redo Buffers               48234496 bytes
Database mounted.
Database opened.
SQL> exit
Disconnected from Oracle Database 10g Release 10.2.0.5.0 - 64bit Production
[oracle@test ~]$ lsnrctl start
  
LSNRCTL for Linux: Version 10.2.0.5.0 - Production on 18-JUN-2016 16:42:47
  
Copyright (c) 1991, 2010, Oracle.  All rights reserved.
  
Starting /u01/app/oracle/product/10.2.0/db_1/bin/tnslsnr: please wait...
  
TNSLSNR for Linux: Version 10.2.0.5.0 - Production
Log messages written to /u01/app/oracle/product/10.2.0/db_1/network/log/listener.log
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=test.eduction.com)(PORT=1521)))
  
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
TNS-12535: TNS:operation timed out
 TNS-12560: TNS:protocol adapter error
  TNS-00505: Operation timed out
   Linux Error: 110: Connection timed out
[oracle@test ~]$

出现这个问题时,必须修改/etc/hosts下主机名的部分,使之与/etc/sysconfig/network下的HOSTNAME一致,上面错误就能解决:app

[root@test ~]# more /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=test.eduction.com
GATEWAY=192.168.27.1
[root@test ~]# more /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
#::1 localhost6.localdomain6 localhost6
127.0.0.1 localhost.localdomain localhost
192.168.27.134 test.eduction.com test 
[root@test ~]#

因为这里测试,我修改了域名,若是服务器真实域名部分跟/etc/resolv.conf一致,那么数据库实例启动过程当中,监控告警日志,就会发现告警日志里面会出现大量ORA-07445 & ORA-00108错误。dom

修改/etc/sysconfig/network下的hostname并使之生效,以下所示:async

[oracle@kerry ~]$ more /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
#::1            localhost6.localdomain6 localhost6
127.0.0.1       localhost.localdomain localhost
192.168.27.134  test.eduction.com  test
[oracle@kerry ~]$ more /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=kerry.eduction.com
GATEWAY=192.168.27.1

数据库实例启动并无任何问题,可是监听启动出现上面同样的错误。 若是域名使用真实的域名,则会遇到另一种状况,告警日志里面也会出现下面错误:tcp

Errors in file /u01/app/oracle/admin/SCM2/bdump/scm2_ora_4494.trc:
 
ORA-07445: exception encountered: core dump [kslgetl()+120] [SIGSEGV] [Address not mapped to object] [0x000000210] [] []
ORA-00108: failed to set up dispatcher to accept connection asynchronously

关于这个,能够参考官方文档ORA-07445: [kslgetl()+80] Followed by ORA-108: failed to set up dispatcher to accept connection asynchronously (文档 ID 1298804.1)。
若是屏蔽/etc/hosts下的localhost部分,以下所示,此时有可能会影响监听:测试

[root@kerry ~]# more /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
#::1            localhost6.localdomain6 localhost6
#127.0.0.1       localhost.localdomain localhost
192.168.27.134  kerry.eduction.com  kerry
[root@kerry ~]#

[oracle@kerry ~]$ lsnrctl start
  
LSNRCTL for Linux: Version 10.2.0.5.0 - Production on 18-JUN-2016 17:45:37
  
Copyright (c) 1991, 2010, Oracle.  All rights reserved.
  
Starting /u01/app/oracle/product/10.2.0/db_1/bin/tnslsnr: please wait...
  
TNSLSNR for Linux: Version 10.2.0.5.0 - Production
Log messages written to /u01/app/oracle/product/10.2.0/db_1/network/log/listener.log
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=kerry.eduction.com)(PORT=1521)))
  
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
TNS-12547: TNS:lost contact
TNS-12560: TNS:protocol adapter error
TNS-00517: Lost contact
Linux Error: 104: Connection reset by peer

这是由于我没有在$ORACLE_HOME/network/admin下配置listener.ora,因此在注释或删除了/etc/hosts下localhost部分后就会出现这个错误,由于在没有listener.ora下的状况下,都会使用默认值(以下官方文档描述),监听进程会使用本机配置127.0.0.1注册监听服务,因此会出现上面错误信息,官方文档关于这方面的描述以下所示:

Oracle Net Listener Configuration Overview
Note:
Oracle Database 10g and later databases require a version 10 or later listener. Earlier versions of the listener are not supported for use with Oracle Database 10g and later databases. However, you can use a version 10 listener with previous versions of Oracle Database.
A listener is configured with one or more listening protocol addresses, information about supported services, and parameters that control its runtime behavior. The listener configuration is stored in a configuration file named listener.ora.
Because all of the configuration parameters have default values, it is possible to start and use a listener with no configuration. This default listener has a name of LISTENER, supports no services on startup, and listens on the following TCP/IP protocol address:
(ADDRESS=(PROTOCOL=tcp)(HOST=host_name)(PORT=1521))
Supported services, that is, the services to which the listener forwards client requests, can be configured in the listener.ora file or this information can be dynamically registered with the listener. This dynamic registration feature is called service registration. The registration is performed by the PMON process—an instance background process—of each database instance that has the necessary configuration in the database initialization parameter file. Dynamic service registration does not require any configuration in the listener.ora file.

解决方案两种:
1)在$ORACLE_HOME/network/admin/下配置listener.ora文件。则屏蔽或删除/etc/hosts下127.0.0.1后,监听不会有任何问题。
2)在配置文件/etc/hosts下增长localhost(红色部分所示)也能解决这个问题。

[root@kerry ~]# more /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
#::1 localhost6.localdomain6 localhost6
#127.0.0.1 localhost.localdomain localhost
192.168.27.134 kerry.eduction.com kerry localhost
[root@kerry ~]#

具体能够参考官方文档Starting TNS Listener or LSNRCTL Start Yields TNS-12541, Linux Error: 111: Connection Refused (文档 ID 343295.1)。

另外,咱们这里也忽略了lisnter.ora里面的配置,若是该配置文件使用的是hostname而不是IP,那么也会遇到一些问题。

相关文章
相关标签/搜索