Oracle LISTENER监听文件参数详解及Lsnrctl命令综述

来源:互联网 发布:安全用什么语言编程 编辑:程序博客网 时间:2024/05/22 18:12

来源:http://writeblog.csdn.net/PostEdit.aspx

 

Oracle LISTENER监听文件参数详解及Lsnrctl命令综述

# listener.ora Network Configuration File: F:/oracle/product/10.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = D:/oracle/product/10.2.0/db_1)
      (PROGRAM = extproc)
    )
  )
 
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
    )
  )
以上是本人本机上的一个监听文件,下面就该监听文件的各个参数的作用作个描述:
LISTENER       指出一个监听器定义的起始点。它实际上是正被定义的当前监听器的名称。默认的名称是LISTENER。
DESCRIPTION    描述每个监听位置
ADDRESS_LIST   含有与监听器正在监听的那些位置有关的地址信息
PROTOCOL       指定用于本监听位置的协议
HOST           保存监听器所驻留在的那台计算机的名称
PORT           含有监听器正在上面监听的地址
SID_LIST_LISTENER  定义配置监听器所针对的ORACLE服务的列表
SID_DESC       描述每个Oracel SID
GLOBAL_DBNAME  标识全局数据库名称。本项应该与当前Oracle服务的init.ora文件中的SERVICE_NAMES项一致
ORACLE_HOME    给出服务器上Oracle可执行程序的位置
SID_NAME       含有用于本Oracle实例的Oracle SID的名称
 
                    Lsnrctl命令综述
 
Lsnrctl命令用来管理Oracle监听器,是一个命令行界面。想调用这个命令行工具,在命令行键入lsnrctl即可。可以在LSNRCTL>提示符下键入help来显示这些命令的一份清单。
Services        列举出服务的一个汇总表及为每个协议服务处理程序所建立和拒绝的连接信息个数
Start listener  启动指定的监听器
Status listener 显示指定监听器的状态
Stop listener   关闭指定的监听器
Trace           打开监听器的跟踪特性
Version         显示Oracle Net软件与协议适配器的版本
Change_password 允许用户修改关闭监听器所需要的密码
Reload          重新读取listener.ora文件,但不关闭监听器。如果该文件发生了变化,重新刷新监听器。
Save_config     当从lsnrctl工具中对listener.ora文件进行了修改时,复制一个叫做listener.bak的listener.ora文件
Exit            退出lsnrctl实用工具
Quit             执行和exit相同的功能

 

--------------------------------------------------------------------------

 

理解 oracle 的 “lsnrctl status”

 

来源:http://oracle.chinaitlab.com/induction/724685.html

 

先看看 lsnrctl status 的输出信息:

    Services Summary...
    Service "PLSExtProc" has 1 instance(s).
    Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this
    service...
    Service "catadb" has 2 instance(s).
    Instance "catadb", status UNKNOWN, has 1 handler(s) for this
    service...
    Instance "catadb", status READY, has 1 handler(s) for this service...
    Service "catadbXDB" has 1 instance(s).
    Instance "catadb", status READY, has 1 handler(s) for this service...
    The command completed successfully

    这里提出两个问题:

    1. 输出中显示的这些 service 是在哪里定义的?
    2. 为什么一个 service 会有两个 instance?

    先来看第二个问题。从oracle 8.1 版本后,在listener.ora文件中没有为数据库预先定义条目的时候,instance 和 listener 可以自动的互相发现。但是习惯上在listener.ora文件中为每个数据库定义一个SID_DESC条目以便在需要的时候使用。这就使服务“catadb”有两个实例:

    一个状态是 UNKNOWN 的实例 是在 listener.ora 文件中静态定义;另一个状态是 READY 的实例是当数据库启动时 PMON进程自动把数据库注册到监听器。在数据库启动后每一分钟注册一次。在使用OEM等工具时需要有监听的静态定义。

    再来看看这些服务是怎么定义的。oracle有三种监听方式:

Database   

提供对数据库实例的网络访问                  

PLSExtProc   

PL/SQL 包访问操作系统可执行程序的方法

Executable

提供对操作系统可执行程序的网络访问      

Database

提供对数据库实例的网络访问

PLSExtProc

PL/SQL 包访问操作系统可执行程序的方法

Executable

提供对操作系统可执行程序的网络访问

    Service "PLSExtProc" 是在 listener.ora 文件中为数据库实例缺省配置的,允许PL/SQL包访问外部程序;
    Service "catadb" 也是在 listener.ora 文件中配置,是每个数据库连接使用的标准模式;
    Service "catadbXDB" 是
Oracle 9i以后版本创建数据库时默认包含的XML DB特性,提供http、ftp等服务,在初始化文spfile(或pfile)中定义;

 

------------------------------------------------------------------

 

ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务 问题解决

 

listener.ora

SID_LIST_LISTENER =

  (SID_LIST =

    (SID_DESC =

      (SID_NAME = PLSExtProc)

      (ORACLE_HOME = G:/oracle/product/10.2.0/db_1)

      (PROGRAM = extproc)

    )

   (SID_DESC =

    (GLOBAL_DBNAME = ORCL)

    (ORACLE_HOME = G:/oracle/product/10.2.0/db_1)  

    (SID_NAME = ORCL)

    )

  )

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = TCP)(HOST = zyk)(PORT = 1521))

    )

  )

 

以上粗体部件为增加的内容,修改后重启监听服务后即可。

 

原创粉丝点击