Oracle 11g如果监听故障排查

76次阅读
没有评论

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

这篇文章给大家分享的是有关 Oracle 11g 如果监听故障排查的内容。丸趣 TV 小编觉得挺实用的,因此分享给大家做个参考,一起跟随丸趣 TV 小编过来看看吧。

虚机数据库服务器 oracle11G 的监听意外中止,报错如下
Oracle 11g 如果监听故障排查
在虚机上执行 lsnrctl start,问题解决。
1、当连接异常时,可以通过分析监听日志来查找线索
〜[test]$ find $ORACLE_HOME -name listener.log
/opt/64bit/oracle/11.2.0/log/diag/tnslsnr/sinrndvud062/listener/trace/listener .log

〜[DBCHC] $ vim /opt/64bit/oracle/11.2.0/log/diag/tnslsnr/sinrndvud062/listener/trace/listener.log
110856 Fri Oct 21 17:00:31 2018
110857 21-OCT-2018 17:00:31(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = DBCHC)(CID =(PROGRAM = sqlplus)(HOST = sinrndvud062)(USER = ora112)))(ADDRESS =(PROTOCOL = tcp)(HOST = 10.160.164.131)(PORT = 47405))建立 DBCHC 12514
110858 TNS-12514:TNS:监听器当前不知道连接中请求的服务描述符
110859 Fri Oct 21 17:02:47 2018
110860 21-OCT-2018 17:02:47 service_update OSMSRDB 0
110861 21-OCT-2018 17:02:53 service_update OSMSRDB 0
110862 21-OCT- 2018 17:02:54(CONNECT_DATA =(SID = OSMSRDB)(CID =(PROGRAM = JDBC 瘦客户端)(HOST = jdbc)(USER = linqus)))(ADDRESS =(PROTOCOL = tcp)(HOST = 10.160).164.132)(PORT = 32823))建立 OSMSRDB 0
110863 21-OCT-2018 17:02:56 service_update OSMSRDB 0
110864 Fri Oct 21 17:03:07 2018
110865 21-OCT-2018 17:03:07 service_update XSONGDB 0
110866 21-OCT-2018 17:03:08(CONNECT_DATA =(SID = OSMSRDB)(CID =(PROGRAM = JDBC 瘦客户端)(HOST = jdbc)(USER = linqus)))(ADDRESS =(PROTOCOL = tcp)(HOST = 10.160。164.132)(PORT = 32835))建立 OSMSRDB 0
110867 21-OCT-2018 17:03:08 service_update OSMSRDB 0
110868 Fri Oct 21 17:06:19 2018
110869 21-OCT-2018 17:06:19 service_update XSONGDB 0
110870 21-OCT-2018 17:06:21(CONNECT_DATA =(SID = XSONGDB)(CID =(PROGRAM = JDBC 瘦客户端)(HOST = jdbc)(USER = linqus)))(ADDRESS =(PROTOCOL = tcp)(HOST = 10.160.164.200)(PORT = 60498))建立 XSONGDB 0
110871 21-OCT-2018 17:06:22 service_update XSONGDB 0
110872 21-OCT-2018 17:06:24(CONNECT_DATA =(SID = XSONGDB)(CID =(PROGRAM = JDBC 瘦客户端)(HOST = jdbc)(USER = linqus)))(ADDRESS =(PROTOCOL = tcp)(HOST = 10.160.164.200)(PORT = 60502))建立 XSONGDB 0
110873 21-OCT-2018 17:06:25 service_update XSONGDB * 0

在 RAC 环境中,需要切换到网格用户来查询监听日志
test #su – grid
/ home / ora11grid [FRWK]:找到 $ find ORACLE_HOME -name listener.log
查找:/ opt / ora11grid / crf / admin / run / crflogd:权限被拒绝 br/ 查找:/ opt / ora11grid / crf / admin / run / crfmond:权限被拒绝
/opt/ora11grid/log/diag/tnslsnr/vgerndpud852/listener/trace/listener.log

/ home / ora11grid [FRWK]:lsnrctl

LSNRCTL for Linux:版本 11.2.0.3.0 – 生产于 17-NOV-2018 04:28:53

版权所有(c)1991,2011,Oracle。版权所有。

欢迎来到 LSNRCTL,输入“帮助”获取信息。

LSNRCTL show
show
asterisk(*)表示修饰符或扩展命令后可以使用以下操作:

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
dynamic_registration enable_global_dynamic_endpoint
oracle_home pid
connection_rate_limit

LSNRCTL show log_status
连接到(DESCRIPTION =(ADDRESS =(PROTOCOL = IPC)(KEY = LISTENER)))
LISTENER 参数“log_status”设置为 ON
命令已成功完成。

2、监听异常中止解决方案

可以将以下参数添加到 listener.ora 中
SUBSCRIBE_FOR_NODE_DOWNEVENT= OFF

如下:
SUBSCRIBE_FOR_NODE_DOWN_EVENT_LISTENER = OFF

编辑监听监控脚本,当监听异常中止后自动启动监听(每分钟侦测一次)
脚本如下:

$ cat listener.sh
#!/bin/bash

ORACLE_HOME = / u01 / product / oracle / 11.2.0 / db_1; export ORACLE_HOME

pid =ps -ef | grep tnslsnr | grep -v grep | awk {print $ 2}

