listener.ora与 tnsnames.ora

讲解下listener.ora与 tnsnames.ora

写过一篇NET的 不过实验完后 复制记录 时 顺序有问题,所以重新整理实验记录一次

服务器listener
C:/>sqlplus xh/a831115

SQL*Plus: Release 10.1.0.2.0 - Production on 星期三 8月 12 13:17:32 2009

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


Connected to:
Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Production
With the Partitioning, OLAP and Data Mining options
这种是IPC 连接(进程间连接) client与SERVER 在一台机器上

SQL> connxh/a831115@orcl;
已连接。

这种TCP IP连接   CLIENT 用TNSNAMES.ora ,server用 listener.ora

基本理论:
基本的TCP IP 过程是  CLIENT 发请求 SERVER 的LISTENER 进程 监听请求 然后LISTENER 通过PMON 注册到LISTENER的信息检查下,然后LISTENER 衍生出一个SERVER HANDLER 新

进程(理论上为LISTENER进程的子进程)并且将连接描述符也交给这个子进程,这样子进程 与CLIENT 通信 沿用LISTENER的IP&PORT ,CLIENT 属于一次TCP/IP连接,若OS 不允许

直接传送(WIN NT上就如此)CLIENT 请求 LISTENER ,LISTENER 衍生出SERVER HANDLER ,LISTENER  与衍生出的新进程IPC连接
新进程将PORT 告诉LISTENER ,LISTENER将PORT 告诉 CLIENT,CLIENT 用新PORT 与 新进程连接(IP 还是用LISTENER的 因为只发了PORT) 这样CLIENT 就是2次TCP连接,另外若

是SHARED MODE那么 LISTENER不会衍生SERVER HANDLER 而是提前配置好DISPATCHER进程 并且注册到LISTENER中

 


服务器端的 LISTENER.ORA
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)~~~~~~~~为外部存储过程配置的本地监听
      (ORACLE_HOME = E:/oracle/product/10.2.0/db_1)
      (PROGRAM = extproc)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 6688-621)(PORT = 1521))
    )
  )

C:/>lsnrctl

LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 07-9月 -2009 15
0

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

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

LSNRCTL> status

服务 "PLSExtProc" 包含 1 个例程。
  例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "orcl" 包含 1 个例程。
  例程 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
服务 "orcl_XPT" 包含 1 个例程。
  例程 "orcl", 状态 READY, 包含此服务的 1 个处理程序...~~~~~~~~~~~~可以看到为 动态注册
命令执行成功                                                     动态ready,静态unknown


情况一先启动 DATABASE 后启动 LISTENER

LSNRCTL> stop (关闭lsnrctl)


SQL> connxh/a831115@orcl
ERROR:
ORA-12541: TNS: 无监听程序


警告: 您不再连接到 ORACLE。
LSNRCTL> start
启动tnslsnr: 请稍候...
服务 "PLSExtProc" 包含 1 个例程。
  例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功

LSNRCTL> STATUS
服务 "PLSExtProc" 包含 1 个例程。
  例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功
SQL> connxh/a831115@orcl
ERROR:
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务


此时我们可以等待 PMON进程60秒向LISTENER 注册信息 也可以 手动注册
SQL> alter system register;

系统已更改
LSNRCTL> STATUS 
服务摘要..
服务 "PLSExtProc" 包含 1 个例程。
  例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序.
服务 "orcl" 包含 1 个例程。
  例程 "orcl", 状态 READY, 包含此服务的 1 个处理程序...~~~~~~~~~~~~~~~~~~~手动注册信息后
服务 "orcl_XPT" 包含 1 个例程。~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~READY动态注册
  例程 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
命令执行成功

SQL> connxh/a831115@orcl
已连接。


这样的情况是由于 是动态注册导致,listener.ora中没有服务的信息(要等 60秒PMON 才会向LISTENER注册)
下面针对这种情况 配置静态注册(静态配置 就是将信息明确的写到 LISTENER。ORA中)


SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = E:/oracle/product/10.2.0/Db_1)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = orcl)
      (ORACLE_HOME = E:/oracle/product/10.2.0/Db_1)
      (SID_NAME = orcl)
    )
  )

 

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
    )
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 6688-621)(PORT = 1521))~~~~~~~~~~~~~~~~~~~~~把信息加到LISTENER.ORA中
    )
  )                   协议,主机名字(IP也行) ,端口号

LSNRCTL>STop
LSNRCTL>START(造成DATABASE 先启动LSNRCTL 后启动)
LSNRCTL>STATUS
服务摘要..
服务 "PLSExtProc" 包含 1 个例程。
  例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "orcl" 包含 1 个例程。
  例程 "orcl", 状态 UNKNOWN, 包含此服务的 1 个处理程序...~~~~~~~~~~~~~~~~~~~~~~~~静态注册(UNKNOW) 此时可以看到没有动态注册(READY)
