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

54次阅读
没有评论

共计 6528 个字符,预计需要花费 17 分钟才能阅读完成。

这篇文章主要介绍“Linux 监听开启后无服务怎么办”,在日常操作中,相信很多人在 Linux 监听开启后无服务怎么办问题上存在疑惑,丸趣 TV 小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux 监听开启后无服务怎么办”的疑惑有所帮助!接下来,请跟着丸趣 TV 小编一起来学习吧!

报错信息:
[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(非默认端口)

保存配置

       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

到此,关于“Linux 监听开启后无服务怎么办”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注丸趣 TV 网站,丸趣 TV 小编会继续努力为大家带来更多实用的文章!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-03发表,共计6528字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)