首页 > 系统 > Linux > 正文

Linux监听开启后无服务怎么办

2022-07-09 12:56:12
字体:
来源:转载
供稿:网友
  这篇文章主要介绍“Linux监听开启后无服务怎么办”,在日常操作中,相信很多人在Linux监听开启后无服务怎么办问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux监听开启后无服务怎么办”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
 
  报错信息:
  [oracle@hp2 ~]$ lsnrctl status
 
  LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 18-OCT-2017 00:21:31
 
  Copyright (c) 1991, 2013, Oracle.  All rights reserved.
 
  Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.8.12)(PORT=1521)))
  STATUS of the LISTENER
  ------------------------
  Alias                     LISTENER
  Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
  Start Date                17-OCT-2017 19:45:26
  Uptime                    0 days 4 hr. 36 min. 5 sec
  Trace Level               off
  Security                  ON: Local OS Authentication
  SNMP                      OFF
  Listener Parameter File   /app1/oracle/product/11.2.0/db_1/network/admin/listener.ora
  Listener Log File         /app1/oracle/diag/tnslsnr/hp2/listener/alert/log.xml
  Listening Endpoints Summary...
    (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.8.12)(PORT=1521)))
    (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  The listener supports no services
  The command completed successfully
 
 
  2种方法解决:
 
  一、手工注册,每次重启监听都需要手工注册:
 
  SQL> alter system register;
 
  System altered.
 
  二、修改 listener.ora,一劳永逸解决问题
 
  在LISTENER里添加内容:
 
  SID_LIST_LISTENER =
 
  (SID_LIST =
 
    (SID_DESC =
 
    (GLOBAL_DBNAME = orcl)
 
    (SID_NAME = orcl)
 
    )
 
  )
 
  另,感觉这是个bug,google下·看到:http://www.askmaclean.com/archives/11gr2-rac-add-listener-static-register.html
 
  原来在11gr2新建和修改监听后,不会自动静态注册,需要退出netca 界面,启动netmgr界面,为监听加入静态注册的信息:
 
  点选方才创建的监听器,选择Database Services菜单
 
  填入Global Database Name和本地实例的SID信息,并确认ORACLE HOME Directory(应是Grid Infrastructure的Home目录)正确后点选Save Network Configuration。
 
  重启监听即可
  重新启动后状态:
  [oracle@hp admin]$ lsnrctl start
 
  LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 18-OCT-2017 00:04:50
 
  Copyright (c) 1991, 2013, Oracle.  All rights reserved.
 
  Starting /app1/oracle/product/11.2.0/db_1/bin/tnslsnr: please wait...
 
  TNSLSNR for Linux: Version 11.2.0.4.0 - Production
  System parameter file is /app1/oracle/product/11.2.0/db_1/network/admin/listener.ora
  Log messages written to /app1/oracle/diag/tnslsnr/hp/listener/alert/log.xml
  Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.8.11)(PORT=1521)))
  Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
 
  Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.8.11)(PORT=1521)))
  STATUS of the LISTENER
  ------------------------
  Alias                     LISTENER
  Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
  Start Date                18-OCT-2017 00:04:50
  Uptime                    0 days 0 hr. 0 min. 0 sec
  Trace Level               off
  Security                  ON: Local OS Authentication
  SNMP                      OFF
  Listener Parameter File   /app1/oracle/product/11.2.0/db_1/network/admin/listener.ora
  Listener Log File         /app1/oracle/diag/tnslsnr/hp/listener/alert/log.xml
  Listening Endpoints Summary...
    (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.8.11)(PORT=1521)))
    (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  Services Summary...
  Service "SUNTX" has 1 instance(s).
    Instance "SUNTX", status UNKNOWN, has 1 handler(s) for this service...
  The command completed successfully
 
 
  监听状态解析
  在运行lsnrctl命令的status时,常会看到如下返回值:
 
  服务“test”包含1个例程。
 
     例程"mydata",状态 UNKOWN,包含此服务的一个处理程序。。。
 
  服务"a"包含1个例程。
 
     例程"mydata",状态 READY,包含此服务的一个处理程序。。。
 
  这里的,状态UNKOWN即表明为静态注册(手动填写参数);
 
  状态为READY的记录,表明为动态注册(listener.ora参数由PMON进程自动从参数文件获取);
 
  一、静态注册
 
  监听配置中,数据库服务中的全局数据库名,可以写任意内容,与数据库无关,只要保证SID正确即可连上数据库。
 
  由于静态注册,参数是手动静态添加,与数据库无关。数据库无法确认监听是否正确配置。因此,lsnrctl中的status显示状态为unkown。即不保证能连通数据库。
 
  注意:静态注册监听,客户端在配置tnsnames.ora服务命名时,“(Oracle 8i或更高版本)服务名”里填写内容要与服务端静态注册监听器时的全局数据库名一致。否则,无法连通。
 
  lsnrctl中显示如下
 
  服务“test”包含1个例程。
 
     例程“mydata”,状态UNKOWN,包含此服务的一个处理程序。。。
 
  test即从监听配置过程,数据库服务中的“全局数据库名”读到的值(即配置文件中GLOBAL_DBNAME的值),“mydata”是从监听配置中,数据库服务中SID读到的值(即SID_NAME的值)。
 
  SID_LIST_LISTENER =
 
   (SID_LIST =
 
      (SID_DESC =
 
        (GLOBAL_DBNAME = test)
 
        (ORACLE_HOME = /orahome/oracle/product/10.2.0/db_1)
 
        (SID_NAME = mydata)
 
      )
 
    )
 
  客户端在配置tnsname时,服务名(SERVICE_NAME)即为test。否则,连接不到数据库。
 
  ABC =
 
    (DESCRIPTION =
 
      (ADDRESS_LIST =
 
        (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.23)(PORT = 1521))
 
      )
 
      (CONNECT_DATA =
 
        (SERVICE_NAME =
  test)
      )
 
    )
 
  这里的ABC,为服务命名。可以为任意值,在客户端连接服务器时,填写的主机字符串,即为此服务命名ABC。
 
  二、动态注册
 
  1、缺省的动态注册
  pmon在数据库启动到mount或open时,动态从参数文件中读取service_names值。service_names可以为多个值。
 
  service_names缺省为dbca建立数据库时的全局数据库名。
 
  设置参数service_names为'a,b,c',命令如下:
 
  alter system set service_names='a,b,c';
 
  则:
 
  lsnrctl状态如下:
 
  服务“test”包含1个例程。
 
     例程"mydata",状态 UNKOWN,包含此服务的一个处理程序。。。
 
  服务"a"包含1个例程。
 
     例程"mydata",状态 READY,包含此服务的一个处理程序。。。
 
  服务"b"包含1个例程。
 
     例程"mydata",状态 READY,包含此服务的一个处理程序。。。
 
  服务"c"包含1个例程。
 
     例程"mydata",状态 READY,包含此服务的一个处理程序。。。
 
  服务 "mydata.ccddt.cn" 包含一个例程。
 
     例程"mydata",状态 READY, 包含此服务的一个处理程序。。。
 
  以上服务名a, b, c, mydata.ccddt.cn都为READY,为动态注册。
 
  这里多了最后一条"mydata.ccddt.cn",是PMON缺省动态注册到监听器内的。
 
  注意:不管参数service_names为何值,pmon都会自动以全局数据库名(这里为mydata.ccddt.cn)为服务名,动态注册一个监听。
 
  缺省情况下,若启用动态注册监听,端口号必须为1521。若启用其他端口的动态监听注册,必须要做相关配置。
 
  通过查看v$session,状态为SYS$USERS的连接为通过静态注册监听连接到服务器。
 
  2、自定义端口的动态监听注册
 
  若要启用非默认端口1521的动态监听注册,缺省状态,Oracle不会进行动态注册。要启用动态注册,必须设置local_listener参数。并在服务端配置tnsnames.ora指定监听参数,或者直接通过修改local_listener指定监听参数。步骤如下:
 
  1)服务端
 
  netmgr,配置监听程序,监听端口为1525(非默认端口)
 
  Linux监听开启后无服务怎么办
 
  保存配置
 
          2)、指定监听参数
 
       (1)法1:直接通过修改local_listener参数指定
 
      SQL>alter system set LOCAL_LISTENER='(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.23)(PORT=1525))';
      System altered
    SQL>alter system register
 
    System altered
 
               (2)法2:
 
  在Oracle服务器端建立$ORACLE_HOME/network/admin/tnsnames.ora。解析文件,位置并填入如下内容
 
  mytest =
 
  (DESCRIPTION =
      (ADDRESS_LIST =
          (ADDRESS=(PROTOCOL=TCP)(HOST = 192.168.1.23)(PORT = 1525))
      )
  )
 
 
  这里的mytest也可以根据自己需要,修改为其他字符串。如a或b等。
 
  设置参数,指定通过tnsnames.ora内的信息指定监听参数
 
  SQL>alter system set local_listener=mytest;
  System altered
 
  SQL>alter system register;
 
  3、查看监听器状态
 
  LSNRCTL> status
  Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.23)(PORT=1525)))
  STATUS of the LISTENER
  ------------------------
  Alias                     LISTENER
  Version                   TNSLSNR for Linux: Version 10.2.0.1.0 - Production
  Start Date                15-MAR-2011 10:43:47
  Uptime                    0 days 0 hr. 0 min. 56 sec
  Trace Level               off
  Security                  ON: Local OS Authentication
  SNMP                      OFF
  Listener Parameter File   /orahome/oracle/product/10.2.0/db_1/network/admin/listener.ora
  Listener Log File         /orahome/oracle/product/10.2.0/db_1/network/log/listener.log
  Listening Endpoints Summary...
    (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oraserver)(PORT=1525)))
  Services Summary...
  Service "a" has 1 instance(s).
    Instance "mydata", status READY, has 1 handler(s) for this service...
  Service "b" has 1 instance(s).
    Instance "mydata", status READY, has 1 handler(s) for this service...
  Service "c" has 1 instance(s).
    Instance "mydata", status READY, has 1 handler(s) for this service...
  Service "mydata" has 1 instance(s).
    Instance "mydata", status READY, has 1 handler(s) for this service...
  Service "mydataXDB" has 1 instance(s).
    Instance "mydata", status READY, has 1 handler(s) for this service...
  Service "mydata_XPT" has 1 instance(s).
    Instance "mydata", status READY, has 1 handler(s) for this service...
  The command completed successfully

(编辑:错新网)

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表