一、現狀記錄
[oracle@node1 ~]$ /sbin/ifconfig
eth1 Link encap:Ethernet HWaddr 00:25:90:04:AB:6B
inet addr:192.168.9.140 Bcast:192.168.15.255 Mask:255.255.248.0
inet6 addr: fe80::225:90ff:fe04:ab6b/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:23530402 errors:0 dropped:0 overruns:0 frame:0
TX packets:10959123 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:15308483748 (14.2 GiB) TX bytes:10087987532 (9.3 GiB)
--IP地址為192.168.9.140
[oracle@node1 ~]$ more /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 ecp-db localhost.localdomain localhost
192.168.9.140 node1.srtcloud.com
--域名node1.srtcloud.com對應ip192.168.9.140
[oracle@node1 ~]$ lsnrctl status
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=node1.srtcloud.com)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 10.2.0.5.0 - Production
Start Date 04-NOV-2011 09:08:51
Uptime 21 days 4 hr. 58 min. 45 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /opt/oracle/product/10.2.0/db_1/network/admin/listener.ora
Listener Log File /opt/oracle/product/10.2.0/db_1/network/log/listener.log
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=node1.srtcloud.com)(PORT=1521)))
Services Summary...
Service "ecp" has 2 instance(s).
Instance "ecp", status UNKNOWN, has 1 handler(s) for this service...
Instance "ecp", status READY, has 1 handler(s) for this service...
Service "ecpXDB" has 1 instance(s).
Instance "ecp", status READY, has 1 handler(s) for this service...
Service "ecp_XPT" has 1 instance(s).
Instance "ecp", status READY, has 1 handler(s) for this service...
Service "ora11g" has 2 instance(s).
Instance "ora11g", status UNKNOWN, has 1 handler(s) for this service...
Instance "ora11g", status READY, has 1 handler(s) for this service...
Service "ora11gXDB" has 1 instance(s).
Instance "ora11g", status READY, has 1 handler(s) for this service...
The command completed successfully
--說明:ora11g是oracle 11g,ecp是oracle 10g
--當前使用域名node1.srtcloud.com監聽
[oracle@node1 ~]$ more /opt/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora
# tnsnames.ora Network Configuration File: /opt/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
ECP =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = node1.srtcloud.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ecp)
)
)
ORA11G =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = node1.srtcloud.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ora11g)
)
)
--tns也透過域名訪問
[oracle@node1 ~]$ more /etc/resolv.conf
nameserver 211.155.235.201
nameserver 211.155.235.188
--當前有效的dns伺服器
[oracle@node1 ~]$ more /etc/nsswitch.conf |grep hosts:
hosts: files dns
--域名解析順序 |
二、資料庫正常工作分析
1、tns工作:客戶端透過tns訪問資料庫,tns配置的是域名訪問,所以需要解析,因為此刻解析的順序是先利用/etc/hosts解析,所以讀取hosts檔案,獲取到ip,然後訪問對應資料庫,和監聽接觸。
2、監聽工作:監聽的是域名,其實也是透過hosts解析成ip的
3、這裡能夠正常的工作,是因為hosts檔案解析了域名
三、模擬資料庫訪問延遲
[oracle@node1 ~]$ more /etc/nsswitch.conf |grep hosts:
hosts: dns files
--先使用dns伺服器解析,再使用hosts檔案
[oracle@node1 ~]$ more /etc/resolv.conf
nameserver 11.1.1.1
--無效的dns伺服器
[oracle@node1 ~]$ sqlplus chf/xifenfei@ora11g
SQL*Plus: Release 10.2.0.5.0 - Production on Fri Nov 25 14:44:55 2011
Copyright (c) 1982, 2010, Oracle. All Rights Reserved.
--會在這裡一個很長的時間等待
[oracle@node1 ~]$ lsnrctl status
LSNRCTL for Linux: Version 10.2.0.5.0 - Production on 25-NOV-2011 14:48:26
Copyright (c) 1991, 2010, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=node1.srtcloud.com)(PORT=1521)))
--也會一個長時間的等待
--問題原因:就是因為解析域名的時候,先去訪問dns伺服器,因為該ip非dns伺服器ip,所以會一直等待該ip超時,
--然後訪問hosts檔案獲取ip地址(這個就是為什麼我們登入或者檢視監聽狀態的時候,會出現如此長的時間的等待) |
其實因為dns延遲的現象有很多種,我這裡只是舉了一個最簡單,比較常見的例子,在處理因dns解析的監聽延遲的問題上,可以參考下面幾點:
1、如果非特殊情況,儘可能使用ip地址在監聽和tns中
2、如果是使用域名,請儘可能使用hosts解析,解析順序配置為files優先(因為dns伺服器有很多不確定,不可控因素)
3、如果一定要使用dns伺服器解析,請把穩定的dns伺服器配置在第一項,儘可能避免出現dns伺服器不可達或者不存在該域名的現象