通过本地名-服务名连接数据库的解析

注意:本文内容基本无sqlnet.ora的情况。关于sqlnet.ora,详见:监听中sqlnet.ora的作用

一.监听涉及的几个文件示例:

1.本机上的/etc/hosts文件

[oracle@racdg ~]$ cat /etc/hosts
127.0.0.1       localhost.localdomain localhost
::1             localhost6.localdomain6 localhost6

192.168.1.211   racdg   racdg.bys.com

/etc/hosts文件中的格式是:IP----主机名.域名,比如 localhost.localdomain-----主机名--也叫主机名别名

这个文件的作用就是DNS的简化版,做域名与IP的转换的。
比如这个文档里,使用ping来测试,ping 192.168.1.211或 racdg 或racdg.bys.com这三者之一都将被定位到192.168.1.211

2.监听状态

[oracle@racdg ~]$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 15-AUG-2013 14:43:28
Copyright (c) 1991, 2009, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=racdg.bys.com)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date                14-AUG-2013 17:55:32
Uptime                    0 days 20 hr. 47 min. 56 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
Listener Log File         /u01/diag/tnslsnr/racdg/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL= tcp)(HOST= racdg)(PORT= 1521)))
Services Summary...
Service "racdg" has 2 instance(s).
   Instance "racdg", status READY, has 1 handler(s) for this service...

从这里可以看到,监听使用TCP协议正常运行。

在racdg主机的1521端口,服务名叫racdg,racdg这个服务包含一个实例叫racdg。

这一点从监听配置文件中也可以得到验证。

3.监听配置文件:

[oracle@racdg admin]$ cat listener.ora
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = racdg.bys.com)(PORT = 1521))
    )
  )

4.tnsnames.ora文件内容:

[oracle@racdg admin]$ cat tnsnames.ora
racdg =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = racdg)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = racdg)
    )
  )

这个文件里定义了一个racdg的名,指向的是racdg主机的TCP协议的1521端口,在最下面语句还定义了服务名叫racdg。
这里还可以再写入一个字段,来指定instance名,比如用在RAC环境时。----这里我未使用。
关于(SERVER = DEDICATED): 这里是以DEDICATED 专用模式连接 racdg实例。 ----不写此字段也可以正常连接到数据库
写上 (SERVER = SHARED) 则是使用共享服务器模式,但是这时服务器的shared_server_process需要打开,要不然会出错连不上oracle。
要是这段放空没写,那么系统会根据服务器模式自动调节,不过根据实测结果,就算服务器是定义成共享服务器模式,shared_server_process没打开的情况下,在v$session中查到的连接依然是SERVER = DEDICATED。
在数据库启动的时候,如果没有指定shared_servers,但是设置了dispatchers,那么ORACLE就认为启动了shared server ,并且设置shared_servers为1.
在数据库启动的时候,没有设置shared_servers,没有设置dispatchers,即使以后修改了dispatchers,也不能启动shared server,必须从新启动数据库。
另外,Background process ,以及通过本地连接进来的,只能是DEDICATED .比如说sqlplus user/pass形式。
如果数据库没有配置共享服务器,那么客户端只能以DEDICATED方式连接数据库.-- ----建议写上此字段


二、 监听器和使用服务名登陆的过程解析

下面的描述根据我的环境来讲的。

sqlplus sys/oraclesys@racdg as sysdba语句解析

所以要想通过sqlplus sys/oraclesys@racdg as sysdba这种使用@racdg 这个服务名来连接上数据库,这条语句需要做这些动作:
1.首先在本机的$ORACLE_HOME/network/admin/tnsnames.ora文件中找到racdg =  开头的这个字符段。
2.根据/tnsnames.ora文件中找到racdg =  开关的这个字符段中描述,连接到racdg主机的TCP协议1521端口。
这里如果tnsnames.ora文件中ADDRESS字段的HOST = 指定的是主机名,就需要用到 /etc/hosts中的IP与主机的对应关系来将主机名转换为IP。
因为主机间通过是通过IP。
3.从监听的lsnrctl status状态中可以查询到监听已经运行在在racdg主机的1521端口,服务名叫racdg,racdg这个服务包含一个实例叫racdg。
所以第2步时,根据tnsnames.ora文件中字符串的描述就可以连接到监听器的racdg服务的racdg实例。
4.连接到实例后SYS用户的话就用到了密码文件验证。如果是普通用户使用数据库认证-要求数据库打开状态。

监听器中各参数

1.监听器的配置文件位置$ORACLE_HOME/network/admin/listener.ora

这个文件可以使用NETCA来创建,也可以手动写入。文件内的格式之类这里不讨论。
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = racdg.bys.com)(PORT = 1521))
    )
  )
这里面监听器名称叫LISTENER(增加删除监听器时会用到,使用NETCA时能看到)
ADDRESS字段指定了主机地址 racdg.bys.com,协议TCP,端口1521

2.监听器启动时,会启动在ADDRESS字段指定的主机的相应协议的相关端口。

这时 HOST =  可以写上IP或主机名。如IP,则直接启动在相应IP的对应端口
如果是主机名,从lsnrctl status中可以看到未显式的转换为IP。
但是事实上是转换的,这个转换就用到了/etc/hosts中的IP与主机的对应关系。

三、下面是测试监听是否可用的一般排查步骤:

1.测试主机名是否能正常转换为IP--使用PING

[oracle@racdg ~]$ ping 192.168.1.211
PING 192.168.1.211 (192.168.1.211) 56(84) bytes of data.
64 bytes from 192.168.1.211: icmp_seq=1 ttl=64 time=0.186 ms
^C
--- 192.168.1.211 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.186/0.186/0.186/0.000 ms

[oracle@racdg ~]$ ping racdg
PING racdg (192.168.1.211) 56(84) bytes of data.
64 bytes from racdg (192.168.1.211): icmp_seq=1 ttl=64 time=0.107 ms
64 bytes from racdg (192.168.1.211): icmp_seq=2 ttl=64 time=0.139 ms
^C
--- racdg ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.107/0.123/0.139/0.016 ms
[oracle@racdg ~]$ ping racdg.bys.com
PING racdg (192.168.1.211) 56(84) bytes of data.
64 bytes from racdg (192.168.1.211): icmp_seq=1 ttl=64 time=0.192 ms
^C
--- racdg ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 1ms
rtt min/avg/max/mdev = 0.192/0.192/0.192/0.000 ms

2.在主机上做tnsping  这里tnsping后跟的是这个名称:tnsnames.ora文件中找到racdg =  开头即是:racdg

[oracle@racdg ~]$ t nsping racdg
TNS Ping Utility for Linux: Version 11.2.0.1.0 - Production on 15-AUG-2013 15:49:20
Copyright (c) 1997, 2009, Oracle.  All rights reserved.

Used parameter files:
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = racdg)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = racdg)))
OK (10 msec)

3.在上机配置完成后使用服务名做登陆测试

[oracle@racdg ~]$ sqlplus sys/oraclesys@racdg as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on Thu Aug 15 14:50:50 2013
Copyright (c) 1982, 2009, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SYS@racdg>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值