if [echo $ pid | awk -v bi = 1 {print($ 1 bi)?“1”:“0”} -eq“1”]
else
echo“监听器运行正常”
else
echo“监听器已经停止”
$ ORACLE_HOME / bin / lsnrctl start
exit

$ crontab -l

/ 1 sh /data/run/listener.sh 1 / data / run / log / listener.log 2 / data / run / log / listener.bad

3、监听日志的定期清理
要对监听日志文件(listener.log)进行定期清理,如果不定期清理,会遇到下面一些麻烦:

1)监听日志文件(listener.log)变得越来越大,占用额外的存储空间。(当然现在存储白菜价,不差那几 G 的空间。但是我们还是要本着工匠情怀,精益求精)
2)监听日志文件(listener.log)变得太大会带来一些问题:LISTENER.LOG 日志大小不能超过 2GB,超过会导致 LISTENER 监听器无法处理新的连接。
3)监听日志文件(listener.log)变得太大,给写入、查看带来的一些性能问题、麻烦。

另:监听日志 listener.log 日志放在了 $ORACLE_BASE/diag/tnslsnr/ 机器名 /listener/trace 目录下

4、三种文件的解析
1)sqlnet.ora—– 通过这个文件来决定怎么样找一个连接中出现的连接字符串。
例如我们客户端输入
sqlplus sys/oracle@ora
假如我的 sqlnet.ora 是下面这个样子
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME,EZCONNECT)
那么,客户端就会首先在 tnsnames.ora 文件中找 ora 的记录. 如果没有相应的记录则尝试把 ora 当作一个主机名,通过网络的途径去解析它的 ip 地址然后去连接这个 ip 上 GLOBAL_DBNAME=ora 这个实例,当然我这里 ora 并不是一个主机名

EZCONNECT 表示:可以使用简单的方式连接 Oracle 例如:

1 CONNECT username/password@host[:port][/service_name][/instance_name]
2 CONNECT username/password@host[:port][/service_name]
3 sqlplus / as sysdba
4 sqlplus sys as sysdba/sys@127.0.0.1:1521

如果我是这个样子

NAMES.DIRECTORY_PATH= (TNSNAMES)
那么客户端就只会从 tnsnames.ora 查找 ora 的记录, 括号中还有其他选项,如 LDAP 等并不常用。

2)tnsnames.ora—— 这个文件类似于 unix 的 hosts 文件,提供的 tnsname 到主机名或者 ip 的对应。
只有当 sqlnet.ora 中类似 NAMES.DIRECTORY_PATH= (TNSNAMES) 这样,也就是客户端解析连接字符串的顺序中有 TNSNAMES 是,才会尝试使用这个文件。
例子:
ORA_TEST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = LXL)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ora)
)
)

ORA_TEST:客户端连接服务器端使用的服务别名。注意一定要顶行书写,否则会无法识别服务别名。
PROTOCOL:客户端与服务器端通讯的协议,一般为 TCP,该内容一般不用改。
HOST:ORACLE 服务器端 IP 地址或者 hostname。确保服务器端的监听启动正常。
PORT:数据库侦听正在侦听的端口,可以察看服务器端的 listener.ora 文件或在数据库侦听所在的机器的命令提示符下通过 lnsrctl status [listener name]命令察看。此处 Port 的值一定要与数据库侦听正在侦听的端口一样。
SERVICE_NAME:在服务器端,用 system 用户登陆后,sqlplus show parameter service_name 命令查看。

3)listener.ora——listener 监听器进程的配置文件
关于 listener 进程就不多说了,接受远程对数据库的接入申请并转交给 oracle 的服务器进程。所以如果不是使用的远程的连接,listener 进程就不是必需的,同样的如果关闭 listener 进程并不会影响已经存在的数据库连接。
例子:
#listener.ora Network Configuration File: #E:/oracle/product/10.1.0/Db_2/NETWORK/ADMIN/listener.ora

Generated by Oracle configuration tools.

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = ora)
(ORACLE_HOME = E:/oracle/product/10.1.0/Db_2)
(SID_NAME = ora)
)
)

LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = hostname)(PORT = 1521))
)

LISTENER:监听名称,可以配置多个监听,多个监听的端口号要区分开来。
GLOBAL_DBNAME:全局数据库名。通过 select * from global_name; 查询得出
ORACLE_HOME:oracle 软件的跟目录
SID_NAME:服务器端(本机)的 SID
PROTOCOL:监听协议,一般都使用 TCP
HOST:本机 IP 地址,双机时候使用浮动 IP(用 IP 地址较好解析)
PORT:监听的端口号,使用 netstat –an 检查该端口不被占用。

当你输入 sqlplus sys/oracle@orcl 的时候
1. 查询 sqlnet.ora 看看名称的解析方式,发现是 TNSNAME
2. 则查询 tnsnames.ora 文件,从里边找 orcl 的记录,并且找到主机名,端口和 service_name
3. 如果 listener 进程没有问题的话,建立与 listener 进程的连接。
4. 根据不同的服务器模式如专用服务器模式或者共享服务器模式,listener 采取接下去的动作。默认是专用服务器模式,没有问题的话客户端就连接上了数据库的 server process。
5. 这时候网络连接已经建立,listener 进程的历史使命也就完成了。

感谢各位的阅读!关于“Oracle 11g 如果监听故障排查”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

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