命令执行成功
SQL> connxh/a831115@orcl(通过静态注册连接)
已连接。
LSNRCTL>STATUS
服务 "PLSExtProc" 包含 1 个例程。
  例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "orcl" 包含 2 个例程。
  例程 "orcl", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
  例程 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
服务 "orcl_XPT" 包含 1 个例程。
  例程 "orcl", 状态 READY, 包含此服务的 1 个处理程序...~~~~~~~~~~~~~~~过了会看 PMON想LSNRCTL 动态注册了

 

动态注册的一个特点就是不需要LISTENER.ORA文件
默认情况PMON 向LSNRCTL 注册TCP/IP协议,PORT 为1521*********当然可以改端口号 需要下面这个参数 ,对此将有单独的实验

SQL> show parameter local

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
local_listener                       string

SQL> host move E:/oracle/product/10.2.0/Db_1/NETWORK/ADMIN/listener.ora  d:/listene    ~~~~~~~~~~~~~~~移走
r.ora


LSNRCTL> stop
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC)))
命令执行成功
LSNRCTL> start

命令执行成功
LSNRCTL> status
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC)))
TNS-12541: TNS: 无监听程序
 TNS-12560: TNS: 协议适配器错误
  TNS-00511: 无监听程序
   32-bit Windows Error: 2: No such file or directory
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=6688-621)(PORT=1521)))
LISTENER 的 STATUS
------------------------
别名                      LISTENER
版本                      TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Producti
on
启动日期                  07-9月 -2009 16:31:59
正常运行时间              0 天 0 小时 0 分 6 秒
跟踪级别                  off
安全性                    ON: Local OS Authentication
SNMP                      OFF
监听程序日志文件          E:/oracle/product/10.2.0/db_1/network/log/listener.log
监听端点概要...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=6688-621)(PORT=1521)))
监听程序不支持服务
命令执行成功

*****
服务 "orcl" 包含 1 个例程。
  例程 "orcl", 状态 READY, 包含此服务的 1 个处理程序...~~~~~过一会PMON 注册动态LISTENER了
服务 "orcl_XPT" 包含 1 个例程。
  例程 "orcl", 状态 READY, 包含此服务的 1 个处理程序...


SQL> connxh/a831115@orcl;
已连接。

 

静态时候 LISTENER 将 LISTENER.ORA中 GLOBAL_NAME 与CLIENT TNSNAMES.ORA中 SERVIEC_NAME 匹配 若CILENT TNSNAME.ORA中用的 SID 那么 listener  use  LISTENER.ORA中

SID_name 匹配就行了

实验看下

listener.ora
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = E:/oracle/product/10.2.0/Db_1)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = orcl)
      (ORACLE_HOME = E:/oracle/product/10.2.0/Db_1)
      (SID_NAME = orcl)
    )
  )

 

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
    )
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 6688-621)(PORT = 1521))
    )
  )

tnsnames.ora
ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 6688-621)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)                                                      ~~~~~~~~~~~~~~~~~~~将SERVICE_NAME 修改成别的
    )
  )

EXTPROC_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
    )
    (CONNECT_DATA =
      (SID = PLSExtProc)
      (PRESENTATION = RO)
    )
  )

 

 

SQL> show parameter db_name

NAME                                 TYPE        VALUE
------------------------------------ ----------- ---------------
db_name                              string      xhtest
SQL> show parameter db_domain

NAME                                 TYPE        VALUE
------------------------------------ ----------- ---------------
db_domain                            string
SQL> show parameter service_name

NAME                                 TYPE        VALUE
------------------------------------ ----------- ---------------
service_names                        string      ORCL, XH
SQL> show parameter global_name

NAME                                 TYPE        VALUE
------------------------------------ ----------- ---------------
global_names                         boolean     FALSE
SQL>

 default service_name=global_name=db_name.db_domain


用server_name匹配


    (SID_DESC =
      (GLOBAL_DBNAME = tttttt)~~~~~~~~~~~~~~~~~~~修改 (LISTENER.ORA)
      (ORACLE_HOME = E:/oracle/product/10.2.0/Db_1)
      (SID_NAME = orcl)
    )
  )


ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 6688-621)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)~~~~~~~~
      (SERVICE_NAME= orcl)~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~(tnsnames.ORA)
    )
  )

 

LSNRCTL STOP
        START
        STATUS

服务 "tttttt" 包含 1 个例程。
  例程 "orcl", 状态 UNKNOWN, 包含此服务的 1 个处理程序...~~~此时只有一个静态
命令执行成功
LSNRCTL>


SQL> connxh/a831115@orcl
ERROR:
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务~~~出现问题 LISTENER.ORA中GLOBAL_NAME与 TNSNAMES.ORA中SERVICE_NAME 不匹配


警告: 您不再连接到 ORACLE。


用orcle_sid匹配
LISTENER.ORA

    (SID_DESC =
      (GLOBAL_DBNAME = tttttt)~~~~~~~~~~~~~~不在使用这个匹配
      (ORACLE_HOME = E:/oracle/product/10.2.0/Db_1)
      (SID_NAME = orcl)~~~~使用这个
    )
  )

 

 

tnsnames.ora
ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 6688-621)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (oracle_sid = orcl)**********************************让TNSNAMES使用ORACLESID 这样 LISTENER.ORA 将用 SID_NAME与起其匹配
    )
  )


LSNRCTL STOP
        START


服务 "PLSExtProc" 包含 1 个例程。
 例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "tttttt" 包含 1 个例程。
 例程 "orcl", 状态 UNKNOWN, 包含此服务的 1 个处理程序...~~~~~~~~~~~~~~~~~~静态注册
命令执行成功~~~~~~~~~~~~~LSTENER STATUS


SQL> connxh/a831115@orcl
已连接。

 


******************
关于tnsnames.ora
这个是CLIENT 要配的~~~CLIENT 总要知道些信息才能 才能连接吧 包括 用户 名 密码,IP,PORT,SERVICE_name
xh =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 6688-621)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (oracle_sid  = orcl)
    )
  )
AA =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 6688-621)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (oracle_sid = orcl)
    )
  )
EXTPROC_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
    )
    (CONNECT_DATA =
      (SID = PLSExtProc)
      (PRESENTATION = RO)
    )
  )

也可以 不用TNSNAME。ORA直接连

  IP Address. . . . . . . . . . . . : 192.168.1.126

SQL> connxh/a831115@192.168.1.126:1521/xh  (IP ,PORT,连接符)       属于EASY NAMING
Connected.

SQL> connxh/a831115@(description=(address=(protocol=tcp)(host=6688-621)(port=1521)
)(connect_data=(sid=orcl)))
已连接。

LOCAL NAMING 就是 都放入 TNSNAME。ORA

SQLNET。ORA

SQLNET.AUTHENTICATION_SERVICES= (NTS)~~可以控制/ AS SYSDBA(会有单独实验详细介绍 AS SYSDBA)

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT) 这个是允许CLIENT连接的方式

若 TNSNAMES去掉
C:/>sqlplusxh/a831115@xh

SQL*Plus: Release 10.1.0.2.0 - Production on 星期三 8月 12 15:56:32 2009

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

ERROR:
ORA-12154: TNS:could not resolve the connect identifier specified

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~几个检查
C:/>PING 192.168.1.126~~~~~~~~~~~~网络

Pinging 192.168.1.126 with 32 bytes of data:

Reply from 192.168.1.126: bytes=32 time<1ms TTL=128
Reply from 192.168.1.126: bytes=32 time<1ms TTL=128
Reply from 192.168.1.126: bytes=32 time<1ms TTL=128
Reply from 192.168.1.126: bytes=32 time<1ms TTL=128

Ping statistics for 192.168.1.126:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 0ms, Average = 0ms


C:/>tnsping xh~~~~~~~~~oracle层的检查

TNS Ping Utility for 32-bit Windows: Version 10.1.0.2.0 - Production on 12-8月 -
2009 15:58:55

Copyright (c) 1997, 2003, Oracle.  All rights reserved.

Used parameter files:
E:/oracle/product/10.1.0/Db_1/network/admin/sqlnet.ora


Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 6688-621
)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (oracle_sid = orcl)))
OK (50 msec)

若PING通 但TNSPING不通 那么检查TNSNAMES.ora or sqlnet.ora中是否禁用TNSNAMES

 

C:/>lsnrctl~~~~控制LISTENER

LSNRCTL for 32-bit Windows: Version 10.1.0.2.0 - Production on 12-8月 -2009 16:0
1:17

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

Welcome to LSNRCTL, type "help" for information.

LSNRCTL> help
The following operations are available
An asterisk (*) denotes a modifier or extended command:

start               stop                status
services            version             reload
save_config         trace               change_password
quit                exit                set*~~~~~~~~~~~~~~还有许多可设置的参数
show*

LSNRCTL> show
The following operations are available after show
An asterisk (*) denotes a modifier or extended command:

rawmode                     displaymode
rules                       trc_file
trc_directory               trc_level
log_file                    log_directory
log_status                  current_listener
inbound_connect_timeout     startup_waittime
snmp_visible                save_config_on_stop 使用查联机文档就行了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值